{"$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":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"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"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"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"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"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"]},{"target":{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"],"owasp":"A05:2025"}},{"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":"AC2","name":"Forms \u0026 labels","shortDescription":{"text":"Forms \u0026 labels"},"helpUri":"https://codehealth.canine.dev/dimensions/AC2"},{"id":"AC3","name":"Page structure","shortDescription":{"text":"Page structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AC3"},{"id":"AC5","name":"ARIA correctness","shortDescription":{"text":"ARIA correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/AC5"},{"id":"AC6","name":"Visual \u0026 motion safety","shortDescription":{"text":"Visual \u0026 motion safety"},"helpUri":"https://codehealth.canine.dev/dimensions/AC6"},{"id":"AC7","name":"A11y enforcement","shortDescription":{"text":"A11y enforcement"},"helpUri":"https://codehealth.canine.dev/dimensions/AC7"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX2","name":"Stateful singletons","shortDescription":{"text":"Stateful singletons"},"helpUri":"https://codehealth.canine.dev/dimensions/AX2"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX5","name":"Architecture \u0026 structure","shortDescription":{"text":"Architecture \u0026 structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AX5"},{"id":"AX6","name":"Interface segregation","shortDescription":{"text":"Interface segregation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX6"},{"id":"DM1","name":"Aggregate boundaries","shortDescription":{"text":"Aggregate boundaries"},"helpUri":"https://codehealth.canine.dev/dimensions/DM1"},{"id":"DM10","name":"One transaction, one aggregate","shortDescription":{"text":"One transaction, one aggregate"},"helpUri":"https://codehealth.canine.dev/dimensions/DM10"},{"id":"DM12","name":"Ambient inputs in the domain","shortDescription":{"text":"Ambient inputs in the domain"},"helpUri":"https://codehealth.canine.dev/dimensions/DM12"},{"id":"DM6","name":"Domain \u2194 infrastructure boundary","shortDescription":{"text":"Domain \u2194 infrastructure boundary"},"helpUri":"https://codehealth.canine.dev/dimensions/DM6"},{"id":"DM8","name":"Value-object opportunities","shortDescription":{"text":"Value-object opportunities"},"helpUri":"https://codehealth.canine.dev/dimensions/DM8"},{"id":"DM9","name":"Scattered domain decisions","shortDescription":{"text":"Scattered domain decisions"},"helpUri":"https://codehealth.canine.dev/dimensions/DM9"},{"id":"ED5","name":"Idempotency","shortDescription":{"text":"Idempotency"},"helpUri":"https://codehealth.canine.dev/dimensions/ED5"},{"id":"GD1","name":"Unfinished \u0026 placeholder code","shortDescription":{"text":"Unfinished \u0026 placeholder code"},"helpUri":"https://codehealth.canine.dev/dimensions/GD1"},{"id":"IC1","name":"Incompleteness \u0026 stubs","shortDescription":{"text":"Incompleteness \u0026 stubs"},"helpUri":"https://codehealth.canine.dev/dimensions/IC1"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"PF2","name":"Allocation hygiene","shortDescription":{"text":"Allocation hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF2"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"S1","name":"Web-Security Posture","shortDescription":{"text":"Web-Security Posture"},"helpUri":"https://codehealth.canine.dev/dimensions/S1"},{"id":"X1","name":"Async correctness","shortDescription":{"text":"Async correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X1"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X12","name":"Unreachable branch","shortDescription":{"text":"Unreachable branch"},"helpUri":"https://codehealth.canine.dev/dimensions/X12"},{"id":"X13","name":"Undrained process stream","shortDescription":{"text":"Undrained process stream"},"helpUri":"https://codehealth.canine.dev/dimensions/X13"},{"id":"X14","name":"Bypassable address classification","shortDescription":{"text":"Bypassable address classification"},"helpUri":"https://codehealth.canine.dev/dimensions/X14"},{"id":"X15","name":"Unvalidated length from an untrusted reader","shortDescription":{"text":"Unvalidated length from an untrusted reader"},"helpUri":"https://codehealth.canine.dev/dimensions/X15"},{"id":"X16","name":"Unfloored truncation loop","shortDescription":{"text":"Unfloored truncation loop"},"helpUri":"https://codehealth.canine.dev/dimensions/X16"},{"id":"X17","name":"Uncapped recursion over a caller-supplied document","shortDescription":{"text":"Uncapped recursion over a caller-supplied document"},"helpUri":"https://codehealth.canine.dev/dimensions/X17"},{"id":"X18","name":"Disposal-pattern correctness","shortDescription":{"text":"Disposal-pattern correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X18"},{"id":"X19","name":"Unrestored process-global state","shortDescription":{"text":"Unrestored process-global state"},"helpUri":"https://codehealth.canine.dev/dimensions/X19"},{"id":"X20","name":"Mistyped argument guard","shortDescription":{"text":"Mistyped argument guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X20"},{"id":"X21","name":"Side-effecting pattern guard","shortDescription":{"text":"Side-effecting pattern guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X21"},{"id":"X22","name":"Contradicted release guard","shortDescription":{"text":"Contradicted release guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X22"},{"id":"X23","name":"Unguarded diagnostic materialisation","shortDescription":{"text":"Unguarded diagnostic materialisation"},"helpUri":"https://codehealth.canine.dev/dimensions/X23"},{"id":"X24","name":"Document value interpolated into markup unescaped","shortDescription":{"text":"Document value interpolated into markup unescaped"},"helpUri":"https://codehealth.canine.dev/dimensions/X24"},{"id":"X25","name":"Inert configuration knob","shortDescription":{"text":"Inert configuration knob"},"helpUri":"https://codehealth.canine.dev/dimensions/X25"},{"id":"X26","name":"Unsynchronised callback handoff","shortDescription":{"text":"Unsynchronised callback handoff"},"helpUri":"https://codehealth.canine.dev/dimensions/X26"},{"id":"X27","name":"Collection changed while being enumerated","shortDescription":{"text":"Collection changed while being enumerated"},"helpUri":"https://codehealth.canine.dev/dimensions/X27"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X29","name":"Per-element action decided by a fixed element","shortDescription":{"text":"Per-element action decided by a fixed element"},"helpUri":"https://codehealth.canine.dev/dimensions/X29"},{"id":"X3","name":"Exception handling","shortDescription":{"text":"Exception handling"},"helpUri":"https://codehealth.canine.dev/dimensions/X3"},{"id":"X30","name":"Support guard that admits what it rejects","shortDescription":{"text":"Support guard that admits what it rejects"},"helpUri":"https://codehealth.canine.dev/dimensions/X30"},{"id":"X32","name":"Type resolved by simple name across every loaded assembly","shortDescription":{"text":"Type resolved by simple name across every loaded assembly"},"helpUri":"https://codehealth.canine.dev/dimensions/X32"},{"id":"X4","name":"Structured logging","shortDescription":{"text":"Structured logging"},"helpUri":"https://codehealth.canine.dev/dimensions/X4"},{"id":"X5","name":"Nullable reference types","shortDescription":{"text":"Nullable reference types"},"helpUri":"https://codehealth.canine.dev/dimensions/X5"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"id":"X7","name":"Silent fallback defaults","shortDescription":{"text":"Silent fallback defaults"},"helpUri":"https://codehealth.canine.dev/dimensions/X7"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"AdjustAST.transformStorableTemplate (cyclomatic 134): AdjustAST.transformStorableTemplate has cyclomatic complexity 134 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c75ac9065946d7365ce5447a5492f90f2ce50974dc44e54365c3c01d2828a1"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusRefchecks.traverse (cyclomatic 90): OptimusRefchecks.traverse has cyclomatic complexity 90 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ae504cb4ab25ed8ad5abd770e36825d17ea5ac310902a75f85c5ace0e17c8c"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoAsync.transformSafe (cyclomatic 89): AutoAsync.transformSafe has cyclomatic complexity 89 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":1641}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dbadf6d209a3aa9d4e6dec523bcfef5a79a261af358e43853b94d35b935c227"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusRefchecks.checkDefDef (cyclomatic 89): OptimusRefchecks.checkDefDef has cyclomatic complexity 89 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc12176447a71476e1b582696826253f44e65698f319ccbef4abc37329360c38"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeOps.fieldType (cyclomatic 88): TypeOps.fieldType has cyclomatic complexity 88 (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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"efc234b781c39d82f7e163eb90c99177d1a1389909b1d9105480dc5e306c4042"}},{"ruleId":"D1","level":"warning","message":{"text":"StandardsTraverser.checkApplication (cyclomatic 62): StandardsTraverser.checkApplication has cyclomatic complexity 62 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4e72d3d70937a07136ad6407f5225aa868a991fcbfbcf6f24776d87f7da902"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractBitemporalSpace.unsafeMultipleUpdate (cyclomatic 55): AbstractBitemporalSpace.unsafeMultipleUpdate has cyclomatic complexity 55 (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"82cee09bbc97e014dddbb80d47b0f9d36b4f51eeb6fd72294f3c6aa49729eb51"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultBinder.handleFuncCall (cyclomatic 51): DefaultBinder.handleFuncCall has cyclomatic complexity 51 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e6094b8fea7c7b546ea3a28814437b21c75ae919d8594994e0d1d95789ae38f"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleCodeMotion.transform (cyclomatic 50): SimpleCodeMotion.transform has cyclomatic complexity 50 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"c38e5abb0eaaab981df0383b5e72fa167b9d3c508321f93d5a850378894668c3"}},{"ruleId":"D1","level":"warning","message":{"text":"SerializedKeyBasedIndexOptimizer.handleSelect (cyclomatic 49): SerializedKeyBasedIndexOptimizer.handleSelect 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/SerializedKeyBasedIndexOptimizer.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"a23134defb36433a4ee9d898fcabbf9dcf405e948fbc9ff32e812e4ad7503542"}},{"ruleId":"D1","level":"warning","message":{"text":"EmbeddableTransformer.handleClassDef (cyclomatic 48): EmbeddableTransformer.handleClassDef 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EmbeddableComponent.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa23b3cbe103ed2fdf50edbc2bc2badf70bd17e515bea24402cb855437db6d04"}},{"ruleId":"D1","level":"warning","message":{"text":"ProductFormats.unmangle (cyclomatic 48): ProductFormats.unmangle has cyclomatic complexity 48 (threshold 15). 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormats.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5432bfda63a1ef54b14d593202fbd7efd8ec377d5110d42a69db03c7d94a1d1"}},{"ruleId":"D1","level":"warning","message":{"text":"Convertor.transform (cyclomatic 46): Convertor.transform has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f0b7315ab66b9128b1fc1efc1b89e14f4d52a46c77ce7075633c59eef9d0e44"}},{"ruleId":"D1","level":"warning","message":{"text":"JoinColumnView.createNewArray (cyclomatic 46): JoinColumnView.createNewArray has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca26881005cdca0420b66fa9c924bc42a06c927bbcbe47a3e2942c855deeb1f"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyInfoTyper.infoType (cyclomatic 45): PropertyInfoTyper.infoType 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/provider/PropertyInfoProvider.scala"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"79f4411392bd6f2270f650cadaac74320a64bca1a3c4e356aec71ad497fc3e90"}},{"ruleId":"D1","level":"warning","message":{"text":"DALRegisteredIndexBinder.handleFuncCall (cyclomatic 44): DALRegisteredIndexBinder.handleFuncCall has cyclomatic complexity 44 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"de5c0782252c4da41066468077a1c99a37dcc5720ba16f31c4e898b26e3fc7ea"}},{"ruleId":"D1","level":"warning","message":{"text":"AdjustAST.transformSafe (cyclomatic 43): AdjustAST.transformSafe 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":1393}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2398ffe6ad8029922988d458f0674b7a71a82c6e55a3ad7dc1c3bf533af302f"}},{"ruleId":"D1","level":"warning","message":{"text":"PredicatePushdownOptimizer.handleSelect (cyclomatic 43): PredicatePushdownOptimizer.handleSelect 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"a84a1f2b7d4e065700bfdd7e9ce0b96df1e4ac14b7fc5e1113d20170982f8adc"}},{"ruleId":"D1","level":"warning","message":{"text":"JavaOpts.filterJavaRuntimeOptions (cyclomatic 40): JavaOpts.filterJavaRuntimeOptions 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":"optimus/buildtool/projects/core/src/main/scala/optimus/buildtool/utils/JavaOpts.scala"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae5f7d70a9b17108da3a5381e0119ddc8e2adc7b1cb7c40aba2cbb2e64fefcfa"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeCacheConfigsParser.parseWithPropertyConfigs (cyclomatic 39): NodeCacheConfigsParser.parseWithPropertyConfigs 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":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":944}}}],"partialFingerprints":{"codehealthFindingId/v1":"2558a5847882d2540a271607e2bd5d01e2f17b0b05fc82ae926db2e90ced1833"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstantNominator.traverse (cyclomatic 39): ConstantNominator.traverse has cyclomatic complexity 39 (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"410efe80370a3c6d53b9c11b9f0a01387b6ae53ee11223e213e6aa254c9af740"}},{"ruleId":"D1","level":"warning","message":{"text":"PicklerSelector.getPickler (cyclomatic 39): PicklerSelector.getPickler has cyclomatic complexity 39 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf4bed8984316fdff40bfa23fa594787caf78173b3e8494c3ce729079834d68d"}},{"ruleId":"D1","level":"warning","message":{"text":"PicklerSelector.getUnpickler (cyclomatic 39): PicklerSelector.getUnpickler has cyclomatic complexity 39 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7c1d3540b68dd00e365221c2b54207025eef4f87651aa4f32d593b1d91f71ed"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusRefchecks.checkKeyOrIndex (cyclomatic 38): OptimusRefchecks.checkKeyOrIndex has cyclomatic complexity 38 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c967627952725cbf3c91bf47c395a851440a3e87ee802101b06ae18997a2567"}},{"ruleId":"D1","level":"warning","message":{"text":"TopologyRingCreator.allocateSubPolicyMember (cyclomatic 38): TopologyRingCreator.allocateSubPolicyMember 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"af19bf6e48bae6da17623870b52e0d8f9e156e8a4ac7a43433e82aa1d29533b4"}},{"ruleId":"D1","level":"warning","message":{"text":"IncomingBufferedData.readFromChannel (cyclomatic 37): IncomingBufferedData.readFromChannel 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"e045e4e152edddbc10dda16f0e8441cecb3decb163b7435adb06564b3e392abb"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorController.doSelection (cyclomatic 37): SelectorController.doSelection 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SelectorController.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"f529649450c734557467b92fd0a0c10fe17970a8b5d9ae37c088553eda7ccf19"}},{"ruleId":"D1","level":"warning","message":{"text":"ZincCompiler.compile (cyclomatic 34): ZincCompiler.compile 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincCompiler.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"de9151a4e17042be69bcdfc7334037856b2cf104a9bd2c88acd0401f35a9effd"}},{"ruleId":"D1","level":"warning","message":{"text":"ErrorResultSerializer.deserialize (cyclomatic 34): ErrorResultSerializer.deserialize 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. This is NOT this file\u0027s highest cyclomatic complexity: ResultSerializer.deserialize (cyclomatic 68) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/CommandProtoSerialization.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e7268b2f343583d16b4c83423a6d9fd89ccec60bac9c7d3e8a2bab9ce8c5d56"}},{"ruleId":"D1","level":"warning","message":{"text":"StratosphereConfig.\u003Cinit\u003E (cyclomatic 34): StratosphereConfig.\u003Cinit\u003E has cyclomatic complexity 34 (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":"optimus/stratosphere/bootstrap/src/main/java/optimus/stratosphere/bootstrap/config/StratosphereConfig.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca6bd6a9864857a43adbeca3ecdf2067bff020f896f4413209788421d553d30a"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractSegment.retrieve (cyclomatic 34): AbstractSegment.retrieve 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/AbstractSegment.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"8114dab4ee75ad7301fbf261715df3b2d337a4cf5fc77c2fded6282fc968dc37"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractPersistBlock.closeAndCreateAsserts (cyclomatic 33): AbstractPersistBlock.closeAndCreateAsserts 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ab85fd27abe6d979837a9ac0c6eb1a2eee83428d43f2af98ae5fdd6d802b617"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncGraph.transformSafe (cyclomatic 33): AsyncGraph.transformSafe has cyclomatic complexity 33 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14c48650b02d2edcf1bb0708cf7b6084f0dea1347c679611292634fa8d18549"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusExportInfo.buildMetadataMap (cyclomatic 33): OptimusExportInfo.buildMetadataMap has cyclomatic complexity 33 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusExportInfoComponent.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d9fe6e0e3773200639028e1538570af5708b137eab42bf0061939d89bf3412"}},{"ruleId":"D1","level":"warning","message":{"text":"ProtoPickleSerializer.protoToProperties (cyclomatic 32): ProtoPickleSerializer.protoToProperties has cyclomatic complexity 32 (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a7de875a610ab7b7bf9f1935655a25da8aeb9c2cb2598eb3b9c16b09a1d599b"}},{"ruleId":"D1","level":"warning","message":{"text":"SubqueryMerger.canMergeWithFrom (cyclomatic 31): SubqueryMerger.canMergeWithFrom has cyclomatic complexity 31 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/RedundantSubqueryRemover.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b562d7e650ad7155f88f93af698cfe2398ae7a59a8551884655c94ce304db0a"}},{"ruleId":"D1","level":"warning","message":{"text":"InstrumentationInjector.transform (cyclomatic 31): InstrumentationInjector.transform has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjector.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"753de0a71c3f997478c2b82ff6fdc8cf03ba51727c1a37b53eb4ceb053f78603"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeMenu.create (cyclomatic 29): NodeMenu.create has cyclomatic complexity 29 (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeMenu.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fa56a52c6cdc70a160749855a5f7a362a64f9b29e8339d559d35ad2daa6db5d"}},{"ruleId":"D1","level":"warning","message":{"text":"DALProvider.knownProjectorToLambda (cyclomatic 29): DALProvider.knownProjectorToLambda has cyclomatic complexity 29 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/DALProvider.scala"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"61d5198f606ae7f270f437209da05534f53c854b0979c97649cc4d2ab9b99f74"}},{"ruleId":"D1","level":"warning","message":{"text":"ClassParser.valueForDef (cyclomatic 29): ClassParser.valueForDef 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"2845298605c078c67b6187646dcf865a87d23e81f9095587e58ad5b67bbbd1a6"}},{"ruleId":"D1","level":"warning","message":{"text":"JvmDependenciesLoader.load (cyclomatic 28): JvmDependenciesLoader.load has cyclomatic complexity 28 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/JvmDependenciesLoader.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"03450475c34c4ad0eaa57219deca297dd2b09057b5af9acc71ff13ef1425ff6b"}},{"ruleId":"D1","level":"warning","message":{"text":"ScopeDefinitionCompiler.checkScopes (cyclomatic 28): ScopeDefinitionCompiler.checkScopes has cyclomatic complexity 28 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"19371d57106953824c0c488ffab145e36f2cdb7084515a698186b8eb7d9b2bea"}},{"ruleId":"D1","level":"warning","message":{"text":"NotificationStreamImpl.handlePubSubResult (cyclomatic 28): NotificationStreamImpl.handlePubSubResult has cyclomatic complexity 28 (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/pubsub/NotificationStreamImpl.scala"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6db3a8f2fd87b4f0f204f279ee9a4e7db8741520bbbbed3ab4c10ce1faf197"}},{"ruleId":"D1","level":"warning","message":{"text":"ContextualChecker.traverse (cyclomatic 28): ContextualChecker.traverse 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/refchecks/ContextualChecks.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"0610fb03da0425c117563cd10d117e8b0e569408ae8c4ff18dd0ec4c5bd83210"}},{"ruleId":"D1","level":"warning","message":{"text":"ExcelReaderIterable.convertItemValue (cyclomatic 28): ExcelReaderIterable.convertItemValue has cyclomatic complexity 28 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelMultiRelation.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a550ca92530a371d124ab506828aff56628b5f79c0f110ac68f3e23e5294045"}},{"ruleId":"D1","level":"warning","message":{"text":"SpecialElementRewriter.handleConditional (cyclomatic 28): SpecialElementRewriter.handleConditional has cyclomatic complexity 28 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"50f367c4e88b7f8bc6aaeaf33885084564db174d01055f2cda4de849b598bb24"}},{"ruleId":"D1","level":"warning","message":{"text":"PersistentAsyncServer.createConnection (cyclomatic 28): PersistentAsyncServer.createConnection 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"6778c5b748a9cfbeb5fdefffea5914c7d38a759203d795480836178fcf1bb6ab"}},{"ruleId":"D1","level":"warning","message":{"text":"CopyDynamic.extract (cyclomatic 27): CopyDynamic.extract 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/internal/CopyMethodMacros.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"e29e17f3f8d875ee3aeebd9e40081cf1ca902069884b12153bcd9c2d24d84ef6"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultBinder.bindJoin (cyclomatic 27): DefaultBinder.bindJoin 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"a28f6d48975efa3bb17729e7ad85319d68354e9f2bb5f3bc783b66d115af6524"}},{"ruleId":"D1","level":"warning","message":{"text":"RelationalUtils.convertItemValue (cyclomatic 27): RelationalUtils.convertItemValue 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/RelationalUtils.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"b262250ada53c858af21ec013dcbc637d3541c7e91573d64b3f4d657b1f171a7"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionChecker.handleFuncCall (cyclomatic 27): ExpressionChecker.handleFuncCall 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc1136227ea25202df993388a662957ef5e6ee1224f0b47d2c6b972ef2f54a7"}},{"ruleId":"D1","level":"warning","message":{"text":"TopologyRingCreator.doAllocation (cyclomatic 27): TopologyRingCreator.doAllocation 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"161f4b50aff6f974c7d4746946c68ca776fc45fbacb4e6670309d3607bbfc4b3"}},{"ruleId":"D1","level":"warning","message":{"text":"BackgroundProcess._startWithRetry (cyclomatic 26): BackgroundProcess._startWithRetry 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/process/BackgroundProcess.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f21d8b269d9d1008877d118330442cd1249a993d258bd418106637bc1974b3"}},{"ruleId":"D1","level":"warning","message":{"text":"ExperimentalAsyncIterator2.buf (cyclomatic 26): ExperimentalAsyncIterator2.buf 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5f6dcf6092b2ad29c95503989e1ecd87d161152cb303225a791f29e5d17d5a8"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncGraph.transformFuncArgumentToNodeByName (cyclomatic 26): AsyncGraph.transformFuncArgumentToNodeByName 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"95c9468a03c04654c05a4c8ec4a90b02ca948608fe9e3f7c0f8f0c4872119145"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeSynthesis.transformRawNodeDef (cyclomatic 26): NodeSynthesis.transformRawNodeDef 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/NodeSynthesis.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6bce8b92641572d15add80f3b78d5b18d3a4792b4946c0113d8cf63919cf260"}},{"ruleId":"D1","level":"warning","message":{"text":"CleanName.prettyFrameName (cyclomatic 26): CleanName.prettyFrameName 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"702a676a0702b5f15ffe13292ef636baec269528437a88936d07a59c6adee60e"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeDiGraphReader.read (cyclomatic 26): NodeDiGraphReader.read 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/utils/NodeDiGraphReader.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"afabb2566ab2c3a04aa23c86ac67d526640a29a20073ca76cefc782190393c30"}},{"ruleId":"D1","level":"warning","message":{"text":"IncomingMessageGroup.readFromChannel (cyclomatic 26): IncomingMessageGroup.readFromChannel 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"540a14f162eff616e610cfa672d2a413b2db435d1dd2e19813b02834d6663fb9"}},{"ruleId":"D1","level":"warning","message":{"text":"NewIncomingBufferedData.readFromChannel (cyclomatic 26): NewIncomingBufferedData.readFromChannel 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"782097399ab29340eafd3e74bd0b795ffa4b212360f5d13ae5253f1b23cb422c"}},{"ruleId":"D1","level":"warning","message":{"text":"Compiler.validateTestProperties (cyclomatic 25): Compiler.validateTestProperties has cyclomatic complexity 25 (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":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a04543c323038616e5672b7752369e37273c891cd14ac6a08ebee11f790ac0c"}},{"ruleId":"D1","level":"warning","message":{"text":"BsonByteArraySerialization.writeAny (cyclomatic 25): BsonByteArraySerialization.writeAny has cyclomatic complexity 25 (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/BSONByteArraySerialization.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"746cc39a8053ae54a6c264d6929a2a6e0d7da9a001d27afd144cb8de2e60321d"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoAsync.checkAndRewriteCombinator (cyclomatic 25): AutoAsync.checkAndRewriteCombinator has cyclomatic complexity 25 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"75597deb96ab808cc2b67e427120cd76e4b6abebdd4ad1573b808b9e42e0c6ed"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusDALRefChecks.checkAccelerated (cyclomatic 25): OptimusDALRefChecks.checkAccelerated 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a8d0315aa77c52f0d373dd3623ee5022506f48088647b294c2439ede7bc299f"}},{"ruleId":"D1","level":"warning","message":{"text":"KDBSerializerImpl.serializeList (cyclomatic 25): KDBSerializerImpl.serializeList has cyclomatic complexity 25 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/KDBSerializer.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8cd37eb4d520cd468dbe2d88552dc8219930dc068e2aa274d8805f889063110"}},{"ruleId":"D1","level":"warning","message":{"text":"CrumbMerger.process (cyclomatic 24): CrumbMerger.process has cyclomatic complexity 24 (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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/graph/CrumbMerger.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24d2d4e83865d0989ebb6ac87063acdd8960b2f4382cb754c3dc52b2d60daba"}},{"ruleId":"D1","level":"warning","message":{"text":"AI.to$newNode (cyclomatic 24): AI.to$newNode 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/AsyncIterator.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"19a364ca025c4f0d9d0fe785701b6c5f0f2bdefd9ce17869ae94b3e3c62e4f49"}},{"ruleId":"D1","level":"warning","message":{"text":"RequestSender.sendBatch (cyclomatic 24): RequestSender.sendBatch 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/RequestSender.scala"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"936a82f8fd7532da133c08693ed0989ea385f1227287920b3091815c89cafe24"}},{"ruleId":"D1","level":"warning","message":{"text":"ReflectivePicklingImpl.unpickleFill (cyclomatic 24): ReflectivePicklingImpl.unpickleFill 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/ReflectivePicklingImpl.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fe0096e64261247137a319e4fc9c0515d06f0a76729d9a81ea07b7464c72e52"}},{"ruleId":"D1","level":"warning","message":{"text":"TTTableCellRender.getTextOnSetValue (cyclomatic 24): TTTableCellRender.getTextOnSetValue 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NPTableRenderer.scala"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cc3264f5c4ab4ae343e9b8edbaa607f8723fa4e541a8034716ff54ccd665423"}},{"ruleId":"D1","level":"warning","message":{"text":"PostMacroRewriter.handleFuncCall (cyclomatic 24): PostMacroRewriter.handleFuncCall 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/PostMacroRewriter.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"04eda5ea2e91fc49311beba951915984f398787ebb0b0e1a82e68d1b82e77e7f"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultBinder.bindContains (cyclomatic 24): DefaultBinder.bindContains 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f54b5426b432e16b03f968a7c5e6c67e5599f1f43ca1e77f8c66a4cc3d3767c"}},{"ruleId":"D1","level":"warning","message":{"text":"DbQueryTreeComparer.compare (cyclomatic 24): DbQueryTreeComparer.compare 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/tree/DbQueryTreeComparer.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"56f4bf671b69e7e48054845055a0d3fe002f55ba128550fad4f7f5495d4073f1"}},{"ruleId":"D1","level":"warning","message":{"text":"DALFormatter.handleFuncCall (cyclomatic 24): DALFormatter.handleFuncCall 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALFormatter.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e329f47a417270dc33d99c9a7617463165c898910b5207f970c07213db1420"}},{"ruleId":"D1","level":"warning","message":{"text":"GeneralAPICheck.checkAnnotationProperties (cyclomatic 24): GeneralAPICheck.checkAnnotationProperties 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/GeneralAPICheckComponent.scala"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c0923d733fed59178b37cce8c8f3393549bd3ee8fb5bad6cf26397a67ceff39"}},{"ruleId":"D1","level":"warning","message":{"text":"StandardsTraverser.checkDefDef (cyclomatic 24): StandardsTraverser.checkDefDef 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"7868281c9e87ccce35add051a2961e0e6d00033f57dabc90c0b6a6d9fb897030"}},{"ruleId":"D1","level":"warning","message":{"text":"LoomAdapter.enrichMethod (cyclomatic 24): LoomAdapter.enrichMethod 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b46a55dccd01540f27c770136cc291b4775c403dbf7cdb892d8173a1af8a00c"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityAgentTransformer.transform (cyclomatic 24): EntityAgentTransformer.transform 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":"optimus/platform/projects/entityagent/src/main/java/optimus/EntityAgent.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d5a39dfba53e673c22b5892e6aac3c86f74424d4138901795051b9e4a51d6d"}},{"ruleId":"D1","level":"warning","message":{"text":"DaemonStateZK.waitForQuorumState (cyclomatic 24): DaemonStateZK.waitForQuorumState 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DaemonStateZK.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d9c3780692f892b582dc35c0d9c7e90d7dd0256862a83f256573ab60bd4ec43"}},{"ruleId":"D1","level":"warning","message":{"text":"RingTree.merge (cyclomatic 24): RingTree.merge 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce2df02625e78525b6286d07c92e77879648c8ef478e1ad5ba566af9cc73563"}},{"ruleId":"D1","level":"warning","message":{"text":"ClassParser.objectToString (cyclomatic 24): ClassParser.objectToString 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"75f3dc822774db5c08afff1c05e279f6321eece6d99bb78f6eec94863173a128"}},{"ruleId":"D1","level":"warning","message":{"text":"Parser.tokens (cyclomatic 23): Parser.tokens has cyclomatic complexity 23 (threshold 15). 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":"optimus/buildtool/projects/core/src/main/scala/optimus/buildtool/utils/parser/Parser.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"c68846f865882305dd06a532c2e4d7e36066bafb6a7ddcad384f9b67e4b507b5"}},{"ruleId":"D1","level":"warning","message":{"text":"DependencyLoader.loadLibrary (cyclomatic 23): DependencyLoader.loadLibrary 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/DependencyLoader.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"112fa0f9a9fa3f5b11e499bf1c07a63b282f9b01b87bee46b79836cebe772a01"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusSeqUtils.mapConserve (cyclomatic 23): OptimusSeqUtils.mapConserve 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqUtils.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d74c12516b75933b0816300111744ae9249865339677824edc941596e62e1c3"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusSeqUtils.mapConserve (cyclomatic 23): OptimusSeqUtils.mapConserve 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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqUtils.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eaa6e69937200321013de261aeda6a9e092d3a78f5a54b773126d88095ca89b"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusDALRefChecks.traverse (cyclomatic 23): OptimusDALRefChecks.traverse 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"e611fe8148a191850e3a25da455330a45233d1455b2bf40463eb300253d0530c"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusIteratorLinter.traverse (cyclomatic 23): OptimusIteratorLinter.traverse 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/refchecks/IteratorUsage.scala"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"4808f03486c4cae4b6aecf84f524a2235f882203713e4546cf29747c2ded77ae"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicObjSortRule.compareLeftRight (cyclomatic 23): DynamicObjSortRule.compareLeftRight 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/dynamic/DynamicObjectRelationUtils.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"de8f8d44b0d4e43a6831250bba96c4873614ba2566cf9cfd3bb08272480a450c"}},{"ruleId":"D1","level":"warning","message":{"text":"RelationColumnView.executeBinaryExpression (cyclomatic 23): RelationColumnView.executeBinaryExpression 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ff236b7f0f46c301c7efc8a20698e2eba5f5229af760ac02463570a9efba182"}},{"ruleId":"D1","level":"warning","message":{"text":"LoomAdapter.forwardQueuedMethods (cyclomatic 23): LoomAdapter.forwardQueuedMethods 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"999c00f429ee7717d5b280bf54c57df37a48fb112fa2d929dd4343726dbcf123"}},{"ruleId":"D1","level":"warning","message":{"text":"StandardBuilder.buildScopes (cyclomatic 22): StandardBuilder.buildScopes 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/StandardBuilder.scala"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d3a558c475ffa4603bd343deaf985b5bd63bf0165cae004969ae7787c53b74"}},{"ruleId":"D1","level":"warning","message":{"text":"UpstreamArtifacts.distinctArtifacts (cyclomatic 22): UpstreamArtifacts.distinctArtifacts 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/UpstreamArtifacts.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"b24bb987ab27a0ee5d28ab87cb74acf973c16ffe130995ab1fd033b948eac389"}},{"ruleId":"D1","level":"warning","message":{"text":"SummonImpl.summon (cyclomatic 22): SummonImpl.summon 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7d677091ebb61beb7a1ca29c67263ff7f0ddc1fbe1d1a87be87de9eb920934d"}},{"ruleId":"D1","level":"warning","message":{"text":"DSIClient.executeCommandsWithRetry (cyclomatic 22): DSIClient.executeCommandsWithRetry 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIClient.scala"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f88a563cd53964ca2a23a98c43a3d7297eff0ef9057ec84bf6f375290bf3489"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoAsync.opaque (cyclomatic 22): AutoAsync.opaque 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5357a937a5c7047f777ed1b388b7745f2a702f954fed62611c03615a541e87b"}},{"ruleId":"D1","level":"warning","message":{"text":"StackAnalysis.buildStackTrees (cyclomatic 22): StackAnalysis.buildStackTrees 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1230}}}],"partialFingerprints":{"codehealthFindingId/v1":"d66930739a1de04f6e4185a266895bf7776f25ff9dedbb3836f04ef58ff1f895"}},{"ruleId":"D1","level":"warning","message":{"text":"RelationColumnView.get (cyclomatic 22): RelationColumnView.get 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bb9f739f8410f2eac9f674912659e14da2a52db735d116c0d92c4001729f826"}},{"ruleId":"D1","level":"warning","message":{"text":"ColumnOrdering.compare (cyclomatic 22): ColumnOrdering.compare 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":2379}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab0b1c86d42ee3ef15f77dbc0514b702d7f5d8ddbc959e3e024dd1e5620a2bf"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncRetrievalOperationImpl.resultReceived (cyclomatic 22): AsyncRetrievalOperationImpl.resultReceived 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"154caf018ddb53e8429aee75e4cfe9f781c826252393c829587b7a55710eeb9e"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleRetrievalOperation.update (cyclomatic 22): SimpleRetrievalOperation.update 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/SimpleRetrievalOperation.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"f540f36a00e725f909e2bfcb420aba4845f9b2e515ec69611d0c00761a747631"}},{"ruleId":"D1","level":"warning","message":{"text":"TopologyParser._parse (cyclomatic 22): TopologyParser._parse 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/topology/TopologyParser.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4d12e7dbae483a29e4595bbca447beaa57145f4823a5618cd1da3a0c89036a0"}},{"ruleId":"D1","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadScope (cyclomatic 21): ScopeDefinitionCompiler.loadScope has cyclomatic complexity 21 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"31dc9992e8a2098a89bac166eb980f45ef79739f7aab3a00c248f5c270426ac2"}},{"ruleId":"D1","level":"warning","message":{"text":"GridProfiler.getCSV (cyclomatic 21): GridProfiler.getCSV 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"1598cb87554b58fae9e6f701879b6f39b0e70135855fd68a9bad5b2764a529e1"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceReporter.traceEntity (cyclomatic 21): TraceReporter.traceEntity has cyclomatic complexity 21 (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"c04df4b23fd38718becf6b9e94765574a50ea7dc66fb58fadddfbe2d43ff9b5b"}},{"ruleId":"D1","level":"warning","message":{"text":"ProtoPickleSerializer.protoToSlottedBuffer (cyclomatic 21): ProtoPickleSerializer.protoToSlottedBuffer 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. This is NOT this file\u0027s highest cyclomatic complexity: ProtoPickleSerializer.propertiesToProto (cyclomatic 30) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cec4bd59ceb04060c814cdd1053e4f03f4c9ba3dd373655fe95b57251841d0f"}},{"ruleId":"D1","level":"warning","message":{"text":"QueryBinder.bindMember (cyclomatic 21): QueryBinder.bindMember has cyclomatic complexity 21 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/mapping/QueryBinder.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"e979f5773718df79a11abd19d3a31521784a75bbff0acb87e60a619d389d8ad4"}},{"ruleId":"D1","level":"warning","message":{"text":"ComparisonRewriter.handleBinaryExpression (cyclomatic 21): ComparisonRewriter.handleBinaryExpression has cyclomatic complexity 21 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ComparisonRewriter.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"112cde8a311dc00e20d4031729dbc546bd21d3937d7963c5d8b3252775148132"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorController.processKeyChangeRequest (cyclomatic 21): SelectorController.processKeyChangeRequest 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SelectorController.java"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"b493e29123fb9f4fdb7c95f4553dec20683729f95fa7442e53d2688470ed8e84"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiSourceDependency.expandDependencyDefinitions (cyclomatic 20): MultiSourceDependency.expandDependencyDefinitions 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/MultiSourceDependencies.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a12a385d3d0b6b4d64ca9b310abf045b3414fea64a3c2f1eebc8df407488a3a"}},{"ruleId":"D1","level":"warning","message":{"text":"Show.prettyTreeInternal (cyclomatic 20): Show.prettyTreeInternal 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":"optimus/platform/projects/core_macro/src/main/scala/optimus/utils/MacroUtils.scala"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bd8f583a9175c3130722162dd224b896d791736fbea419eab3e0518ec5af21d"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityOps.buildEntityChangeFromSpace (cyclomatic 20): EntityOps.buildEntityChangeFromSpace 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityEventView.scala"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"6971bedcda1825c5f9645b7fc996b4af60cc1a5c9861c77f644dd1a6f9322f51"}},{"ruleId":"D1","level":"warning","message":{"text":"PubSubStreamManager.handlePubSubResult (cyclomatic 20): PubSubStreamManager.handlePubSubResult 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/pubsub/PubSubStreamManager.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a885106e4f5f3ede601ef9726c98ba2540db7df0e2f59e0f712b49cb2a8431f0"}},{"ruleId":"D1","level":"warning","message":{"text":"ProtoPickleSerializer.protoToArraySeq (cyclomatic 20): ProtoPickleSerializer.protoToArraySeq 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. This is NOT this file\u0027s highest cyclomatic complexity: ProtoPickleSerializer.propertiesToProto (cyclomatic 30) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1bfed15a2f38cc8fa97f729a188122692cfadb2a30db988eb3184b6e5de492"}},{"ruleId":"D1","level":"warning","message":{"text":"InstrumentationInjectorAdapter.visitMethod (cyclomatic 20): InstrumentationInjectorAdapter.visitMethod 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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorAdapter.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"126cd8be7bec515bf4e3c15ff8575fad2afd11f86012eb6a78a93415524b3af5"}},{"ruleId":"D1","level":"warning","message":{"text":"SpinningTransferQueue.xfer (cyclomatic 20): SpinningTransferQueue.xfer 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"480ac0867f9f4bc245b0e21a616afcd044fedc28323b7aee4fd4f069c99b7e9c"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiSourceDependenciesLoader.loadJvmDepsIvyConfigurations (cyclomatic 19): MultiSourceDependenciesLoader.loadJvmDepsIvyConfigurations 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/MultiSourceDependenciesLoader.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b23eb13a95c139543db969c5ed4b9756e654a01c9205347ee67f5f0ea02c1e0"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeName.cleanNodeClassName (cyclomatic 19): NodeName.cleanNodeClassName 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/NodeName.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dde5bb43d6860337823310c640ba3ead2299b8a61a11304e2a8b551fef39cbf"}},{"ruleId":"D1","level":"warning","message":{"text":"DependencyTrackerQueue.registerOrEnqueueAction (cyclomatic 19): DependencyTrackerQueue.registerOrEnqueueAction 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"4467bc0d25a9848123a282fb1183dbdb3489326b69d27b24fb0d294ae160285e"}},{"ruleId":"D1","level":"warning","message":{"text":"PickledComparator.compare (cyclomatic 19): PickledComparator.compare has cyclomatic complexity 19 (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/PropertyMapOutputStream.scala"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"606a3a6301b5f9af89c6382e6538ab4e78d606df675b1545cd30170dfdde7292"}},{"ruleId":"D1","level":"warning","message":{"text":"QueryTreeComparer.compare (cyclomatic 19): QueryTreeComparer.compare has cyclomatic complexity 19 (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/QueryTreeComparer.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"598cfd2b2709acbe3fcfffcccfa57ce133911385690ba4b517896ce4b7209e6b"}},{"ruleId":"D1","level":"warning","message":{"text":"AppStats.accumulateImpl (cyclomatic 19): AppStats.accumulateImpl 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0b75bd350eca46541d7982ef140b509f404a672314a1555748f43bf60c80e6d"}},{"ruleId":"D1","level":"warning","message":{"text":"AdjustAST.addPropsToModuleDef (cyclomatic 19): AdjustAST.addPropsToModuleDef 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"beced348f31a0b416be52269ca84fc02a0a588445c7ece2f217f2723a319c074"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultBinder.bindFlatMap (cyclomatic 19): DefaultBinder.bindFlatMap 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c303c5ca98f67e3eadcbcfc493c605e9e99e75ef542cd3dc6d35cdd388d7dbf"}},{"ruleId":"D1","level":"warning","message":{"text":"IterableProvider.removeDuplicatedRowsBasedOnKey (cyclomatic 19): IterableProvider.removeDuplicatedRowsBasedOnKey has cyclomatic complexity 19 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"67060c57b6ae32562553e1a1d8aa7d85d7d6618a6c3488555baac8fdc1ef6190"}},{"ruleId":"D1","level":"warning","message":{"text":"NettyEstablishedChannelHandler.processWrite (cyclomatic 19): NettyEstablishedChannelHandler.processWrite 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":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/internal/transport/NettyEstablishedChannelHandler.java"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c9b21fdcea388c8cb7d76dd7b3eb66448c8c9516ca0b7bf0af694e62153281"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityAgent.premain (cyclomatic 19): EntityAgent.premain 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":"optimus/platform/projects/entityagent/src/main/java/optimus/EntityAgent.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"95139ce1770bde304a8ac81e9053bdb52fe83809a21e5e7930b76d3b404c8271"}},{"ruleId":"D1","level":"warning","message":{"text":"ProtoPutMessageGroup.addValue (cyclomatic 19): ProtoPutMessageGroup.addValue 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5c969a4174f9f9b0c766cf3a8336e9e413381f1ee5ad2e29d111eed86982e9"}},{"ruleId":"D1","level":"warning","message":{"text":"SpinningTransferQueue.unsplice (cyclomatic 19): SpinningTransferQueue.unsplice 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"161d87fe28a3015778628f1dc69f9a40b144794715f2ec7f731127cbe0d1a187"}},{"ruleId":"D1","level":"warning","message":{"text":"ZincProfiler.logAndTraceProfileStats (cyclomatic 18): ZincProfiler.logAndTraceProfileStats 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincProfiler.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b0096322f1d3af3d6720da7d511ba15bc2f9f406c3ef72973f4e5a6254b9b9"}},{"ruleId":"D1","level":"warning","message":{"text":"RunconfCompilationSources.hashedSources (cyclomatic 18): RunconfCompilationSources.hashedSources has cyclomatic complexity 18 (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/RunconfCompilationSources.scala"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec4f705333550cd7837d207171d4110517424817489297799a182ebe1be7b605"}},{"ruleId":"D1","level":"warning","message":{"text":"ModuleSetDefinition.validate (cyclomatic 18): ModuleSetDefinition.validate has cyclomatic complexity 18 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ModuleSetDefinition.scala"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"717b38ffa291e5378825e097d940f6d9444d89840d21bf7cdaeecffe3ec03b28"}},{"ruleId":"D1","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadInheritableScopeDefinition (cyclomatic 18): ScopeDefinitionCompiler.loadInheritableScopeDefinition has cyclomatic complexity 18 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa06abbbaceb67088a5cec3ea0b13c7b0804bd06d8c074888b5a0a05533748d8"}},{"ruleId":"D1","level":"warning","message":{"text":"Compiler.validateAndAssignParents (cyclomatic 18): Compiler.validateAndAssignParents 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":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf0233f9a40c08a4c7761efe0c41d626c73568b5c4e1189f75c0890e935aa522"}},{"ruleId":"D1","level":"warning","message":{"text":"BreadcrumbsPropertyConfigurer.implFromConfig0 (cyclomatic 18): BreadcrumbsPropertyConfigurer.implFromConfig0 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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee0f826e0ddc39b63dda2815b3eebd4ee54193e07d0a67c2f5f9353859aa6288"}},{"ruleId":"D1","level":"warning","message":{"text":"GroupingNodeBatcherSchedulerPluginBase.adapt (cyclomatic 18): GroupingNodeBatcherSchedulerPluginBase.adapt 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"127bb5d8324b12e58e469a9aef6e66b4a2662ce7f5dd4c9e078a8cc58ac13c41"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphSamplers.provide (cyclomatic 18): GraphSamplers.provide 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/sampling/GraphSamplers.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4811ae9c1ec57e7ced7656b10f74057385a6294d6c6dba01bc2b703125e61292"}},{"ruleId":"D1","level":"warning","message":{"text":"Utils.jsonToString (cyclomatic 18): Utils.jsonToString 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9eddd381a40c6d3be3d39649ab7a453d009976c06718b10aadf24bc0ac6a8f8"}},{"ruleId":"D1","level":"warning","message":{"text":"EstablishSessionResultSerializer.deserialize (cyclomatic 18): EstablishSessionResultSerializer.deserialize 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c8bedf74ae63cf3731326367b674047bf5debed7063488a3acc7318815a3f5"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusConstructorsComponent.tryMakeCtor (cyclomatic 18): OptimusConstructorsComponent.tryMakeCtor has cyclomatic complexity 18 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusConstructorsComponent.scala"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"c06ff45406f09ca4f861f816339e6072c813d1ff429cf790373d2339324c5b0d"}},{"ruleId":"D1","level":"warning","message":{"text":"RedirectAccessors.valBackingFields (cyclomatic 18): RedirectAccessors.valBackingFields 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/RedirectAccessorsComponent.scala"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"438d727bee75f3d887626089502802cf50c94fbbae8bcd871288e43185cfd624"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceExplorer.writeCsvDot (cyclomatic 18): TraceExplorer.writeCsvDot 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/TraceExplorer.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2cc14bd7edfdafdd641d231d00374723daa31195505194da12627e8b7caa5a4"}},{"ruleId":"D1","level":"warning","message":{"text":"DALBinder.bindWhere (cyclomatic 18): DALBinder.bindWhere 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"1152635069b6f9104e0cccdfb684d4c02e199067da5f12ba2a273e84e33e5992"}},{"ruleId":"D1","level":"warning","message":{"text":"ConditionOptimizer.optimizeProjection (cyclomatic 18): ConditionOptimizer.optimizeProjection 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfd34a3807dab4a436f0edb55a21576b050da00713385560fc4d0c054b7ddf94"}},{"ruleId":"D1","level":"warning","message":{"text":"StagingPlugin.processCommonOption (cyclomatic 18): StagingPlugin.processCommonOption 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingPlugin.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"6145fa2e1126690dda8c0a83700d585477edfb2c38ed2dddd9f84ba25d01f2e7"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicDependencyDiscoveryMethodVisitor.visitMethodInsn (cyclomatic 18): DynamicDependencyDiscoveryMethodVisitor.visitMethodInsn has cyclomatic complexity 18 (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":"optimus/platform/projects/entityagent/src/main/java/optimus/deps/DynamicDependencyDiscoveryMethodVisitor.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dd9ac32b54e57ea1dc3a6c0333593eb4547e9e352f794af4852cb1e3f88f2ec"}},{"ruleId":"D1","level":"warning","message":{"text":"Dynamic.getType (cyclomatic 18): Dynamic.getType 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/OpcodeHandlers.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b76fe6f44478e02ce04501c74e6f827feac6dea279962c01402ec990096114d"}},{"ruleId":"D1","level":"warning","message":{"text":"AwaitStackManagement.maybeSaveAwaitStack (cyclomatic 18): AwaitStackManagement.maybeSaveAwaitStack 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c5f04415f77179f82c363e2c43d9061b84e7629a2e34f3fdd69fddaea4db12b"}},{"ruleId":"D1","level":"warning","message":{"text":"DirectoryInMemory.largeUpdate (cyclomatic 18): DirectoryInMemory.largeUpdate 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/dir/DirectoryInMemory.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"58aa8699fb5f304e0560d2bf29a288ae7e7063102ffbb3e70ee7f5e824dd7810"}},{"ruleId":"D1","level":"warning","message":{"text":"DependencyWatcher.build (cyclomatic 18): DependencyWatcher.build 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"7792a3fabfad583642854fa3d48ea2b193ac826d98de88f4b39055b3e24d3e86"}},{"ruleId":"D1","level":"warning","message":{"text":"Itr.advance (cyclomatic 18): Itr.advance 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd8536d3446337dc1577150a8aae483cd895bcb0b9e7d8eecfd3b9d971dfc271"}},{"ruleId":"D1","level":"warning","message":{"text":"QueueingConnection.writeAllPending_locked (cyclomatic 18): QueueingConnection.writeAllPending_locked 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/QueueingConnection.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"3285c2f0cbc1bb5c998a71ff40fcc19b90665eaeea37879b8342340c71910f9f"}},{"ruleId":"D1","level":"warning","message":{"text":"BuildSummaryRecorder.logStats (cyclomatic 17): BuildSummaryRecorder.logStats 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/trace/BuildSummaryRecorder.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b40767ec2a309f4a83c6edc22919ccff15944587d7a35b9583d47ce31d2428"}},{"ruleId":"D1","level":"warning","message":{"text":"Formatter.formatValue (cyclomatic 17): Formatter.formatValue has cyclomatic complexity 17 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ObtFileFormatter.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"073c8f177e43342aa9673b04790b26ce040b216d04645118f7e56eb9c00ec94c"}},{"ruleId":"D1","level":"warning","message":{"text":"TwkResolver.nextInCurrent (cyclomatic 17): TwkResolver.nextInCurrent 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/TwkResolver.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fe907d9e294f868b77f94a150a4230933635efc8c6929375b9a0f8b7eccffee"}},{"ruleId":"D1","level":"warning","message":{"text":"DependencyTrackerQueue.afterActionCompleted (cyclomatic 17): DependencyTrackerQueue.afterActionCompleted 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"f80db6a292350bd48bec70cb224189a5a5c17107438a5f25579b8f0ec3a987da"}},{"ruleId":"D1","level":"warning","message":{"text":"stateManager.checkInvariants (cyclomatic 17): stateManager.checkInvariants 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e8333385116a4706f3b7c0e4122b7c6fab2cee8b0aa9027c80c1bdb6abf4b9"}},{"ruleId":"D1","level":"warning","message":{"text":"Scenario.validate (cyclomatic 17): Scenario.validate 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"073bef9420034a3022689a9b947a1b4f8437cd1a6baeda90eaf3424efc76433f"}},{"ruleId":"D1","level":"warning","message":{"text":"Utils.pathMatches (cyclomatic 17): Utils.pathMatches 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb6fe4a8c4882c511cd19f8632e850862f408a6e542b52bbe02423449e5951df"}},{"ruleId":"D1","level":"warning","message":{"text":"HtmlInterpreters.nodeToHtmlString (cyclomatic 17): HtmlInterpreters.nodeToHtmlString 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/util/html/HtmlComponent.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"265bfecf441398231817b943c8353c0a55ae8c3cb14ffe7fd418c3e9fa561247"}},{"ruleId":"D1","level":"warning","message":{"text":"TemporalMatching.matches (cyclomatic 17): TemporalMatching.matches 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Grouping.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dfb4cca8cd8f3731e70b5286bf9a11d1ff023b97694b7ac6be97894f1dd9b0d"}},{"ruleId":"D1","level":"warning","message":{"text":"EstablishSessionResultSerializer.serialize (cyclomatic 17): EstablishSessionResultSerializer.serialize 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. This is NOT this file\u0027s highest cyclomatic complexity: ServiceDiscoveryElementSerializer.deserialize (cyclomatic 18) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"87d49676816f2681a198fbec716c5b2f899f0d90e72fc4c7633f72fe8ddccf40"}},{"ruleId":"D1","level":"warning","message":{"text":"AdjustAST.transformBackedDef (cyclomatic 17): AdjustAST.transformBackedDef 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f5db323cf985fa70bc52677fdc80a38cea23c46196b1bad87bfc87447d6c89f"}},{"ruleId":"D1","level":"warning","message":{"text":"AdjustAST.transformAccelerated (cyclomatic 17): AdjustAST.transformAccelerated has cyclomatic complexity 17 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bbdd9cd7ac5bdc9b8c1288ffb06d59fbb37de832abec2923f8e8af36a1f5fe4"}},{"ruleId":"D1","level":"warning","message":{"text":"ClassifierTransformer.transformSafe (cyclomatic 17): ClassifierTransformer.transformSafe 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/ClassifierComponent.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ae1267865f4e82bdf477d749c31758eb57580714e01969100df1dd6fbc912b5"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeLift.nodeLift (cyclomatic 17): NodeLift.nodeLift 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/NodeLiftComponent.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2738bd1690f4984c621347207bccc05368f3a88874fd86de4067ddc157bea23"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusDALRefChecks.checkParamAccessors (cyclomatic 17): OptimusDALRefChecks.checkParamAccessors 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d5e0c38cab8eb5ff7fe283ee85af5d1fb7af332ed66a82a2522da646240e4a"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusRefchecks.checkParamAccessors (cyclomatic 17): OptimusRefchecks.checkParamAccessors 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"de0dae9560dda74f63aeaa4f9f74eb614301f440419e380d45ce3f84dc55d23f"}},{"ruleId":"D1","level":"warning","message":{"text":"RedirectAccessors.rewriteWithValBackingFields (cyclomatic 17): RedirectAccessors.rewriteWithValBackingFields 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/RedirectAccessorsComponent.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"332279d84d66a4ca2b648e78815cfa8c73ec25f5fff83e52334d8fa2a89d6407"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeClassBuilder.addPropertyNodeMethods (cyclomatic 17): NodeClassBuilder.addPropertyNodeMethods 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7c54b896cdcc2065e9ffc36720607961c52e39e981308da41dbbcfb8a7ddb98"}},{"ruleId":"D1","level":"warning","message":{"text":"TypedUtils.checkOwnership (cyclomatic 17): TypedUtils.checkOwnership has cyclomatic complexity 17 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbbd148084a31339e39383626612c4c2f09b8f91bf68aefd72e18582edc6cfd0"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionElementHelper.modulo (cyclomatic 17): ExpressionElementHelper.modulo has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.minus, ExpressionElementHelper.mul, ExpressionElementHelper.plus) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: ExpressionElementHelper.executeExpression (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"43cf1762389d432ae6e66d01beb0c7f8d8ac92393860a30f806714fd752ed246"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionElementHelper.minus (cyclomatic 17): ExpressionElementHelper.minus has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.modulo, ExpressionElementHelper.mul, ExpressionElementHelper.plus) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: ExpressionElementHelper.executeExpression (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"9691a59267b14c0b0f98e5d269d4968af7b733b4435a18031e1f024ebac8b8a7"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionElementHelper.mul (cyclomatic 17): ExpressionElementHelper.mul has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.modulo, ExpressionElementHelper.minus, ExpressionElementHelper.plus) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: ExpressionElementHelper.executeExpression (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"14c828a2edaa5a674d8ef31b8765230f047104ba71fc62ce0177e59655729b9f"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionElementHelper.plus (cyclomatic 17): ExpressionElementHelper.plus has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.modulo, ExpressionElementHelper.minus, ExpressionElementHelper.mul) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: ExpressionElementHelper.executeExpression (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b6d5ded8915e1f9c0dca286f3305597f16c37d8d0c5944f9e0924ea8be102b"}},{"ruleId":"D1","level":"warning","message":{"text":"DALFormatter.handleBinaryExpression (cyclomatic 17): DALFormatter.handleBinaryExpression 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALFormatter.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"782d3f1209b85b2293aabe1480322996b23fff51f78d052328370c69315523af"}},{"ruleId":"D1","level":"warning","message":{"text":"DALBinder.handleFuncCall (cyclomatic 17): DALBinder.handleFuncCall 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7c8633af928efd90310c72199fd3b4e979ba08ee86c6cc0cd0f0aa1e3b31753"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractAPICheck.visit (cyclomatic 17): AbstractAPICheck.visit 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/GeneralAPICheckComponent.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"571e57e71c10746de02b84ede98eb137779f26795c9d99c3ee87c629da1d003f"}},{"ruleId":"D1","level":"warning","message":{"text":"StandardsTraverser.traverse (cyclomatic 17): StandardsTraverser.traverse 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b26ee59789940abbee355ae88f2362be8b4f1623b93e38f7963026431b98ae"}},{"ruleId":"D1","level":"warning","message":{"text":"InstrumentationInjectorMethodVisitor.injectMethodPrefix (cyclomatic 17): InstrumentationInjectorMethodVisitor.injectMethodPrefix 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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorMethodVisitor.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"dadc1e3aee6afa4f2cdc9a7aefcac2c6bedd627bfc85876437fe117ab13a1d75"}},{"ruleId":"D1","level":"warning","message":{"text":"QueueingConnection.sendAsynchronous (cyclomatic 17): QueueingConnection.sendAsynchronous 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/QueueingConnection.java"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a99f8a1aa375596faaa49f78cbc7c3105964cb198e9aebc9fe024818eb04dbd"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractImageBuilder.processPath (cyclomatic 16): AbstractImageBuilder.processPath 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"8479e3881cb4f06eced22ac5a1eda3fd316b1e704ba9c96608ac4635a956bfc0"}},{"ruleId":"D1","level":"warning","message":{"text":"PythonDependenciesLoader.loadAllDependencies (cyclomatic 16): PythonDependenciesLoader.loadAllDependencies 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/PythonDependenciesLoader.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"431c5d222d58268ad336e1cd7f5a4aca6ecf81109b371f95ab5797df45e3bdf1"}},{"ruleId":"D1","level":"warning","message":{"text":"TemporalSource.translateMarkers (cyclomatic 16): TemporalSource.translateMarkers 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/internal/TemporalSource.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"cff29b3ee991a3028d261cf9583c90e256d7c289e059b0caca0bd23c425f2de8"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeLift.transformSafe (cyclomatic 16): NodeLift.transformSafe 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/NodeLiftComponent.scala"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d3625908d216cc255f1177e976159fd8e9fe812f5076d19764d9cd4fdf8d6e0"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusExportInfo.extractMetaParams (cyclomatic 16): OptimusExportInfo.extractMetaParams 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusExportInfoComponent.scala"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b676a28295f19f2e35e4d32257d14f7ec761d4d92280402d59befb351cdecc6"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusRefchecks.checkValidParent (cyclomatic 16): OptimusRefchecks.checkValidParent 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c2ba4864f4061133838d0910ead917358bee06118108d6bf49af64523b2f2b"}},{"ruleId":"D1","level":"warning","message":{"text":"OptimusTask.runtimeConfig (cyclomatic 16): OptimusTask.runtimeConfig 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusTask.scala"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56006ac7f10763ea307cbed52269140a8ae94901d7b56f8e6374269db7753ab"}},{"ruleId":"D1","level":"warning","message":{"text":"NodeTreeTable.getTreeSelector (cyclomatic 16): NodeTreeTable.getTreeSelector 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTreeTable.scala"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"721da0f61b83c63a5a5d876cecdab3403a34d5bfc6fb3d2e29bf38188a67542a"}},{"ruleId":"D1","level":"warning","message":{"text":"Typer.handleBinaryExpression (cyclomatic 16): Typer.handleBinaryExpression 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/Typer.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e1d57fcd40278a67c9577886e12715a49a0485acb7d575b1878bb9dd647613"}},{"ruleId":"D1","level":"warning","message":{"text":"QueryBinder.bindUntypedMember (cyclomatic 16): QueryBinder.bindUntypedMember 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/mapping/QueryBinder.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"93c4545380ca9d2e17a9d29f2527df15ef28bb88e74d41b3069f095a699022a7"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultBinder.bindAggregate1 (cyclomatic 16): DefaultBinder.bindAggregate1 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff018e1995f78d1ea6f33cc701fe2422aa5cddf7f368ff957b3e89885d7930b1"}},{"ruleId":"D1","level":"warning","message":{"text":"DALEntityBitemporalSpaceLanguage.canBeWhere (cyclomatic 16): DALEntityBitemporalSpaceLanguage.canBeWhere 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/deltaquery/DALEntityBitemporalSpaceReducer.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a5bfad4151b9903ad253c568821169c156ecf579d046e8e7809222f1c55909b"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonPrinter.printString (cyclomatic 16): JsonPrinter.printString has cyclomatic complexity 16 (threshold 15). 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/JsonPrinter.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc5dfda6dcefa5b13006587870a3086124854b0058d35b9a477891c24bdba2ad"}},{"ruleId":"D1","level":"warning","message":{"text":"StandardsTraverser.checkSelection (cyclomatic 16): StandardsTraverser.checkSelection 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"131b83d0eb4507fa8abcfc6f9d0b1320fa15e84efe445ace8c7412e07fbc9dc2"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultServerConnectionsManager.nodesRegistryChanged (cyclomatic 16): DefaultServerConnectionsManager.nodesRegistryChanged 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/DefaultServerConnectionsManager.java"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a5af66e440bc5ca7006022c808d40fb83f91c376eebde862616057b700cb1e"}},{"ruleId":"D1","level":"warning","message":{"text":"InstrumentationInjectorMethodVisitor.onMethodExit (cyclomatic 16): InstrumentationInjectorMethodVisitor.onMethodExit 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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorMethodVisitor.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"8491db3e403a7655b80126a65862060df777da442e50b01bdab63d73f70807fa"}},{"ruleId":"D1","level":"warning","message":{"text":"LCompiler.transform (cyclomatic 16): LCompiler.transform 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/LCompiler.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f472588e2bd42b2e2314c31f8570302f2a6dbf9a6caa3fa27b1ec7376af641"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleWriterConsistentWrite.update (cyclomatic 16): SingleWriterConsistentWrite.update 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/SingleWriterConsistentWrite.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"a98ea9a85936586a2310a324549657529a231e62b47e386a2f54787612694284"}},{"ruleId":"D1","level":"warning","message":{"text":"IORelay.run (cyclomatic 16): IORelay.run 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/io/IORelay.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"db94d1cc40abc7e3b4b7e74b703feceef754b66a705fb83ff245b6e05e3f25f1"}},{"ruleId":"D1","level":"warning","message":{"text":"LWTThread.activeMultiple (cyclomatic 16): LWTThread.activeMultiple 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/LWTThread.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"33b474f04b9fa42c5a9db330dddd2604ee12568b2a031bdcd8af789361ecf5d7"}},{"ruleId":"D2","level":"warning","message":{"text":"AdjustAST.transformStorableTemplate (cognitive 231): AdjustAST.transformStorableTemplate has cognitive complexity 231 (threshold 15). Drivers by points: if/else 89 (172 pts), boolean chains 39, match/switch 13 (20 pts) (nesting depth added 90). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7679e8a797df53b8dd49327b60e81305eb9d063fcf19db741414e6a32580c31"}},{"ruleId":"D2","level":"warning","message":{"text":"TopologyRingCreator.allocateSubPolicyMember (cognitive 177): TopologyRingCreator.allocateSubPolicyMember has cognitive complexity 177 (threshold 15). Drivers by points: if/else 33 (148 pts), loops 6 (24 pts), error handling 1 (4 pts), boolean chains 1 (nesting depth added 136). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"66533fb3075a9bd03f8616d43f196569632339d765aaba1c732bff3c08390256"}},{"ruleId":"D2","level":"warning","message":{"text":"SerializedKeyBasedIndexOptimizer.handleSelect (cognitive 175): SerializedKeyBasedIndexOptimizer.handleSelect has cognitive complexity 175 (threshold 15). Drivers by points: if/else 34 (92 pts), match/switch 16 (76 pts), boolean chains 4, loops 1 (3 pts) (nesting depth added 120). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/SerializedKeyBasedIndexOptimizer.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"d184a33dc77ef262ea9c94ae45197644bde4fc13ee46e7c0313d84c0197feee1"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadInheritableScopeDefinition (cognitive 153): ScopeDefinitionCompiler.loadInheritableScopeDefinition has cognitive complexity 153 (threshold 15). Drivers by points: loops 17 (153 pts) (nesting depth added 136). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"a141a64526bb1090921cc3d99c374c74bd5ad02a0c50634a8248795370cef7c7"}},{"ruleId":"D2","level":"warning","message":{"text":"CrumbMerger.process (cognitive 142): CrumbMerger.process has cognitive complexity 142 (threshold 15). Drivers by points: loops 12 (79 pts), if/else 10 (61 pts), boolean chains 2 (nesting depth added 118). 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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/graph/CrumbMerger.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"013cd367b1120be63bc579ada964cacbfd4f196e50f6f210f3774580028b80c4"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardsTraverser.checkApplication (cognitive 140): StandardsTraverser.checkApplication has cognitive complexity 140 (threshold 15). Drivers by points: if/else 35 (66 pts), match/switch 16 (53 pts), boolean chains 19, loops 1 (2 pts) (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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf6e721e6d931db4511def4ab29d8d06c0b4a0988085f9fc589a207285147fa8"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoAsync.transformSafe (cognitive 132): AutoAsync.transformSafe has cognitive complexity 132 (threshold 15). Drivers by points: if/else 35 (63 pts), boolean chains 37, match/switch 12 (32 pts) (nesting depth added 48). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":1641}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16106f87c0425ea756e85158d92f25a0dede4a16832343659d2f4625af4c6af"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusRefchecks.checkDefDef (cognitive 125): OptimusRefchecks.checkDefDef has cognitive complexity 125 (threshold 15). Drivers by points: if/else 47 (70 pts), boolean chains 28, loops 8 (17 pts), match/switch 5 (10 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66a28311d4ec95755fd736a27a6fe2130ae7cb3741259a1af5d5c9f75212a45"}},{"ruleId":"D2","level":"warning","message":{"text":"PredicatePushdownOptimizer.handleSelect (cognitive 119): PredicatePushdownOptimizer.handleSelect has cognitive complexity 119 (threshold 15). Drivers by points: if/else 31 (72 pts), match/switch 13 (45 pts), boolean chains 2 (nesting depth added 73). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"141ad1adb0b9a340070795321e6de44f7f0563da5ba41c9516782de606d25650"}},{"ruleId":"D2","level":"warning","message":{"text":"IncomingBufferedData.readFromChannel (cognitive 108): IncomingBufferedData.readFromChannel has cognitive complexity 108 (threshold 15). Drivers by points: if/else 40 (103 pts), error handling 1 (2 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 65). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c7a08cea4c2c7d38e3bb393ae0ab2152c72ea6a9e0f6b9bc7c7b109e1e9f013"}},{"ruleId":"D2","level":"warning","message":{"text":"TopologyRingCreator.doAllocation (cognitive 107): TopologyRingCreator.doAllocation has cognitive complexity 107 (threshold 15). Drivers by points: if/else 22 (89 pts), loops 4 (10 pts), match/switch 1 (7 pts), boolean chains 1 (nesting depth added 79). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"36222d71570c6db16788c8fa8da223fb0a1c295a454e564f6a1980a0ca684f26"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkspaceDefinition.load (cognitive 105): WorkspaceDefinition.load has cognitive complexity 105 (threshold 15). Drivers by points: loops 14 (105 pts) (nesting depth added 91). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/WorkspaceDefinition.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d56f318aa7ae4401ab79a79dc230299ebb721edaed403869b3708852fd075e"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusRefchecks.traverse (cognitive 105): OptimusRefchecks.traverse has cognitive complexity 105 (threshold 15). Drivers by points: if/else 29 (55 pts), boolean chains 31, match/switch 9 (19 pts) (nesting depth added 36). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b686c3f46da0b8d37de2e262e90f4531bad99b74203f3a72e87ebcd93e6bd46"}},{"ruleId":"D2","level":"warning","message":{"text":"JvmDependenciesLoader.load (cognitive 96): JvmDependenciesLoader.load has cognitive complexity 96 (threshold 15). Drivers by points: loops 19 (74 pts), if/else 9 (19 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 66). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/JvmDependenciesLoader.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e4535c0f2f0eae9bcc5648e4b2ff709e21f866333130298ce2f40d0ee61864e"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadScope (cognitive 93): ScopeDefinitionCompiler.loadScope has cognitive complexity 93 (threshold 15). Drivers by points: loops 12 (78 pts), if/else 10 (11 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 69). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8c54618256b23ba417762fe97dcb8e2eba9d90d433107f06bea7ceafa4fa2a5"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinColumnView.createNewArray (cognitive 92): JoinColumnView.createNewArray has cognitive complexity 92 (threshold 15). Drivers by points: if/else 46 (73 pts), match/switch 10 (19 pts) (nesting depth added 36). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e4cc189750829f5823f9f96cfb668c8698008680b17e633ec4aad4031cb7574"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeOps.fieldType (cognitive 89): TypeOps.fieldType has cognitive complexity 89 (threshold 15). Drivers by points: if/else 55, boolean chains 32, match/switch 1 (2 pts) (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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0b0d6ffb108ebe2a1a9c124ee8f08abe13b29bf822ac7933403fb91b2c2284b"}},{"ruleId":"D2","level":"warning","message":{"text":"Convertor.transform (cognitive 85): Convertor.transform has cognitive complexity 85 (threshold 15). Drivers by points: if/else 27 (51 pts), match/switch 10 (28 pts), boolean chains 6 (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"a564e1063cc35f6ba47971c16c9cdf5154c6889c82cbdd02d3abb1f65279674a"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleCodeMotion.transform (cognitive 84): SimpleCodeMotion.transform has cognitive complexity 84 (threshold 15). Drivers by points: if/else 31 (61 pts), boolean chains 15, match/switch 4 (6 pts), loops 1 (2 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"f735c6714ab33a7d49b9742466a016814fadada77bd0c7156dd79c3d135f94fb"}},{"ruleId":"D2","level":"warning","message":{"text":"EmbeddableTransformer.handleClassDef (cognitive 78): EmbeddableTransformer.handleClassDef has cognitive complexity 78 (threshold 15). Drivers by points: if/else 31 (60 pts), boolean chains 12, match/switch 5 (6 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EmbeddableComponent.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e16e60f1126237877d829bf09402462d5dbdbf037e36eded291fbbed87e8010"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyInfoTyper.infoType (cognitive 76): PropertyInfoTyper.infoType has cognitive complexity 76 (threshold 15). Drivers by points: if/else 40 (65 pts), boolean chains 9, match/switch 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/provider/PropertyInfoProvider.scala"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4900d60b8cb76824674dcea4603036c9430c4f7492b9a1a4605192d3ffec87d"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectivePicklingImpl.unpickleFill (cognitive 74): ReflectivePicklingImpl.unpickleFill has cognitive complexity 74 (threshold 15). Drivers by points: if/else 29 (61 pts), match/switch 2 (7 pts), boolean chains 3, error handling 1 (3 pts) (nesting depth added 39). 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/ReflectivePicklingImpl.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ca7646bf913f37355f8eb14ff63241408943da13a77142f07cb1674370b258"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSegment.retrieve (cognitive 74): AbstractSegment.retrieve has cognitive complexity 74 (threshold 15). Drivers by points: if/else 23 (61 pts), boolean chains 10, match/switch 1 (3 pts) (nesting depth added 40). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/AbstractSegment.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"42d18014bbac1f7dc5fead2b92a125e1a2e0a31834228df4b27ae9e93b338ad4"}},{"ruleId":"D2","level":"warning","message":{"text":"DaemonStateZK.waitForQuorumState (cognitive 74): DaemonStateZK.waitForQuorumState has cognitive complexity 74 (threshold 15). Drivers by points: if/else 21 (57 pts), error handling 2 (7 pts), ternaries 2 (6 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 46). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DaemonStateZK.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bbaa2cb62482dee9b8a00dca4d89663cf81dbe1ee00afe42acc460c92d52937"}},{"ruleId":"D2","level":"warning","message":{"text":"IncomingMessageGroup.readFromChannel (cognitive 74): IncomingMessageGroup.readFromChannel has cognitive complexity 74 (threshold 15). Drivers by points: if/else 27 (69 pts), error handling 1 (2 pts), match/switch 1 (2 pts), loops 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"70be6684d60db4e80cd01a59b28b667b40efe38f2dc4c5837f0b81e7cb371e37"}},{"ruleId":"D2","level":"warning","message":{"text":"NewIncomingBufferedData.readFromChannel (cognitive 74): NewIncomingBufferedData.readFromChannel has cognitive complexity 74 (threshold 15). Drivers by points: if/else 28 (69 pts), error handling 1 (2 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdadab8fa481f1160732f494ad24ebd7037f15e346f187e58e91a37fb8f5df05"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorController.doSelection (cognitive 74): SelectorController.doSelection has cognitive complexity 74 (threshold 15). Drivers by points: if/else 23 (57 pts), boolean chains 15, loops 1 (2 pts) (nesting depth added 35). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SelectorController.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8b5ac36ec70f3621d3f5bbbecb14dfaa5970c37cf8121979e7447cf9b17fd3"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassParser.objectToString (cognitive 72): ClassParser.objectToString has cognitive complexity 72 (threshold 15). Drivers by points: if/else 22 (53 pts), error handling 5 (17 pts), boolean chains 1, loops 1 (nesting depth added 43). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c1f4dc042a0cea4d26d207f83892158cef2e16c9b75799f46af491c2fdc15b4"}},{"ruleId":"D2","level":"warning","message":{"text":"AdjustAST.transformSafe (cognitive 69): AdjustAST.transformSafe has cognitive complexity 69 (threshold 15). Drivers by points: if/else 26 (52 pts), match/switch 4 (12 pts), boolean chains 5 (nesting depth added 34). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":1393}}}],"partialFingerprints":{"codehealthFindingId/v1":"8022e7190f801a9cd596c5eb65cd27632fbbd829e1386629059954bf44091e95"}},{"ruleId":"D2","level":"warning","message":{"text":"PersistentAsyncServer.createConnection (cognitive 67): PersistentAsyncServer.createConnection has cognitive complexity 67 (threshold 15). Drivers by points: if/else 19 (50 pts), error handling 4 (8 pts), boolean chains 6, ternaries 1 (2 pts), loops 1 (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"b041ffd301ee2acea86e27dd0c735731b3167c8bc8a52d21a6fe3a10ed3e9453"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractBitemporalSpace.unsafeMultipleUpdate (cognitive 64): AbstractBitemporalSpace.unsafeMultipleUpdate has cognitive complexity 64 (threshold 15). Drivers by points: match/switch 14 (27 pts), if/else 14 (26 pts), boolean chains 11 (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"c193b2031203d3e8c86bc249e73828f3b538e075f2dc30f22594e4b1703a94e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnOrdering.compare (cognitive 64): ColumnOrdering.compare has cognitive complexity 64 (threshold 15). Drivers by points: if/else 23 (61 pts), match/switch 1 (2 pts), loops 1 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":2379}}}],"partialFingerprints":{"codehealthFindingId/v1":"14d10cec873969b31d8cea78e2d69da0e1fcc208fe45bca59b0637b9090faf3f"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.handleFuncCall (cognitive 64): DefaultBinder.handleFuncCall has cognitive complexity 64 (threshold 15). Drivers by points: if/else 19 (31 pts), match/switch 9 (21 pts), boolean chains 12 (nesting depth added 24). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e416473a96758f87d7b4539cd3098b8edd3208aa9539a59db543df5e6495b8b"}},{"ruleId":"D2","level":"warning","message":{"text":"SpecialElementRewriter.handleConditional (cognitive 63): SpecialElementRewriter.handleConditional has cognitive complexity 63 (threshold 15). Drivers by points: match/switch 14 (35 pts), if/else 21 (27 pts), boolean chains 1 (nesting depth added 27). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"2481a4d31e5ab1693815b8576207f909e1e63a34d00c6df520f3dfdb1ea41e1d"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeDiGraphReader.read (cognitive 62): NodeDiGraphReader.read has cognitive complexity 62 (threshold 15). Drivers by points: if/else 21 (52 pts), boolean chains 5, match/switch 1 (4 pts), loops 1 (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/utils/NodeDiGraphReader.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e0970247bae73a21e2621991fe662f6c69fa58ff6313695b37b00c300e57cd7"}},{"ruleId":"D2","level":"warning","message":{"text":"ActiveRetrievalListeners.receivedRetrievalResponse (cognitive 62): ActiveRetrievalListeners.receivedRetrievalResponse has cognitive complexity 62 (threshold 15). Drivers by points: if/else 15 (39 pts), loops 5 (23 pts) (nesting depth added 42). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveRetrievalListeners.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7ac044f2902e95cc261fbe898ce2df7dfccfddafa0f1c55b6d0fba68d1f9f3"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityOps.buildEntityChangeFromSpace (cognitive 61): EntityOps.buildEntityChangeFromSpace has cognitive complexity 61 (threshold 15). Drivers by points: if/else 21 (32 pts), match/switch 9 (26 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityEventView.scala"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb45e5d8e344749aff869bd4c21e0b7a1c3495fa5f9d81bea2dce8e0c0b35c4a"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeCacheConfigsParser.parseWithPropertyConfigs (cognitive 60): NodeCacheConfigsParser.parseWithPropertyConfigs has cognitive complexity 60 (threshold 15). Drivers by points: if/else 30 (46 pts), match/switch 8 (11 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":944}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0182c551b2216fbcf1090fbf0ab066705d5564df7356704cab38d6a7e03c40c"}},{"ruleId":"D2","level":"warning","message":{"text":"RunconfCompilationSources.hashedSources (cognitive 59): RunconfCompilationSources.hashedSources has cognitive complexity 59 (threshold 15). Drivers by points: loops 10 (32 pts), if/else 13 (24 pts), match/switch 2 (3 pts) (nesting depth added 34). 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/RunconfCompilationSources.scala"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c7252d268f7e7179a7f02efc8de0e0b76c841037d064c4467494f1dfd3d7c21"}},{"ruleId":"D2","level":"warning","message":{"text":"DALBinder.bindWhere (cognitive 59): DALBinder.bindWhere has cognitive complexity 59 (threshold 15). Drivers by points: if/else 23 (46 pts), match/switch 3 (9 pts), loops 1 (3 pts), 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9e4bd7aa5834d3310f87af42432c83b8e55dcfff9511325ffb3b9fd7671813b"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionChecker.handleFuncCall (cognitive 58): ExpressionChecker.handleFuncCall has cognitive complexity 58 (threshold 15). Drivers by points: match/switch 11 (31 pts), if/else 24 (25 pts), boolean chains 2 (nesting depth added 21). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad861bf73970f6f02f399b4f7e56fec882759cd7973f42ea901d374f39acd5b0"}},{"ruleId":"D2","level":"warning","message":{"text":"ZincCompiler.compile (cognitive 57): ZincCompiler.compile has cognitive complexity 57 (threshold 15). Drivers by points: if/else 25 (39 pts), loops 3 (6 pts), boolean chains 4, error handling 4, match/switch 3 (4 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincCompiler.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"51aec41e5b2db84dde5ee5a0185fca9c3b8df9b4152dd49c04cb72838f013bb0"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusSeqUtils.mapConserve (cognitive 57): OptimusSeqUtils.mapConserve has cognitive complexity 57 (threshold 15). Drivers by points: if/else 18 (46 pts), loops 2 (6 pts), boolean chains 3, match/switch 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqUtils.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ec2bdc1fdce94c72ac08ae1c1ccd367b123c0a2701483510aa78ad59ced82b"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusSeqUtils.mapConserve (cognitive 57): OptimusSeqUtils.mapConserve has cognitive complexity 57 (threshold 15). Drivers by points: if/else 18 (46 pts), loops 2 (6 pts), boolean chains 3, match/switch 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqUtils.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1534a6518abca0675a5384c2d7bc431bf9ca382dcf705689cacd4d4ce3d6e57"}},{"ruleId":"D2","level":"warning","message":{"text":"SpinningTransferQueue.xfer (cognitive 57): SpinningTransferQueue.xfer has cognitive complexity 57 (threshold 15). Drivers by points: if/else 10 (35 pts), ternaries 2 (10 pts), loops 3 (8 pts), boolean chains 4 (nesting depth added 38). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"68ad424b508ae6f818d919c19fe72dcbbd3e7e19454e5329f594398f54c7a73c"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaOpts.filterJavaRuntimeOptions (cognitive 55): JavaOpts.filterJavaRuntimeOptions has cognitive complexity 55 (threshold 15). Drivers by points: if/else 28 (38 pts), boolean chains 16, 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":"optimus/buildtool/projects/core/src/main/scala/optimus/buildtool/utils/JavaOpts.scala"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b966635104ee5771cc9ab261d938f4a5d4d716f4150c1e103dd2c20e0115eb"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeName.cleanNodeClassName (cognitive 55): NodeName.cleanNodeClassName has cognitive complexity 55 (threshold 15). Drivers by points: if/else 18 (42 pts), loops 2 (8 pts), boolean chains 5 (nesting depth added 30). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/NodeName.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8ff80b157f92607f1ee8cf726d8b5f79ad8f14369878210ed999983426aa273"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyDynamic.extract (cognitive 55): CopyDynamic.extract has cognitive complexity 55 (threshold 15). Drivers by points: if/else 20 (44 pts), boolean chains 8, loops 1 (2 pts), match/switch 1 (nesting depth added 25). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/internal/CopyMethodMacros.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"60fde2e538c17e963fea0c9770f92f697c4dfb8ec3fff24598e846e09d5847b9"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindFlatMap (cognitive 55): DefaultBinder.bindFlatMap has cognitive complexity 55 (threshold 15). Drivers by points: if/else 19 (37 pts), match/switch 4 (13 pts), boolean chains 5 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac6bc247d17bbd11045f2c428d51d9b24088e562d74019c1ffa1c7671e94f030"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindAggregate1 (cognitive 55): DefaultBinder.bindAggregate1 has cognitive complexity 55 (threshold 15). Drivers by points: if/else 21 (44 pts), match/switch 3 (10 pts), boolean chains 1 (nesting depth added 30). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f4e79f29f869ce84df4e9fc5c2aa120959797ef9c136a15513d4ddad6cd036"}},{"ruleId":"D2","level":"warning","message":{"text":"TopologyParser._parse (cognitive 54): TopologyParser._parse has cognitive complexity 54 (threshold 15). Drivers by points: match/switch 4 (27 pts), if/else 7 (20 pts), loops 2 (5 pts), error handling 2 (nesting depth added 39). 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/topology/TopologyParser.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddf2cb8e634fffbd0ea358b5319833da6d9b93aca2686b42a7753343845a953b"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindWhere (cognitive 52): DefaultBinder.bindWhere has cognitive complexity 52 (threshold 15). Drivers by points: if/else 20 (40 pts), match/switch 3 (9 pts), loops 1 (3 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"259d8ab847ca6cba000f42a62b91a8b814ce95c170d655a5358f2b3a9efa7245"}},{"ruleId":"D2","level":"warning","message":{"text":"GridProfiler.getCSV (cognitive 51): GridProfiler.getCSV has cognitive complexity 51 (threshold 15). Drivers by points: if/else 20 (35 pts), loops 6 (11 pts), match/switch 1 (4 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"62cff50603140f9f3ce7a9b4765321a4c282f147357f2d0bf8d5b1aef3c02611"}},{"ruleId":"D2","level":"warning","message":{"text":"ProductFormats.unmangle (cognitive 50): ProductFormats.unmangle has cognitive complexity 50 (threshold 15). Drivers by points: if/else 16 (26 pts), boolean chains 21, match/switch 1 (3 pts) (nesting depth added 12). 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormats.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc531e66f77964cc529015760f0cb337fe308b33a7af7f4d449562c14dbe644"}},{"ruleId":"D2","level":"warning","message":{"text":"ExcelReaderIterable.convertItemValue (cognitive 49): ExcelReaderIterable.convertItemValue has cognitive complexity 49 (threshold 15). Drivers by points: if/else 25, match/switch 12 (24 pts) (nesting depth added 12). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelMultiRelation.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"714fb3c08e8dba16bfc17fef19c1223bea7044dd03bd2726a3595e0182225e0a"}},{"ruleId":"D2","level":"warning","message":{"text":"LoomAdapter.enrichMethod (cognitive 49): LoomAdapter.enrichMethod has cognitive complexity 49 (threshold 15). Drivers by points: if/else 17 (43 pts), boolean chains 5, loops 1 (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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"05ddfaea30414a20d1df8ef5fd78303d930d8104add6a4f923a8171f04a70872"}},{"ruleId":"D2","level":"warning","message":{"text":"UpstreamArtifacts.distinctArtifacts (cognitive 48): UpstreamArtifacts.distinctArtifacts has cognitive complexity 48 (threshold 15). Drivers by points: if/else 16 (33 pts), match/switch 4 (10 pts), loops 3 (4 pts), 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/UpstreamArtifacts.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"549589e150df1a755a5fa782a507f3e350ff4d720b4743bd7c218e12a42ffe4b"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyLoader.loadLibrary (cognitive 48): DependencyLoader.loadLibrary has cognitive complexity 48 (threshold 15). Drivers by points: if/else 18 (27 pts), loops 7 (16 pts), match/switch 2 (3 pts), 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/DependencyLoader.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"07579be9b1b14093cbf604ee3947c84210eb6755fdfa03e25353bc528d1e9839"}},{"ruleId":"D2","level":"warning","message":{"text":"BackgroundProcess._startWithRetry (cognitive 47): BackgroundProcess._startWithRetry has cognitive complexity 47 (threshold 15). Drivers by points: if/else 15 (28 pts), match/switch 8 (17 pts), 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/process/BackgroundProcess.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a079298c98a8204e72d913bcbd1e227a683a19f3ca657959840aaff1c97a1b6"}},{"ruleId":"D2","level":"warning","message":{"text":"DSIClient.executeCommandsWithRetry (cognitive 47): DSIClient.executeCommandsWithRetry has cognitive complexity 47 (threshold 15). Drivers by points: if/else 20 (35 pts), match/switch 5 (12 pts) (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIClient.scala"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"8175fc1ba47c9bbdc9a8ff284b6200858d8c97731562d4f7f44ccfd297fbfea5"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusRefchecks.checkKeyOrIndex (cognitive 47): OptimusRefchecks.checkKeyOrIndex has cognitive complexity 47 (threshold 15). Drivers by points: if/else 13 (21 pts), boolean chains 20, match/switch 4 (6 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c0e25e821f13966c781af72aa8c06ea1672c809381723356bb5096e1f333129"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindContains (cognitive 47): DefaultBinder.bindContains has cognitive complexity 47 (threshold 15). Drivers by points: if/else 19 (33 pts), boolean chains 7, match/switch 3 (7 pts) (nesting depth added 18). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f77b2d45abc926983fda9d590334f92946fe489547ff2b138a309b58c240619"}},{"ruleId":"D2","level":"warning","message":{"text":"StratosphereConfig.\u003Cinit\u003E (cognitive 47): StratosphereConfig.\u003Cinit\u003E has cognitive complexity 47 (threshold 15). Drivers by points: if/else 29 (37 pts), boolean chains 5, loops 1 (3 pts), error handling 2 (nesting depth added 10). 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":"optimus/stratosphere/bootstrap/src/main/java/optimus/stratosphere/bootstrap/config/StratosphereConfig.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e2bb78f5c14861fca68aee7ab8bd80b2972a298aa14d5e043cec30ee12448f7"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncRetrievalOperationImpl.resultReceived (cognitive 47): AsyncRetrievalOperationImpl.resultReceived has cognitive complexity 47 (threshold 15). Drivers by points: if/else 21 (41 pts), boolean chains 3, error handling 1 (2 pts), ternaries 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ea79147ac6fb14abf83f6c8a45f3fd1e89835e82f9796579a0d7170f25d65cb"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleRetrievalOperation.update (cognitive 47): SimpleRetrievalOperation.update has cognitive complexity 47 (threshold 15). Drivers by points: if/else 19 (41 pts), boolean chains 3, match/switch 1 (3 pts) (nesting depth added 24). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/SimpleRetrievalOperation.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"511e9d3ca3e7af17a06de60b858fe90b5094b3888f92517998b0595286aea836"}},{"ruleId":"D2","level":"warning","message":{"text":"SpinningTransferQueue.unsplice (cognitive 47): SpinningTransferQueue.unsplice has cognitive complexity 47 (threshold 15). Drivers by points: if/else 10 (34 pts), loops 2 (7 pts), boolean chains 6 (nesting depth added 29). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c69822c38c7755544fa5f0c2cd9d951aad54abb64accf17ec2ed3cea5aecea"}},{"ruleId":"D2","level":"warning","message":{"text":"ModuleSetDefinition.validate (cognitive 46): ModuleSetDefinition.validate has cognitive complexity 46 (threshold 15). Drivers by points: loops 14 (41 pts), if/else 5 (nesting depth added 27). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ModuleSetDefinition.scala"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"09a8985ecb75af2bf8263727a2643b042f95873b36ec09ad00dc87ff59acf474"}},{"ruleId":"D2","level":"warning","message":{"text":"StackAnalysis.buildStackTrees (cognitive 46): StackAnalysis.buildStackTrees has cognitive complexity 46 (threshold 15). Drivers by points: if/else 21 (34 pts), loops 2 (6 pts), error handling 1 (3 pts), boolean chains 2, match/switch 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1230}}}],"partialFingerprints":{"codehealthFindingId/v1":"556b97c4d89b76c9ee067c93d510e8c83068255dd2c353d574367c423aeeaf9a"}},{"ruleId":"D2","level":"warning","message":{"text":"Typer.phase2Matches (cognitive 45): Typer.phase2Matches has cognitive complexity 45 (threshold 15). Drivers by points: if/else 13 (42 pts), boolean chains 2, loops 1 (nesting depth added 29). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/Typer.scala"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9dbe19a88f6007d247151c6a9ddc61b024db05e5425e75d8197a1524fd8eefd"}},{"ruleId":"D2","level":"warning","message":{"text":"ContextualChecker.traverse (cognitive 44): ContextualChecker.traverse has cognitive complexity 44 (threshold 15). Drivers by points: if/else 17 (28 pts), match/switch 6 (12 pts), boolean chains 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/refchecks/ContextualChecks.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"da2e6f057d86307468ed35df7d9852d5fc0a796c2afa5070ebc7494b430642ef"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeMenu.create (cognitive 44): NodeMenu.create has cognitive complexity 44 (threshold 15). Drivers by points: if/else 33 (34 pts), boolean chains 3, match/switch 3, error handling 1 (2 pts), loops 1 (2 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeMenu.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"032b06475d176670683af1253fe845d340416ab6b3463d8ebd3497af8028b91e"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindJoin (cognitive 44): DefaultBinder.bindJoin has cognitive complexity 44 (threshold 15). Drivers by points: if/else 14 (22 pts), match/switch 9 (19 pts), boolean chains 3 (nesting depth added 18). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"7474f647130d41f9fb5d331ddd4a57d5549d63d060e98eaa37fdb82f8d242c9f"}},{"ruleId":"D2","level":"warning","message":{"text":"NettyEstablishedChannelHandler.processWrite (cognitive 44): NettyEstablishedChannelHandler.processWrite has cognitive complexity 44 (threshold 15). Drivers by points: if/else 16 (37 pts), loops 3 (5 pts), 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":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/internal/transport/NettyEstablishedChannelHandler.java"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e65a14d83942c252cce9339a7157c2224005353c003d57d05f75f46ac923720"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardBuilder.buildScopes (cognitive 43): StandardBuilder.buildScopes has cognitive complexity 43 (threshold 15). Drivers by points: if/else 19 (22 pts), match/switch 9 (19 pts), boolean chains 1, error handling 1 (nesting depth added 13). 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/StandardBuilder.scala"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"e42cf9709c317215a627e381304264c86a23f79a7a9c406fa9b87ad273bc12b7"}},{"ruleId":"D2","level":"warning","message":{"text":"Scenario.validate (cognitive 43): Scenario.validate has cognitive complexity 43 (threshold 15). Drivers by points: if/else 14 (32 pts), match/switch 2 (7 pts), boolean chains 3, 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"43b4e84c7c1b6bb0a44bfdef51da733ae5192f7d11dc6f787bd88f890f4e9217"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoAsync.opaque (cognitive 43): AutoAsync.opaque has cognitive complexity 43 (threshold 15). Drivers by points: if/else 16 (33 pts), boolean chains 8, match/switch 1 (2 pts) (nesting depth added 18). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e7492ce41bc90bc1ae18837c5b7fd32fcdce9c6dcb2274a017402137112c6b"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusIteratorLinter.traverse (cognitive 43): OptimusIteratorLinter.traverse has cognitive complexity 43 (threshold 15). Drivers by points: if/else 11 (23 pts), match/switch 5 (14 pts), boolean chains 6 (nesting depth added 21). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/refchecks/IteratorUsage.scala"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bbc6e8c1893d69d02d9f8a3af0ca829a49bee531c613190f175d36a8291b7cd"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardsTraverser.checkDefDef (cognitive 43): StandardsTraverser.checkDefDef has cognitive complexity 43 (threshold 15). Drivers by points: if/else 14 (25 pts), boolean chains 11, match/switch 2 (4 pts), loops 1 (3 pts) (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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"a74b7b276d03f77a78f6426b8ff6efb1da4daf9e0a6c4322137bb6345edd79b3"}},{"ruleId":"D2","level":"warning","message":{"text":"QueueingConnection.writeAllPending_locked (cognitive 43): QueueingConnection.writeAllPending_locked has cognitive complexity 43 (threshold 15). Drivers by points: if/else 14 (34 pts), ternaries 1 (4 pts), error handling 1 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/QueueingConnection.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"91c4bc94da312d0f13354cf795f3c97ea9f67deea920c13e46024b7c9972570c"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraysSeq.map (cognitive 42): OptimusArraysSeq.map has cognitive complexity 42 (threshold 15). Drivers by points: if/else 12 (36 pts), loops 2 (5 pts), boolean chains 1 (nesting depth added 27). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"56f9041ff1483aeb9f323e6b6bde1a05c907a5bc5c61b9672e48f8bcf622d69d"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncGraph.transformSafe (cognitive 42): AsyncGraph.transformSafe has cognitive complexity 42 (threshold 15). Drivers by points: if/else 13 (19 pts), match/switch 5 (10 pts), boolean chains 7, loops 2 (6 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"d478562d1dc05becdee6b4c6d39710cebea67efb6e9570f793473bd62f99a7c4"}},{"ruleId":"D2","level":"warning","message":{"text":"LambdaEmitter.emitFuncCall (cognitive 42): LambdaEmitter.emitFuncCall has cognitive complexity 42 (threshold 15). Drivers by points: if/else 16 (38 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 23). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b57fda06f1d4d64b625afd3bbc17765d39d363db453d35fe3fc57c1aedf4f3"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassParser.valueForDef (cognitive 42): ClassParser.valueForDef has cognitive complexity 42 (threshold 15). Drivers by points: if/else 20 (27 pts), boolean chains 9, error handling 2 (6 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"61f1435bb3fd5b521f50436e79052551d9b75f96514b12ba77698339b09fc0a0"}},{"ruleId":"D2","level":"warning","message":{"text":"ExperimentalAsyncIterator2.buf (cognitive 41): ExperimentalAsyncIterator2.buf has cognitive complexity 41 (threshold 15). Drivers by points: if/else 27 (36 pts), boolean chains 2, match/switch 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"172b7a6f2fa34655925e8b3a7685adf8f06a8675f14bf63c939b2f02af847acf"}},{"ruleId":"D2","level":"warning","message":{"text":"AppStats.accumulateImpl (cognitive 41): AppStats.accumulateImpl has cognitive complexity 41 (threshold 15). Drivers by points: if/else 12 (32 pts), match/switch 2 (7 pts), boolean chains 2 (nesting depth added 25). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fae119de51681a3b386d04818691b9bb63b65011e41a83991f7f7a1467fdee7"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusDALRefChecks.checkAccelerated (cognitive 41): OptimusDALRefChecks.checkAccelerated has cognitive complexity 41 (threshold 15). Drivers by points: if/else 19 (25 pts), boolean chains 8, match/switch 5 (8 pts) (nesting depth added 9). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e8a1edd5c8269e6a0400be622c4da39db14b509bf6f7dbb818ad67a70b9962f"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultServerConnectionsManager.nodesRegistryChanged (cognitive 41): DefaultServerConnectionsManager.nodesRegistryChanged has cognitive complexity 41 (threshold 15). Drivers by points: if/else 12 (34 pts), loops 3 (5 pts), match/switch 1 (2 pts) (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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/DefaultServerConnectionsManager.java"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"d300b5806495a993723f43263a19560d01e05a21797bbeccdaf72e274c059203"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoPutMessageGroup.addValue (cognitive 41): ProtoPutMessageGroup.addValue has cognitive complexity 41 (threshold 15). Drivers by points: if/else 22 (36 pts), error handling 1 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"53aeee86bf576efd53f11ce3a289a451a1f29ea747855f8d7f2215ff8379b662"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupingNodeBatcherSchedulerPluginBase.adapt (cognitive 40): GroupingNodeBatcherSchedulerPluginBase.adapt has cognitive complexity 40 (threshold 15). Drivers by points: if/else 19 (33 pts), error handling 2 (4 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"0efb90d497c7cf0275d133ccf7aedf37964c971fe3a136b9957694c2367ffc38"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoPickleSerializer.protoToSlottedBuffer (cognitive 40): ProtoPickleSerializer.protoToSlottedBuffer has cognitive complexity 40 (threshold 15). Drivers by points: if/else 14 (26 pts), match/switch 2 (7 pts), loops 2 (5 pts), 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"402e60093ff154bda6473f8aeffea2a4b8fec09273f79e7517ae192dd707f8ed"}},{"ruleId":"D2","level":"warning","message":{"text":"LWTThread.activeMultiple (cognitive 40): LWTThread.activeMultiple has cognitive complexity 40 (threshold 15). Drivers by points: loops 5 (14 pts), if/else 7 (13 pts), error handling 4 (12 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/LWTThread.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eccb1e3e51a13868f5c8db41242bdab7d7123a658aa519e3f0dee000867ac8d"}},{"ruleId":"D2","level":"warning","message":{"text":"AppStatsPool.get (cognitive 39): AppStatsPool.get has cognitive complexity 39 (threshold 15). Drivers by points: if/else 12 (32 pts), match/switch 1 (5 pts), boolean chains 2 (nesting depth added 24). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsPool.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"144e29ec7038d760232891ab9bc0c8fb5f77aaba90be1e0692adbed10e2d3c61"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceReporter.traceEntity (cognitive 39): TraceReporter.traceEntity has cognitive complexity 39 (threshold 15). Drivers by points: match/switch 9 (24 pts), if/else 12 (15 pts) (nesting depth added 18). 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"29faca45f72993a94e14ae3ac8c4f3bdd8fd28889bd7a488b0fb4abf2dd2b434"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusExportInfo.buildMetadataMap (cognitive 39): OptimusExportInfo.buildMetadataMap has cognitive complexity 39 (threshold 15). Drivers by points: if/else 21 (22 pts), match/switch 8 (9 pts), boolean chains 8 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusExportInfoComponent.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e3432185783d9d6accd8544d93b340068ce62bbbcb2891c327e16b3d223a5d"}},{"ruleId":"D2","level":"warning","message":{"text":"CleanName.prettyFrameName (cognitive 39): CleanName.prettyFrameName has cognitive complexity 39 (threshold 15). Drivers by points: if/else 19 (24 pts), boolean chains 8, loops 3 (5 pts), error handling 1 (2 pts) (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, 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"000417e54f0a0bd325bf60a16eb9849670da524318ccddf286aba5c00fb70c91"}},{"ruleId":"D2","level":"warning","message":{"text":"RingTree.project (cognitive 39): RingTree.project has cognitive complexity 39 (threshold 15). Drivers by points: if/else 10 (25 pts), loops 4 (14 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd0a6574c4449fea8af57254f1c12f90d1d1590a789569f21fc87b8edc333fb5"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSourceDependenciesLoader.loadJvmDepsIvyConfigurations (cognitive 38): MultiSourceDependenciesLoader.loadJvmDepsIvyConfigurations has cognitive complexity 38 (threshold 15). Drivers by points: if/else 18 (21 pts), loops 4 (10 pts), match/switch 5 (7 pts) (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/MultiSourceDependenciesLoader.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a11ce0e843e6089680098c39386a21b4051d7ab1b12814e00406eed65c81d4"}},{"ruleId":"D2","level":"warning","message":{"text":"AdjustAST.addPropsToModuleDef (cognitive 38): AdjustAST.addPropsToModuleDef has cognitive complexity 38 (threshold 15). Drivers by points: if/else 20 (25 pts), match/switch 5 (8 pts), boolean chains 5 (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, 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a3c6b66c324faca96f0de80ce4755c8561e4bb6a076a0c8d9e872a3e518bbe0"}},{"ruleId":"D2","level":"warning","message":{"text":"TTTableCellRender.getTextOnSetValue (cognitive 38): TTTableCellRender.getTextOnSetValue has cognitive complexity 38 (threshold 15). Drivers by points: if/else 23 (36 pts), boolean chains 1, match/switch 1 (nesting depth added 13). 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NPTableRenderer.scala"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"60853a486c4dec05f0e16d551c2774daa523f80d4f1ad154fd05bbd1bb0375b0"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindAggregate2 (cognitive 38): DefaultBinder.bindAggregate2 has cognitive complexity 38 (threshold 15). Drivers by points: if/else 17 (37 pts), match/switch 1 (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":932}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c725674fe1824bcb5802fe794ae3bca1ef399ad12f6298fb75bd342f3385c3e"}},{"ruleId":"D2","level":"warning","message":{"text":"InstrumentationInjector.transform (cognitive 38): InstrumentationInjector.transform has cognitive complexity 38 (threshold 15). Drivers by points: if/else 20 (28 pts), boolean chains 9, 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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjector.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd3f5a9d97c7a96a36dc19cf125bf9f0add20f742c047068dbf32d3d9a97252b"}},{"ruleId":"D2","level":"warning","message":{"text":"RawRetrievalResult.setStoredValue (cognitive 38): RawRetrievalResult.setStoredValue has cognitive complexity 38 (threshold 15). Drivers by points: if/else 14 (33 pts), error handling 1 (4 pts), boolean chains 1 (nesting depth added 22). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RawRetrievalResult.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"889b9b77084001ada1ec12868d13dc0caddd46b9caef829b43d733dc1c866f58"}},{"ruleId":"D2","level":"warning","message":{"text":"RingTree.merge (cognitive 38): RingTree.merge has cognitive complexity 38 (threshold 15). Drivers by points: if/else 17 (31 pts), loops 2 (3 pts), match/switch 1 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"d903e566ccc39f659f1d6763c2439ae53b498ac554be946139f522e6f90965de"}},{"ruleId":"D2","level":"warning","message":{"text":"KDBSerializerImpl.deserializeObjectList (cognitive 37): KDBSerializerImpl.deserializeObjectList has cognitive complexity 37 (threshold 15). Drivers by points: if/else 10 (24 pts), loops 4 (10 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/KDBSerializer.scala"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"34eb99cbd8c770213b6943db12d5f2d2017279ff494f2d37ddc8f8e9dd0d91b6"}},{"ruleId":"D2","level":"warning","message":{"text":"NamespaceOptionsClientBase.getNamespacePropertiesWithTimeout (cognitive 37): NamespaceOptionsClientBase.getNamespacePropertiesWithTimeout has cognitive complexity 37 (threshold 15). Drivers by points: if/else 13 (33 pts), loops 1 (4 pts) (nesting depth added 23). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespaceOptionsClientBase.java"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"30fb676976bbeac9dda392b9efd9886966e5213b37274546523cfce270b64c2e"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.pathMatches (cognitive 36): Utils.pathMatches has cognitive complexity 36 (threshold 15). Drivers by points: if/else 11 (23 pts), loops 2 (7 pts), boolean chains 6 (nesting depth added 17). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b3b2900e52ad251fbdc124ec6cb4e5c23bfd8f652035f4b4a5c7a6302d43dc"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeLift.nodeLift (cognitive 36): NodeLift.nodeLift has cognitive complexity 36 (threshold 15). Drivers by points: if/else 15 (25 pts), match/switch 3 (7 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/NodeLiftComponent.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f9119c73443648b285bfe17e84b1a4afe630236ae2a880a39c95502f83a9dce"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyInfoTransformer.transform (cognitive 36): PropertyInfoTransformer.transform has cognitive complexity 36 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 3 (13 pts), loops 2 (9 pts) (nesting depth added 24). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/provider/PropertyInfoProvider.scala"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d6ff87902645bb6f0d7cc300803888912a79cf942687d6bee76b238fb822ef8"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassPathUtils.expandClasspath (cognitive 36): ClassPathUtils.expandClasspath has cognitive complexity 36 (threshold 15). Drivers by points: if/else 9 (25 pts), error handling 1 (5 pts), loops 1 (4 pts), boolean chains 2 (nesting depth added 23). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/platform/utils/ClassPathUtils.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64233ace0a5ed7bae04822044fef3a8e0dfa99c05586bba97eb431301201688"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSourceDependenciesLoader.load (cognitive 35): MultiSourceDependenciesLoader.load has cognitive complexity 35 (threshold 15). Drivers by points: loops 7 (23 pts), if/else 7 (8 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 19). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/MultiSourceDependenciesLoader.scala"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1b33a5f68dc2ccf1a30a91815554c2dda1f2c22316ec270bae7ac19261916bc"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.checkScopes (cognitive 35): ScopeDefinitionCompiler.checkScopes has cognitive complexity 35 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 12, match/switch 9 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1df1db9b712579e2d41ccc16355329875e0f848444302f84bd21c51eb7f56bc"}},{"ruleId":"D2","level":"warning","message":{"text":"SummonImpl.summon (cognitive 35): SummonImpl.summon has cognitive complexity 35 (threshold 15). Drivers by points: if/else 16 (22 pts), match/switch 4 (7 pts), boolean chains 4, loops 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"bce866c83aad89052ddfddc4e4bf62db145be782369911765b4d451b8c6382b4"}},{"ruleId":"D2","level":"warning","message":{"text":"AppStatsControl.controlFromParams (cognitive 35): AppStatsControl.controlFromParams has cognitive complexity 35 (threshold 15). Drivers by points: if/else 15 (29 pts), loops 2 (4 pts), error handling 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsControl.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff459392b4fc6dbd1a52cfe19d4dbe8567efb129d9925701d17064c8fbd6623c"}},{"ruleId":"D2","level":"warning","message":{"text":"DALFormatter.handleFuncCall (cognitive 35): DALFormatter.handleFuncCall has cognitive complexity 35 (threshold 15). Drivers by points: if/else 21 (24 pts), match/switch 3 (7 pts), boolean chains 4 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALFormatter.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"9050c0e9264be4fba18d0cb30046f09b660d3ab760d5e30704a8478e1403af1f"}},{"ruleId":"D2","level":"warning","message":{"text":"ActivePutListeners.receivedPutResponse (cognitive 35): ActivePutListeners.receivedPutResponse has cognitive complexity 35 (threshold 15). Drivers by points: if/else 12 (24 pts), loops 3 (11 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActivePutListeners.java"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01489dd6708edeb4fa0fb4b1aaacab340eba74204890e16504830a62cf4c074"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadScopeDeps (cognitive 34): ScopeDefinitionCompiler.loadScopeDeps has cognitive complexity 34 (threshold 15). Drivers by points: if/else 17 (27 pts), match/switch 2 (5 pts), 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8939290fc6478ae24b2a74141a60974ecd2bd61d1663a219494c4a36c57a055"}},{"ruleId":"D2","level":"warning","message":{"text":"TwkResolver.nextInCurrent (cognitive 34): TwkResolver.nextInCurrent has cognitive complexity 34 (threshold 15). Drivers by points: if/else 17 (30 pts), boolean chains 3, match/switch 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/TwkResolver.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f346633678e23a10c6d6ffabc6e34049e4f149a62064da570ddc15fb47bdda3"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyTrackerQueue.afterActionCompleted (cognitive 34): DependencyTrackerQueue.afterActionCompleted has cognitive complexity 34 (threshold 15). Drivers by points: if/else 18 (30 pts), loops 2 (3 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc807efe1500ca835eb4ad0a11321e6e75e739b98d37915dfd878ab633da57c6"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.strSplit (cognitive 34): Utils.strSplit has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12 (31 pts), loops 1 (3 pts) (nesting depth added 21). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f69ac1aa2b68b8b9dd6cf24722ad36c2b51717393f71d072a199e5473ab687"}},{"ruleId":"D2","level":"warning","message":{"text":"DALRegisteredIndexBinder.handleFuncCall (cognitive 34): DALRegisteredIndexBinder.handleFuncCall has cognitive complexity 34 (threshold 15). Drivers by points: match/switch 9 (19 pts), if/else 9, boolean chains 6 (nesting depth added 10). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cd2f1454635d67f24594b237b9633462f46c4fa643232bfb828de621cf2f7d4"}},{"ruleId":"D2","level":"warning","message":{"text":"HotCodeReplaceTransformer.scanForClassJarUpdates (cognitive 34): HotCodeReplaceTransformer.scanForClassJarUpdates has cognitive complexity 34 (threshold 15). Drivers by points: if/else 5 (21 pts), loops 3 (7 pts), ternaries 1 (6 pts) (nesting depth added 25). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/HotCodeReplaceTransformer.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"434d4bcad02c63c85b846479e6dccabb11ccf08f46190826ce5a0349deaaeeba"}},{"ruleId":"D2","level":"warning","message":{"text":"ActiveClientOperationTable.checkOpForTimeouts (cognitive 34): ActiveClientOperationTable.checkOpForTimeouts has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12 (32 pts), boolean chains 2 (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveClientOperationTable.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"daa2d4f4eb8874e3c115ccab00cbc2910f5e9accf192a18213e85953db027445"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleWriterConsistentWrite.update (cognitive 34): SingleWriterConsistentWrite.update has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12 (30 pts), match/switch 1 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/SingleWriterConsistentWrite.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"392ec4ea2ef338751af0ed0c2165943b690f8d3a15bea332c33cb2a1b083200f"}},{"ruleId":"D2","level":"warning","message":{"text":"RegexScanner.scanLines (cognitive 33): RegexScanner.scanLines has cognitive complexity 33 (threshold 15). Drivers by points: if/else 15 (32 pts), 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/RegexScanner.scala"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"011ebccaff12e86e73337acd452227ad4c80c3ce99fe69146f247ed68719e2db"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusSeq.zipAll (cognitive 33): OptimusSeq.zipAll has cognitive complexity 33 (threshold 15). Drivers by points: if/else 11 (23 pts), loops 2 (6 pts), boolean chains 2, match/switch 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"82694b0209f27d107b716a78ba974869ba8afcb800865f11ad7dbd273c1d188c"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusSeq.zipAll (cognitive 33): OptimusSeq.zipAll has cognitive complexity 33 (threshold 15). Drivers by points: if/else 11 (23 pts), loops 2 (6 pts), boolean chains 2, match/switch 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"5513c6ed8d60f695ae34036c6c8fd6baad10dc29df713b1607ff13edb991eb30"}},{"ruleId":"D2","level":"warning","message":{"text":"XSDiffer.tweaksEqual (cognitive 33): XSDiffer.tweaksEqual has cognitive complexity 33 (threshold 15). Drivers by points: if/else 17 (31 pts), loops 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/RecordingScenario.scala"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f93db6eb1d472dc8ec2739499173f3783b090b11ddfc97a742aadf7a77b1cb"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioStack.writeHtml (cognitive 33): ScenarioStack.writeHtml has cognitive complexity 33 (threshold 15). Drivers by points: if/else 16 (31 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"161a1c496e2c7ab4c4a4e6c3a16da50133fde13b34952ee2c399f75097ff62c8"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassifierTransformer.transformSafe (cognitive 33): ClassifierTransformer.transformSafe has cognitive complexity 33 (threshold 15). Drivers by points: if/else 14 (24 pts), boolean chains 5, match/switch 2 (4 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/ClassifierComponent.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cae9cf73946c14d8760ae9e33a39f807dc5740e33869f639afa87dd934e01c2"}},{"ruleId":"D2","level":"warning","message":{"text":"RedirectAccessors.valBackingFields (cognitive 33): RedirectAccessors.valBackingFields has cognitive complexity 33 (threshold 15). Drivers by points: if/else 21 (29 pts), boolean chains 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/RedirectAccessorsComponent.scala"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3c77c09cad24c8fa5a9c5035e5a64cfdb64dc8a53beb427a3d9868c1e43ee81"}},{"ruleId":"D2","level":"warning","message":{"text":"SubqueryMerger.canMergeWithFrom (cognitive 33): SubqueryMerger.canMergeWithFrom has cognitive complexity 33 (threshold 15). Drivers by points: boolean chains 18, if/else 14 (15 pts) (nesting depth added 1). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/RedundantSubqueryRemover.scala"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b5351c9d0e9d86d2851e9bf1e7fd842ea9893930a6724daff0f4c8d3690b22"}},{"ruleId":"D2","level":"warning","message":{"text":"SyncController.checkUpstreamDependencies (cognitive 33): SyncController.checkUpstreamDependencies has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (31 pts), loops 1 (2 pts) (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/SyncController.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"86dfe85a5b7a6d8f5b2cb1159c8f248d3981daaf35cdd056d91a9e769298235c"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectoryInMemory.largeUpdate (cognitive 33): DirectoryInMemory.largeUpdate has cognitive complexity 33 (threshold 15). Drivers by points: if/else 14 (22 pts), ternaries 3 (7 pts), loops 2 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/dir/DirectoryInMemory.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"e40ee2f6d4066cb65f4f9306df973fbe34648a5e174e02545bc9e8b244935d97"}},{"ruleId":"D2","level":"warning","message":{"text":"PythonDependenciesLoader.loadAllDependencies (cognitive 32): PythonDependenciesLoader.loadAllDependencies has cognitive complexity 32 (threshold 15). Drivers by points: loops 11 (22 pts), if/else 7 (10 pts) (nesting depth added 14). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/PythonDependenciesLoader.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d08c0e4e6d25bffec75fce140a656078919404d9959e8307f81233d7825806"}},{"ruleId":"D2","level":"warning","message":{"text":"InfoDumper.dump (cognitive 32): InfoDumper.dump has cognitive complexity 32 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 2 (5 pts), error handling 1 (3 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 17). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function. This shape REPEATS in the file: one other method here (InfoDumper.dump) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/InfoDumper.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccef069b31b9e6232e84ecbe125908e86e0bbd3bbf24ec59b89989a9ac24706d"}},{"ruleId":"D2","level":"warning","message":{"text":"InfoDumper.dump (cognitive 32): InfoDumper.dump has cognitive complexity 32 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 2 (5 pts), error handling 1 (3 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 17). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function. This shape REPEATS in the file: one other method here (InfoDumper.dump) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/InfoDumper.scala"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bab8a056d7dc35122101a893e5758d11da861222d716cca6b5440bfa4debd52"}},{"ruleId":"D2","level":"warning","message":{"text":"RequestSender.sendBatch (cognitive 32): RequestSender.sendBatch has cognitive complexity 32 (threshold 15). Drivers by points: if/else 18 (21 pts), error handling 4, match/switch 3 (4 pts), boolean chains 2, 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/RequestSender.scala"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbd2d0c6b776ed55248f84bb6fb634c15d7a3950fbd2daef2b812343c96448c1"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryTemporalityResolver.resolveQueryTemporality (cognitive 32): QueryTemporalityResolver.resolveQueryTemporality has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (24 pts), match/switch 3 (8 pts) (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/QueryTemporalityResolver.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"33b01d6322a52fc1cf75d5e8732a4720eea6e71fd28d2f07fbb9c0148b30e42b"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeSynthesis.transformRawNodeDef (cognitive 32): NodeSynthesis.transformRawNodeDef has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (19 pts), boolean chains 7, match/switch 4 (6 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/NodeSynthesis.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"498c02e4cef415b3a9c384cce66d76e07f69ea17c6475454163900e314bb8f55"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusRefchecks.checkValidParent (cognitive 32): OptimusRefchecks.checkValidParent has cognitive complexity 32 (threshold 15). Drivers by points: if/else 9 (24 pts), boolean chains 7, loops 1 (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfda295b3f8412957b1f5e8676468aea6bd85fdd844db3baca4c4e251c5a509e"}},{"ruleId":"D2","level":"warning","message":{"text":"RedirectAccessors.rewriteWithValBackingFields (cognitive 32): RedirectAccessors.rewriteWithValBackingFields has cognitive complexity 32 (threshold 15). Drivers by points: if/else 14 (26 pts), boolean chains 5, 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/RedirectAccessorsComponent.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"004c7d9f3d69933dbdb5707cc8d1aa9126ce48790a2abc4bc877b5cd59ce126e"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityAgentTransformer.transform (cognitive 32): EntityAgentTransformer.transform has cognitive complexity 32 (threshold 15). Drivers by points: if/else 19 (23 pts), boolean chains 3, error handling 1 (3 pts), ternaries 1 (3 pts) (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, 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":"optimus/platform/projects/entityagent/src/main/java/optimus/EntityAgent.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fb1011c1c719efbbc7544e198d92faab3859f5615c3ca3bb060819ef65ef8a0"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadInheritableCppBuild (cognitive 31): ScopeDefinitionCompiler.loadInheritableCppBuild has cognitive complexity 31 (threshold 15). Drivers by points: if/else 11 (18 pts), match/switch 3 (7 pts), loops 2 (5 pts), 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":1170}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b245883691108d8fb713f22d85b3768cf92d936a7cd6a536277568c0684ac27"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraysSeq.map (cognitive 31): OptimusArraysSeq.map has cognitive complexity 31 (threshold 15). Drivers by points: if/else 10 (27 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 18). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f9c71d54d99df2cf56809ddbbb8d85f5fc9e94cb861dc8d02e79c7881923d8"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceExplorer.writeCsvDot (cognitive 31): TraceExplorer.writeCsvDot has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17 (29 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/TraceExplorer.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"67b8239c84da16599c54974936a9a6fcc0a9b8c7606af918f6fb241c36c69cbf"}},{"ruleId":"D2","level":"warning","message":{"text":"AnyFormatted.transform (cognitive 31): AnyFormatted.transform has cognitive complexity 31 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 5 (10 pts) (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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":1051}}}],"partialFingerprints":{"codehealthFindingId/v1":"42d4fc7d528fa62bed4c4ac9b169cbf7070ff37848a07474e2c456caa81036b8"}},{"ruleId":"D2","level":"warning","message":{"text":"NettyEstablishedChannelHandler.channelRead (cognitive 31): NettyEstablishedChannelHandler.channelRead has cognitive complexity 31 (threshold 15). Drivers by points: if/else 12 (28 pts), match/switch 1 (2 pts), 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":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/internal/transport/NettyEstablishedChannelHandler.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"47a38dc27104a64c79c2472af844f9c45e11a2dd1905b53cdcbb43c714798bdb"}},{"ruleId":"D2","level":"warning","message":{"text":"BlockFolding.reduce (cognitive 31): BlockFolding.reduce has cognitive complexity 31 (threshold 15). Drivers by points: if/else 7 (18 pts), loops 3 (12 pts), boolean chains 1 (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/BlockFolding.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b0629de13c3b034b8557a40b03ae23d24dbb82bb656694afe0f29ce0b8642a8"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPutOperationImpl.createMessagesForIncomplete (cognitive 31): AsyncPutOperationImpl.createMessagesForIncomplete has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (29 pts), boolean chains 1, loops 1 (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncPutOperationImpl.java"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"33d7bea281bf36e732e0a650ae2a7f73fc9d58997060b7cf9c4db30ba39b324c"}},{"ruleId":"D2","level":"warning","message":{"text":"CentralConvergenceController.syncRegion (cognitive 31): CentralConvergenceController.syncRegion has cognitive complexity 31 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 4 (15 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/CentralConvergenceController.java"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"5153f5ef944fc0774038b9832b59be56def9c182187bfd7f914d36edf93d20a8"}},{"ruleId":"D2","level":"warning","message":{"text":"DHTRingManager.setTarget (cognitive 31): DHTRingManager.setTarget has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13 (23 pts), error handling 4 (8 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"f70ceedd03524424aecc66e03435879874a73b2a68b59c2d268b7764c2fa37d8"}},{"ruleId":"D2","level":"warning","message":{"text":"IORelay.run (cognitive 31): IORelay.run has cognitive complexity 31 (threshold 15). Drivers by points: if/else 8 (21 pts), error handling 3 (5 pts), loops 2 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/io/IORelay.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c4f4443a906a9ef662f6d8593d21a670ffb9b61cf034a7f326321db5df67de"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassParser.createConstructorArgs (cognitive 31): ClassParser.createConstructorArgs has cognitive complexity 31 (threshold 15). Drivers by points: if/else 8 (17 pts), error handling 3 (12 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb2564f43eb50924d766b9b0b929e5d40e13e7f73c861aa50360efc1d1af6709"}},{"ruleId":"D2","level":"warning","message":{"text":"ZincProfiler.logAndTraceProfileStats (cognitive 30): ZincProfiler.logAndTraceProfileStats has cognitive complexity 30 (threshold 15). Drivers by points: if/else 18 (22 pts), loops 3 (6 pts), match/switch 1 (2 pts) (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, 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincProfiler.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec3ee67313d5162a9c160ff41dfb7569cda2fded9dd4cc5651ec3082af25278"}},{"ruleId":"D2","level":"warning","message":{"text":"DeploymentScriptProcessor.generateContent (cognitive 30): DeploymentScriptProcessor.generateContent has cognitive complexity 30 (threshold 15). Drivers by points: loops 6 (21 pts), match/switch 2 (7 pts), if/else 2 (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/processors/DeploymentScriptProcessor.scala"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aaec252cd55f0d4f2c29d982dd0d5d86547921fcc923a433679fa3301c0230c"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkspaceStructure.loadModuleStructure (cognitive 30): WorkspaceStructure.loadModuleStructure has cognitive complexity 30 (threshold 15). Drivers by points: loops 8 (20 pts), if/else 9, boolean chains 1 (nesting depth added 12). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/WorkspaceStructure.scala"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"9408666fd5755498e3ffa18df7f864b30f58f423156c9858290a06675f5c530e"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.strNextInteger (cognitive 30): Utils.strNextInteger has cognitive complexity 30 (threshold 15). Drivers by points: if/else 15 (23 pts), error handling 2 (4 pts), loops 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"270f61a59799c13ba5eb47273c384b24ecde55868539f4167d8d1a5866d13538"}},{"ruleId":"D2","level":"warning","message":{"text":"EstablishSessionResultSerializer.deserialize (cognitive 30): EstablishSessionResultSerializer.deserialize has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16 (24 pts), match/switch 2 (6 pts) (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"a10b436890088b5f717af98d978c6379863c602e2bebf24ddc17aff2b39238ea"}},{"ruleId":"D2","level":"warning","message":{"text":"Visitor.findFirstDifference (cognitive 30): Visitor.findFirstDifference has cognitive complexity 30 (threshold 15). Drivers by points: if/else 13 (25 pts), boolean chains 3, loops 1 (2 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/recipes/CompareNodeDiffs.scala"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"41cb199a6f6fad811cb5575f5f09f8a6f56a37c2f567c8ff99ea6848ca6ec1c3"}},{"ruleId":"D2","level":"warning","message":{"text":"SubqueryMerger.handleSelect (cognitive 30): SubqueryMerger.handleSelect has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (21 pts), match/switch 2 (4 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 13). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/RedundantSubqueryRemover.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"52eaacfedc44be06b7ae6c568d614b65f639036ec69dc71b7ef5567907f0c442"}},{"ruleId":"D2","level":"warning","message":{"text":"BreakoutToIteratorOp.transform (cognitive 30): BreakoutToIteratorOp.transform has cognitive complexity 30 (threshold 15). Drivers by points: if/else 8 (19 pts), match/switch 3 (9 pts), boolean chains 2 (nesting depth added 17). 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"d77e0c03ceef3467dd523bc4950adc40ec5731542f35eadd561e336703f04b32"}},{"ruleId":"D2","level":"warning","message":{"text":"Dynamic.getType (cognitive 30): Dynamic.getType has cognitive complexity 30 (threshold 15). Drivers by points: if/else 17 (30 pts) (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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/OpcodeHandlers.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f86d2579859fb2895a2c374395c421bf31a0a4575a83c93c896e5fd4991b475"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorController.processKeyChangeRequest (cognitive 30): SelectorController.processKeyChangeRequest has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (20 pts), boolean chains 5, error handling 2 (4 pts), match/switch 1 (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SelectorController.java"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4bc2fb6e9e2317f6e2079f88bd8f7423b5643e95fde7361e1295d69218d92ab"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyTrackerQueue.registerOrEnqueueAction (cognitive 29): DependencyTrackerQueue.registerOrEnqueueAction has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17 (24 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e4aebca261c9045d816377beb235bff739ccc5616919033f755f8150feba3ba"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncGraph.transformFuncArgumentToNodeByName (cognitive 29): AsyncGraph.transformFuncArgumentToNodeByName has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16 (18 pts), match/switch 4 (7 pts), boolean chains 3, error handling 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc63e33fcc93e7c84f6413c5a8c3f24b794749f85588360c82c23ddd86e24a4"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeClassBuilder.addPropertyNodeMethods (cognitive 29): NodeClassBuilder.addPropertyNodeMethods has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16 (25 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bd74c765733a2a0fe26380462aad5098a2b4c9d5c0ee8060bbbd3813cbdb758"}},{"ruleId":"D2","level":"warning","message":{"text":"RelationalUtils.convertItemValue (cognitive 29): RelationalUtils.convertItemValue has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 3 (5 pts), error handling 2 (4 pts), loops 1 (3 pts), boolean chains 2 (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/RelationalUtils.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"042005cb676d4b6b67ea1b6be6fd63e14522ffc385cbd8a3dcf75ad8d9ca3456"}},{"ruleId":"D2","level":"warning","message":{"text":"Graph.dijkstra (cognitive 29): Graph.dijkstra has cognitive complexity 29 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 3 (9 pts), 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":"optimus/platform/projects/versioning_runtime/src/main/scala/optimus/platform/versioning/Graph.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3a4a74963dd960f9e30406a39e142424ab40989c7e84e296174f30bda394f8"}},{"ruleId":"D2","level":"warning","message":{"text":"LoomAdapter.forwardQueuedMethods (cognitive 29): LoomAdapter.forwardQueuedMethods has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 6, ternaries 2 (3 pts), loops 2 (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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd9bcaaf3015d834addfbcdbbd3a5bb9fe3dca212fc583d4d21ac947591d288"}},{"ruleId":"D2","level":"warning","message":{"text":"OffsetListBase.getOffset_linear (cognitive 29): OffsetListBase.getOffset_linear has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (25 pts), boolean chains 3, loops 1 (nesting depth added 14). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/OffsetListBase.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"482bea76d84f6da0af4718c76d717dc8f511d39ac04e1be4d6102bd7f74a5147"}},{"ruleId":"D2","level":"warning","message":{"text":"RingConfigWatcher.newVersion (cognitive 29): RingConfigWatcher.newVersion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (17 pts), error handling 2 (6 pts), loops 2 (4 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/RingConfigWatcher.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ca108f5a5b1eb83bea1a7249974b3ef955ea76bcf0a3a4eeddd54f5824cc4aa"}},{"ruleId":"D2","level":"warning","message":{"text":"MsIvyRepository.findNoInverval (cognitive 28): MsIvyRepository.findNoInverval has cognitive complexity 28 (threshold 15). Drivers by points: loops 6 (18 pts), if/else 4 (10 pts) (nesting depth added 18). 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/MsIvyRepository.scala"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56c5798666c60808126519ffaa91b4b78665ec0b1659958f18df50d1922bc31"}},{"ruleId":"D2","level":"warning","message":{"text":"BuildSummaryRecorder.logStats (cognitive 28): BuildSummaryRecorder.logStats has cognitive complexity 28 (threshold 15). Drivers by points: if/else 24, boolean chains 2, match/switch 1 (2 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/trace/BuildSummaryRecorder.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c633e04767a9bf9f9ec5903761ac428529fe8ffb693a3a7445d01cc6a34d6bc3"}},{"ruleId":"D2","level":"warning","message":{"text":"ForbiddenDependencyConfigurationCompiler.loadForbiddenDependency (cognitive 28): ForbiddenDependencyConfigurationCompiler.loadForbiddenDependency has cognitive complexity 28 (threshold 15). Drivers by points: loops 7 (28 pts) (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ForbiddenDependencyConfigurationCompiler.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"66158d52139953a49fbd5be52645891401275e485fdaff2528e2b824f07f0e30"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityInfoComponent.transformInfo (cognitive 28): EntityInfoComponent.transformInfo has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (22 pts), boolean chains 4, match/switch 1 (2 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d30f59cdd0b8b00f60587f20b14f4fa8fb07928bd51f50b8f6a9d87dd652df2"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionHelper.typeString (cognitive 28): ReflectionHelper.typeString has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13 (23 pts), match/switch 2 (5 pts) (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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/util/dalschema/ReflectionHelper.scala"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"091638fec10dad346e378067fa8f56b256244a2cdbc21c3144e10c67d9e79f24"}},{"ruleId":"D2","level":"warning","message":{"text":"AwaitStackManagement.maybeSaveAwaitStack (cognitive 28): AwaitStackManagement.maybeSaveAwaitStack has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 6, loops 3 (5 pts) (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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"7320c2a3a651c61b644d714d1f55e320e0c60de229d1b645a730e1b04401aa37"}},{"ruleId":"D2","level":"warning","message":{"text":"ActiveRetrievalListeners.currentRetrievalSet (cognitive 28): ActiveRetrievalListeners.currentRetrievalSet has cognitive complexity 28 (threshold 15). Drivers by points: if/else 5 (14 pts), loops 4 (11 pts), error handling 1 (3 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveRetrievalListeners.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fa0d86a1dfae71f859a4310a280d5e5897bd3a82c056dc69544e95bac10d2a"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSegment.getResolvedOffset (cognitive 28): AbstractSegment.getResolvedOffset has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (26 pts), boolean chains 2 (nesting depth added 14). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/AbstractSegment.java"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e4786e4d84c0699f898f93ae86f5d3478ce9832781ae58bd7a107bc5e513805"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyWatcher.build (cognitive 28): DependencyWatcher.build has cognitive complexity 28 (threshold 15). Drivers by points: if/else 11 (15 pts), error handling 6 (9 pts), boolean chains 2, ternaries 1 (2 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"625a676d3a6f7443d9157ecef4d8b4435a61d608e9ccca9cd892a765714f486b"}},{"ruleId":"D2","level":"warning","message":{"text":"SpinningTransferQueue.tryAppend (cognitive 28): SpinningTransferQueue.tryAppend has cognitive complexity 28 (threshold 15). Drivers by points: if/else 7 (12 pts), ternaries 2 (7 pts), loops 2 (5 pts), boolean chains 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"040c1895b36d5cd8b6804b74ad6d114ae061325f8b8242edbf50da3d561c636c"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusBuildToolImpl.standardBuilder (cognitive 27): OptimusBuildToolImpl.standardBuilder has cognitive complexity 27 (threshold 15). Drivers by points: if/else 24 (26 pts), 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, 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolImpl.scala"},"region":{"startLine":1013}}}],"partialFingerprints":{"codehealthFindingId/v1":"d40ad7f582e30991f39e9a266ac54b9fc9a2ee6c8ea0c48a78c87da559785dfb"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyNode.writePrettyString (cognitive 27): PropertyNode.writePrettyString has cognitive complexity 27 (threshold 15). Drivers by points: if/else 10 (15 pts), error handling 2 (7 pts), loops 1 (3 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/PropertyNode.scala"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b316e76e41b0932d9d957de3c6fd2e5d2e98e0055f445d9c09579b74edef3e2"}},{"ruleId":"D2","level":"warning","message":{"text":"ShapeKey.equals (cognitive 27): ShapeKey.equals has cognitive complexity 27 (threshold 15). Drivers by points: if/else 10 (21 pts), loops 1 (4 pts), boolean chains 1, 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/Shape.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"286a3fd73b79ce5830ce1490663657be79a1ded7cb5faa5bc763b9c28382fc32"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusDALRefChecks.checkParamAccessors (cognitive 27): OptimusDALRefChecks.checkParamAccessors has cognitive complexity 27 (threshold 15). Drivers by points: if/else 7 (15 pts), boolean chains 7, match/switch 2 (5 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5432c97ab1c4166b4af9d4b8b3d0bfa9c0516660545f8d94350262efeea1fbb"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusRefchecks.checkParamAccessors (cognitive 27): OptimusRefchecks.checkParamAccessors has cognitive complexity 27 (threshold 15). Drivers by points: if/else 7 (15 pts), boolean chains 7, match/switch 2 (5 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d2258f8ee259b60d3f6506bcaad542fa70fa4e9746f3b9c7538e9096338e2a8"}},{"ruleId":"D2","level":"warning","message":{"text":"CrumbParser.flatten (cognitive 27): CrumbParser.flatten has cognitive complexity 27 (threshold 15). Drivers by points: if/else 10 (21 pts), error handling 1 (3 pts), boolean chains 1, loops 1, match/switch 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/FastCrumbParser.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"45d7f639a64359a427775cc3d8edad591de778679a28464df85edc2eafe8af28"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeTimeLine.wallTimeRange (cognitive 27): NodeTimeLine.wallTimeRange has cognitive complexity 27 (threshold 15). Drivers by points: if/else 6 (18 pts), loops 4 (6 pts), match/switch 1 (3 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"d19ec39600e91f80fa9dfddc200f2a7284ab490c52a7b09a09aa41b198af19c5"}},{"ruleId":"D2","level":"warning","message":{"text":"GeneralAPICheck.checkAnnotationProperties (cognitive 27): GeneralAPICheck.checkAnnotationProperties has cognitive complexity 27 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 6, match/switch 4 (5 pts) (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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/GeneralAPICheckComponent.scala"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"629a5da01fee1e4f19e5664aa8743ced8b2daa0d3d23688ca1c330b1685483ba"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardsTraverser.checkSelection (cognitive 27): StandardsTraverser.checkSelection has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8 (20 pts), boolean chains 7 (nesting depth added 12). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"84c1fae9e7fc014ba482035d6e723fb113a5c1ac753c999230406a0ba1236c79"}},{"ruleId":"D2","level":"warning","message":{"text":"Block.updatePhiTypes (cognitive 27): Block.updatePhiTypes has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (19 pts), loops 4 (6 pts), 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Block.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"b668c9b6f6274a0832770a8f2e8ceb1256ef6bf63aa0f4db5339e5d60c9c92eb"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.tokens (cognitive 26): Parser.tokens has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15 (18 pts), boolean chains 3, loops 3, match/switch 2 (nesting depth added 3). 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":"optimus/buildtool/projects/core/src/main/scala/optimus/buildtool/utils/parser/Parser.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1bd1ee2eccd7caf3aac2bd20cc1d9fd543ed5fbbdbab58f94ea03fba33bd3c2"}},{"ruleId":"D2","level":"warning","message":{"text":"EmbeddableUnpickler.unpickle$queued (cognitive 26): EmbeddableUnpickler.unpickle$queued has cognitive complexity 26 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 3 (6 pts), loops 2 (5 pts), error handling 2 (4 pts) (nesting depth added 13). 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/EmbeddablePicklers.scala"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"f032ffe6b099206c8ed99279ee5f4fb82a3d4e79b68d15a1df0aa3a6c88c8400"}},{"ruleId":"D2","level":"warning","message":{"text":"DALCacheImpl.load (cognitive 26): DALCacheImpl.load has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (18 pts), error handling 1 (5 pts), 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dal/DALCache.scala"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff02355c1e3ead055cafbd13e8e484da85416987156731aea50de6638df452c9"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoAsync.checkAndRewriteCombinator (cognitive 26): AutoAsync.checkAndRewriteCombinator has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 4 (7 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"42283ea7782adf64d56005212047f959831781493691abea2143fb96d3c22ba8"}},{"ruleId":"D2","level":"warning","message":{"text":"InfoDumpUtils.drain (cognitive 26): InfoDumpUtils.drain has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12 (24 pts), error handling 1 (2 pts) (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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/platform/util/InfoDump.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4547cc2518f232ccc2c47250673dad9ba80b11dba2487ea1f3dfaa6f184fe70"}},{"ruleId":"D2","level":"warning","message":{"text":"SamplingProfilerSwitch.configure (cognitive 26): SamplingProfilerSwitch.configure has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (18 pts), error handling 2 (4 pts), match/switch 1 (3 pts), 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":"optimus/platform/projects/platform/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfilerSwitch.scala"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee5300ab77cb443d644fc3de072713752e319b5fa1aa5b6d8bbfc108fcce76b"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicObjSortRule.compareLeftRight (cognitive 26): DynamicObjSortRule.compareLeftRight has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19 (25 pts), match/switch 1 (nesting depth added 6). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/dynamic/DynamicObjectRelationUtils.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f75034594aa0c496d1d7a981e33778509f530345ca611b28a0688e33bc587e5"}},{"ruleId":"D2","level":"warning","message":{"text":"CompareNodeDiffs.compareArgs (cognitive 26): CompareNodeDiffs.compareArgs has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12 (23 pts), loops 1 (2 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/recipes/CompareNodeDiffs.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"d82166dfa6bead082dd3a908469721b5766c9466420bb66041b76182cf654be9"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeTableCellRenderer.getTableCellRendererComponent (cognitive 26): TreeTableCellRenderer.getTableCellRendererComponent has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15 (25 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NPTableRenderer.scala"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"12778605742fb737e99d461bfa542953852809153841e19f6efb734d9e8319df"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeTimeLine.drawCounters (cognitive 26): NodeTimeLine.drawCounters has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (22 pts), loops 2 (3 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"786a8a828b15cd0f179de3a9f40eeb0045a22c9f5c71c31add0cf921edf47e12"}},{"ruleId":"D2","level":"warning","message":{"text":"KDBSerializerImpl.serializeList (cognitive 26): KDBSerializerImpl.serializeList has cognitive complexity 26 (threshold 15). Drivers by points: loops 12 (24 pts), if/else 1, 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/KDBSerializer.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"108827bd30b43de25613a1973461a7d16d8c70a4613f94c278745c8f8f9a8b3c"}},{"ruleId":"D2","level":"warning","message":{"text":"DALBinder.handleFuncCall (cognitive 26): DALBinder.handleFuncCall has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 7 (19 pts), if/else 7 (nesting depth added 12). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"5169d6f41ebb45a34d950b71564ce349e7f752240efab24f712b8ea70f2646a9"}},{"ruleId":"D2","level":"warning","message":{"text":"GeneralAPICheck.checkUndesiredProperties (cognitive 26): GeneralAPICheck.checkUndesiredProperties has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 2 (6 pts), 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/GeneralAPICheckComponent.scala"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"d863e982fd78e9e9910b4601c6367e128a7d15da7964f7c56f10383a31168995"}},{"ruleId":"D2","level":"warning","message":{"text":"RewriteTypingTransformer.skipWhitespaceAndComments (cognitive 26): RewriteTypingTransformer.skipWhitespaceAndComments has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12 (20 pts), boolean chains 3, loops 1 (3 pts) (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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7c7598bb8a9e87b818571f86639ddad371453bab96af1fe570eee6cbb8c535"}},{"ruleId":"D2","level":"warning","message":{"text":"KVClientEstablishedStreamHandlerV1.processNonStreamGet (cognitive 26): KVClientEstablishedStreamHandlerV1.processNonStreamGet has cognitive complexity 26 (threshold 15). Drivers by points: if/else 5 (11 pts), ternaries 3 (10 pts), loops 2 (5 pts) (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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/stream/KVClientEstablishedStreamHandlerV1.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8ea126d38dc5506627f7fd890c03f980493ed7c246a08a40756a79fb7430b4a"}},{"ruleId":"D2","level":"warning","message":{"text":"Itr.advance (cognitive 26): Itr.advance has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 4, loops 2 (3 pts), ternaries 1 (2 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"30919beb54e135e34cc4ba033a305b3f14bbb3198758846aadf16fc471c36af4"}},{"ruleId":"D2","level":"warning","message":{"text":"PythonDependenciesLoader.fromConfig (cognitive 25): PythonDependenciesLoader.fromConfig has cognitive complexity 25 (threshold 15). Drivers by points: loops 8 (16 pts), if/else 6 (8 pts), match/switch 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/PythonDependenciesLoader.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"28cbe642e640df4f50171827a0f579a11af96e404c3270e189f48c15e5c3a130"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcurrentAggregatorNode.getAndRunNextIteration (cognitive 25): ConcurrentAggregatorNode.getAndRunNextIteration has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11 (20 pts), error handling 1 (4 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/SequenceNode.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"c860dd77985a23f723187ad58b74b36691ee19e6b4e2efcd546a00ef0d62ff48"}},{"ruleId":"D2","level":"warning","message":{"text":"stateManager.checkInvariants (cognitive 25): stateManager.checkInvariants has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 7 (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"bad38ee0e255d5df73b5b62be53eafe2d35b03d5534d81c85697a1f8438f4556"}},{"ruleId":"D2","level":"warning","message":{"text":"Scenario.nestWithFlatten (cognitive 25): Scenario.nestWithFlatten has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 3 (8 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cc5e6e65cdc6c326b2dc84e306716100e6fdcbf04c82445fc0b83dd920e9662"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusDALRefChecks.traverse (cognitive 25): OptimusDALRefChecks.traverse has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (16 pts), boolean chains 8, 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa27769c5c25b6e8e38b387506089b11ce733ea6262c231fc16490236b6de30f"}},{"ruleId":"D2","level":"warning","message":{"text":"PersistentEntityCondition.parseCondition (cognitive 25): PersistentEntityCondition.parseCondition has cognitive complexity 25 (threshold 15). Drivers by points: match/switch 7 (18 pts), if/else 7 (nesting depth added 11). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/PersistentEntityCondition.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"9baa0f20c5934a781c72922fbc3d27b12764141645a5a0b38258347d6772215f"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeTreeTable.getTreeSelector (cognitive 25): NodeTreeTable.getTreeSelector has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 6, 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTreeTable.scala"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"079127d83226c6dc4a4eac5294ed299d5fc228b95e052ea5ceaba21ddec380cb"}},{"ruleId":"D2","level":"warning","message":{"text":"IterableProvider.removeDuplicatedRowsBasedOnKey (cognitive 25): IterableProvider.removeDuplicatedRowsBasedOnKey has cognitive complexity 25 (threshold 15). Drivers by points: loops 6 (10 pts), if/else 7 (9 pts), boolean chains 5, match/switch 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"76095294e51fdff71e47275e436fd11fd523d472abac3de3c6f3a83571108305"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityTreeReducer.bindWhere (cognitive 25): EntityTreeReducer.bindWhere has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 4 (9 pts), error handling 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e65f04c6c10f164e5d30b1b60dc19dcfaa3fa3d1149fffe8bf73ee9b4eb93ba"}},{"ruleId":"D2","level":"warning","message":{"text":"PubSubReducer.handleProjection (cognitive 25): PubSubReducer.handleProjection has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 4 (7 pts), loops 1 (2 pts) (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/pubsub/PubSubReducer.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"8167dc606a319daebf89b6b95af749b55cb24cc6e80f530592ef0d1c24303622"}},{"ruleId":"D2","level":"warning","message":{"text":"NamespaceOptionsClientBase.storeNamespaceProperties (cognitive 25): NamespaceOptionsClientBase.storeNamespaceProperties has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (19 pts), error handling 2 (4 pts), boolean chains 1, loops 1 (nesting depth added 12). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespaceOptionsClientBase.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"68eb678ff7c4d3023639a3da479cbbe96ad176a62b76c62449f9a5ac830a92f7"}},{"ruleId":"D2","level":"warning","message":{"text":"QueueingConnection.sendAsynchronous (cognitive 25): QueueingConnection.sendAsynchronous has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14 (21 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/QueueingConnection.java"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"be49abef66bc5f83094270035e9971744208626f2cf8f527443849734bbb6a28"}},{"ruleId":"D2","level":"warning","message":{"text":"BspSyncer.sources (cognitive 24): BspSyncer.sources has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (20 pts), loops 2 (3 pts), 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspSyncer.scala"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"668af99a59fb6f6e34763c2461d77e852dc18c8aa70ad018603c54762332e7fc"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.expandAllCustomScopes (cognitive 24): ScopeDefinitionCompiler.expandAllCustomScopes has cognitive complexity 24 (threshold 15). Drivers by points: loops 5 (15 pts), if/else 7 (8 pts), boolean chains 1 (nesting depth added 11). 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"17dbc65b1fa94b6600ba75072ef37528d7b13d40f3aa07616b15681448375afb"}},{"ruleId":"D2","level":"warning","message":{"text":"AdvancedUtils.ensureHeapAvailable (cognitive 24): AdvancedUtils.ensureHeapAvailable has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13 (20 pts), boolean chains 2, error handling 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d070d588cf5863cf648bef430bacbe7fa04e110291da061be8fae576be12ea0"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.tblWidths (cognitive 24): Utils.tblWidths has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 4, loops 1 (3 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc53eff37318041e7a414856f1f4e3136a129f1123db90bf0055d8f0dc2c59b7"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeLift.transformSafe (cognitive 24): NodeLift.transformSafe has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (19 pts), boolean chains 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/NodeLiftComponent.scala"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"a123edba9fa0440f7606e2198dae15be59704c54e1a13d60a047e3470444eb99"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeClassBuilder.mkNodeClass (cognitive 24): NodeClassBuilder.mkNodeClass has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15 (19 pts), boolean chains 5 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3e87732f76d6bc215ae6b0f3363f989dcc24e3b8244eb2a8337527cf31c027"}},{"ruleId":"D2","level":"warning","message":{"text":"StackAnalysis.extractInterestingStacks (cognitive 24): StackAnalysis.extractInterestingStacks has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 2 (5 pts), match/switch 1 (2 pts), boolean chains 1, error handling 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1589}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfed2fcba0d08e53dce23d793b4a6b164e2e0474573c96e3337685c9bf90b3be"}},{"ruleId":"D2","level":"warning","message":{"text":"SamplingProfiler.publish (cognitive 24): SamplingProfiler.publish has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 2 (5 pts), loops 3 (4 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"81e37e022321526389d53ccdec615f04de5632083358d8969ea717e716afd138"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderByRewriter.rebindOrderings (cognitive 24): OrderByRewriter.rebindOrderings has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 5 (9 pts), boolean chains 2, loops 1 (nesting depth added 12). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/OrderByRewriter.scala"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"4698c1501738a28d1699ed10984eee475f672e690128ee82a7e43f761d1e9953"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionChecker.handleFuncCall (cognitive 24): ExpressionChecker.handleFuncCall has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (11 pts), match/switch 4 (10 pts), boolean chains 3 (nesting depth added 7). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3bc44fffba5f709aed1fde4da744545fdeb67ec3a749336892c132c63d51827"}},{"ruleId":"D2","level":"warning","message":{"text":"Util.findInstancesStateWithKeyPair (cognitive 24): Util.findInstancesStateWithKeyPair has cognitive complexity 24 (threshold 15). Drivers by points: if/else 3 (12 pts), loops 3 (6 pts), match/switch 1 (4 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/aws/Util.java"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"764ec3bf6141bccbf4bbd0a450891289fcfb8e9441ed9fc94c52aac62c4b7481"}},{"ruleId":"D2","level":"warning","message":{"text":"TopologyRingCreator.createNextRegion (cognitive 24): TopologyRingCreator.createNextRegion has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (18 pts), loops 2 (4 pts), boolean chains 1, error handling 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"72ea17ad59c105446752c2131a1f393135740fa3a5bff8f679e0f532658cb25e"}},{"ruleId":"D2","level":"warning","message":{"text":"SpinningTransferQueue.awaitMatch (cognitive 24): SpinningTransferQueue.awaitMatch has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (19 pts), boolean chains 3, loops 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c826f80269d681a7fdb36d6d3c6ed47a2a369a07e9a2f4f30d363504839f42b"}},{"ruleId":"D2","level":"warning","message":{"text":"SourceSync.syncScopeArtifacts (cognitive 23): SourceSync.syncScopeArtifacts has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (20 pts), match/switch 1 (3 pts) (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/sourcesync/SourceSync.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"c45ca10f8213bebfaedb096af6535c00d342775d4a06691f9815a37b9e59801a"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncCppCompilerImpl.artifact (cognitive 23): AsyncCppCompilerImpl.artifact has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 7 (10 pts), boolean chains 1 (nesting depth added 11). 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncCppCompiler.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"906a7802f3eb2f95c7634f323ad561d2b6c3d468f00d7b2cbe07285a76d5cb9c"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSourceDependency.expandDependencyDefinitions (cognitive 23): MultiSourceDependency.expandDependencyDefinitions has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (11 pts), match/switch 5 (9 pts), boolean chains 3 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/dependencies/MultiSourceDependencies.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b8917ee68cefae382e6a250b629148ff54f1cf384c8f32a728fd7745214798"}},{"ruleId":"D2","level":"warning","message":{"text":"AI.to$newNode (cognitive 23): AI.to$newNode has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 5, match/switch 4 (5 pts), loops 2 (3 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/AsyncIterator.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"37a6fbc0c0a488398616fbb824ea3986f8faac12ac1fadd641709ac67a51ea08"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphSamplers.provide (cognitive 23): GraphSamplers.provide has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (12 pts), loops 4 (6 pts), match/switch 3 (5 pts) (nesting depth added 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/sampling/GraphSamplers.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"0899341d44bdc8e3226f4b29b04f5d6c6c72075157abf16ea6aa444a8cdd3232"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeStackSampler.start (cognitive 23): NodeStackSampler.start has cognitive complexity 23 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 3 (8 pts), error handling 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/sampling/StackRecorder.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3fe809d036486b878a3882a2bbe1fe80c397e72d4baa247682c406c5967c369"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyTrackerRoot.getOrCreateScenario (cognitive 23): DependencyTrackerRoot.getOrCreateScenario has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (16 pts), match/switch 2 (5 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerRoot.scala"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"684fa4adeb383a0fdfb53bbaba858d0c3e94af687750ec2b600659e166b03ac8"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoPickleSerializer.protoToArraySeq (cognitive 23): ProtoPickleSerializer.protoToArraySeq has cognitive complexity 23 (threshold 15). Drivers by points: loops 9 (17 pts), if/else 3 (4 pts), boolean chains 1, match/switch 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5df6269a263d6d4a23d540e25a9182f7e816b65d9da3f936b21a154eab3f445"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityInfoTransformer.transformSafe (cognitive 23): EntityInfoTransformer.transformSafe has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 2 (3 pts), boolean chains 2 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c99963e122235e039b49465b3123e4d8179a307e92df5722024d5745da63fe3"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusDALRefChecks.checkAccDefDef (cognitive 23): OptimusDALRefChecks.checkAccDefDef has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 3 (9 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4b87b74f3e49fc9cff0045ac995df98c057e018fec684cd1d02ac00115ab33c"}},{"ruleId":"D2","level":"warning","message":{"text":"Visitor.evaluateGraphOf (cognitive 23): Visitor.evaluateGraphOf has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (19 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/recipes/concurrency/ConcurrencyTracing.scala"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d84c515e9ba5761ff0e8e0dafc1b7d062d55edb4cabfdde4614bdaae70780aa"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarSubqueryRewriter.handleScalar (cognitive 23): ScalarSubqueryRewriter.handleScalar has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 5, match/switch 2 (4 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ScalarSubqueryRewriter.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"8648afeef8d52745a2668e79bb28e6d5a71420bc96464c89165355688b1a444d"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultInstanceFactory.createInstance (cognitive 23): DefaultInstanceFactory.createInstance has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (13 pts), error handling 1 (5 pts), loops 1 (4 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/InstanceFactory.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7f2fadc74d4ca2ce49335fb6eac0bdf21b8d241e4574756e579e4ec2e4068c9"}},{"ruleId":"D2","level":"warning","message":{"text":"Staging.transform (cognitive 23): Staging.transform has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (17 pts), match/switch 2 (5 pts), 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingComponent.scala"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cd031caf55389b080799fed5aa4b56a35fe1c5720b696041db12f6b264ad40b"}},{"ruleId":"D2","level":"warning","message":{"text":"InstrumentationInjectorAdapter.visitMethod (cognitive 23): InstrumentationInjectorAdapter.visitMethod has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13 (14 pts), boolean chains 7, ternaries 1 (2 pts) (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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorAdapter.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"e96c1d75a47e69c3f44ff118fdf0cce9cdc1b683606927303af58069722403c2"}},{"ruleId":"D2","level":"warning","message":{"text":"LoomAdapter.setupNodeAndLambdaCalls (cognitive 23): LoomAdapter.setupNodeAndLambdaCalls has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 3 (9 pts) (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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b82ef256e61a3754c189c72e23baa939f0d0a399a7b2eea9232561636c02e07"}},{"ruleId":"D2","level":"warning","message":{"text":"DHTRingManager.syncData (cognitive 23): DHTRingManager.syncData has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (17 pts), error handling 3 (6 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"b94b74e1ed59382d75f8f20e19903d8941ceae5bbfa8e80b86c082f5460c3eff"}},{"ruleId":"D2","level":"warning","message":{"text":"RingIntegrityCheck.checkIntegrity (cognitive 23): RingIntegrityCheck.checkIntegrity has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (18 pts), loops 3 (5 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"b79065ea7c673ebdd42cb9bdbba74f6ea50e75b7cf371be4cc0c776925032365"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleWriterConsistentStorageEntryState.updateState (cognitive 23): SingleWriterConsistentStorageEntryState.updateState has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13 (23 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/SingleWriterConsistentStorageEntryState.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"64fe90a7330006a99aa907fc8bffa134faaa81fa03b8913b0d308f255a5f79b7"}},{"ruleId":"D2","level":"warning","message":{"text":"RingTreeBuilder.buildMaps (cognitive 23): RingTreeBuilder.buildMaps has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 2 (7 pts), boolean chains 1 (nesting depth added 14). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"c992128fa8f1a6483747a4a662d926a1c607b307aede4b120f1d225af81f66d9"}},{"ruleId":"D2","level":"warning","message":{"text":"ObtExternalLookup.lookupAnalyzedClass (cognitive 22): ObtExternalLookup.lookupAnalyzedClass has cognitive complexity 22 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 5 (6 pts), match/switch 3 (6 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/setup/ObtExternalHooks.scala"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"99fda4135e62d67f86ff8e66f9c20ea1d06a8284a6841fcd17f488fab4258b06"}},{"ruleId":"D2","level":"warning","message":{"text":"MsIvyXml.dependencies (cognitive 22): MsIvyXml.dependencies has cognitive complexity 22 (threshold 15). Drivers by points: loops 5 (15 pts), match/switch 1 (6 pts), if/else 1 (nesting depth added 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/MsIvyXml.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c6bfe48ef7a73b7df3efd2d5a21bb81fdfc8ba38a163de2b9a138c2cab3640d"}},{"ruleId":"D2","level":"warning","message":{"text":"ProcessorConfigurationCompiler.load (cognitive 22): ProcessorConfigurationCompiler.load has cognitive complexity 22 (threshold 15). Drivers by points: loops 5 (15 pts), if/else 2 (7 pts) (nesting depth added 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ProcessorConfigurationCompiler.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f47592b1376ce19709a0b862e9536c4c1ead8f40413a7a6002f6f328f9450c"}},{"ruleId":"D2","level":"warning","message":{"text":"SSCacheID.mayContainTweakAffecting (cognitive 22): SSCacheID.mayContainTweakAffecting has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (14 pts), loops 2 (6 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/CacheIDs.scala"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba296539b6413bd9e15f8e12e6705edb973d2919351adadc5e1547eb1ac60c37"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeBatcherSchedulerPlugin.adapt (cognitive 22): NodeBatcherSchedulerPlugin.adapt has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (18 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ef97314fe592869130042d006b3a5f51fa54834b6009b2767ce65a6a516267"}},{"ruleId":"D2","level":"warning","message":{"text":"AdaptedNodesOfOnePlugin.removeCollectedOrCompleted (cognitive 22): AdaptedNodesOfOnePlugin.removeCollectedOrCompleted has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 3, loops 2 (3 pts), error handling 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/SchedulerPlugin.scala"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"69dc50bd7d84f512596588a835573416bfff357a2d936bf055243928e079b23e"}},{"ruleId":"D2","level":"warning","message":{"text":"GridProfiler.aggregateFromDist (cognitive 22): GridProfiler.aggregateFromDist has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 4 (7 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":671}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0657bd851225399bbec13dd92d448ce35906b16794994a03fb606d48acb1ff8"}},{"ruleId":"D2","level":"warning","message":{"text":"UTrackNode.onChildCompleted (cognitive 22): UTrackNode.onChildCompleted has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (14 pts), error handling 2 (4 pts), match/switch 1 (3 pts), boolean chains 1 (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/UserNodeTracker.scala"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"1389be3c32df6cbecda10a5f635473ea3a777b56da108d4c4655beb42c6387f3"}},{"ruleId":"D2","level":"warning","message":{"text":"TemporalSource.translateMarkers (cognitive 22): TemporalSource.translateMarkers has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12 (15 pts), boolean chains 5, error handling 1 (2 pts) (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/internal/TemporalSource.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f06fd949b3332b0dcf38905699185e169e9e9b53e8beb0b96a0284b5bb828a"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusExportInfo.extractMetaParams (cognitive 22): OptimusExportInfo.extractMetaParams has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12 (16 pts), match/switch 3 (4 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusExportInfoComponent.scala"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b20912a86ac9a69c42ab66a6257f8ec7ca8463e7ac248f6129616ecdb76c73d"}},{"ruleId":"D2","level":"warning","message":{"text":"StackNode.pushSelfTimesToLeaves (cognitive 22): StackNode.pushSelfTimesToLeaves has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (18 pts), loops 1 (3 pts), match/switch 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"a48221e884f9b31229b956671c3a0c1bd8f7e4aa55d4a666259a685a624c87ce"}},{"ruleId":"D2","level":"warning","message":{"text":"ComparisonResultTabbedPane.setResultTableRows (cognitive 22): ComparisonResultTabbedPane.setResultTableRows has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 3 (5 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/CompareOgtracePanel.scala"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e5644857bfcdd45a4222075ce7667a28b1b0eecd9aed8d31081867cf69e5de"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeSelectorComboBox.init (cognitive 22): NodeSelectorComboBox.init has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (15 pts), error handling 2 (6 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/controls/NodeFilterComboBox.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"69407e7e2bf1b4bb24cb20deeee979ff538326ea7cac80f217fb30819e65f41a"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryMacros.on (cognitive 22): QueryMacros.on has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (15 pts), match/switch 4 (6 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/QueryMacros.scala"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f8613aa3f86e083c3a441deb543c091229ef755f5ae8ed3fbb5886633d5ed2f"}},{"ruleId":"D2","level":"warning","message":{"text":"Typer.handleBinaryExpression (cognitive 22): Typer.handleBinaryExpression has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12 (20 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/Typer.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a73f3ae2905dde944ee75faa2bd5dc603a99a2b77a55ca5b932f51545b2c562"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvEntityReaderIterable.createObject (cognitive 22): CsvEntityReaderIterable.createObject has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 2 (5 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/csv/CsvMultiRelation.scala"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d9a9a61e65c6686eb0f445e0a04f5a7d087a396172ca77e3814190740cff26"}},{"ruleId":"D2","level":"warning","message":{"text":"DALProvider.knownProjectorToLambda (cognitive 22): DALProvider.knownProjectorToLambda has cognitive complexity 22 (threshold 15). Drivers by points: match/switch 7 (15 pts), if/else 7 (nesting depth added 8). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/DALProvider.scala"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a5578d060eda2d576d01667597af912e4be4e5b917cdb3de8fe6c45eb781852"}},{"ruleId":"D2","level":"warning","message":{"text":"DALExecutionProvider.get (cognitive 22): DALExecutionProvider.get has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (10 pts), match/switch 4 (8 pts), boolean chains 4 (nesting depth added 7). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALExecutionProvider.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b2c8939867cc9850c12469ff05189044fb4f1a15fd47e83c2d5df84bdf739c5"}},{"ruleId":"D2","level":"warning","message":{"text":"SparseUtils.backupIgnoredFiles (cognitive 22): SparseUtils.backupIgnoredFiles has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (16 pts), error handling 2 (6 pts) (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":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/sparse/SparseUtils.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"068a9f99520fa5003027151eb1b207dddcae05760b5838386a2ef155f68f7c17"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistentHashRing.removeServer (cognitive 22): ConsistentHashRing.removeServer has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (19 pts), loops 2 (3 pts) (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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/ConsistentHashRing.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9301b1bd6a121fae2491671c40848c1d2d36d7bdc4d3b519ef3c71dba5a4a20"}},{"ruleId":"D2","level":"warning","message":{"text":"BspSyncer.buildTargets (cognitive 21): BspSyncer.buildTargets has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13 (14 pts), match/switch 4 (6 pts), boolean chains 1 (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspSyncer.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"7231b436cc7bf643fd685fb5e3c6f0ed24084dc4932d7297421a364d576757d5"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyInstallPathResolver.locationIndependentClasspath (cognitive 21): DependencyInstallPathResolver.locationIndependentClasspath has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 2 (3 pts), 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/files/RuntimeDependencyPathResolver.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"83cb5fc6d1142ee8d28e9beb0f247b8af2f867455af8aebf51f5082aeebc0bee"}},{"ruleId":"D2","level":"warning","message":{"text":"RuleFilterConfigurationCompiler.loadFilter (cognitive 21): RuleFilterConfigurationCompiler.loadFilter has cognitive complexity 21 (threshold 15). Drivers by points: loops 6 (21 pts) (nesting depth added 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/RuleFilterConfigurationCompiler.scala"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"418733cb12aa97d878f1963770785a404b7dca64a1dbee48d1fcce2ed68c5a43"}},{"ruleId":"D2","level":"warning","message":{"text":"Compiler.validateAndAssignParents (cognitive 21): Compiler.validateAndAssignParents has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, match/switch 3 (4 pts), boolean chains 3 (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":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"f52455fda2b3b721e6470ec8206dcadfe194ad5f2285dd218f992dca2611fd21"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpTailer.processContentAndScheduleRangeFetch (cognitive 21): HttpTailer.processContentAndScheduleRangeFetch has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (15 pts), error handling 3 (4 pts), 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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/util/HttpTailer.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf87c50c3701b78d6432d2a986609d6b7ec58a2258c09c0b4482ce6c588aa4aa"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusDoubleSeq.map (cognitive 21): OptimusDoubleSeq.map has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 1 (3 pts), 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"49082e5a288fb87beef9621a44736abf1c8239536a091fa0e7d9acba7bda80a2"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedCancellationScope.cancelInternal (cognitive 21): NestedCancellationScope.cancelInternal has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 2 (6 pts), error handling 1 (4 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/CancellationScope.scala"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7f0649f13d3eb96a73b9eaf1635f4c0bcc2af5ae24cd21134e9c07ae435c91"}},{"ruleId":"D2","level":"warning","message":{"text":"ConvertByNameToByValueNode.onChildCompleted (cognitive 21): ConvertByNameToByValueNode.onChildCompleted has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 1 (4 pts), loops 1 (3 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/ConvertByNameToByValueNode.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"22261939af8a24fe4203f4958ec7ebc012a1cb6ba01bd66eaca9deea8200b641"}},{"ruleId":"D2","level":"warning","message":{"text":"LegacyGCMonitor.onHeapAboveThreshold (cognitive 21): LegacyGCMonitor.onHeapAboveThreshold has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (21 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/LegacyGCMonitor.scala"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bd2a7f5f0278dcbd468ddb3701ef98d8509f3e3c6e0064bf056d490d1c7f959"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupingNodeBatcherSchedulerPluginBase.add2BatchNode (cognitive 21): GroupingNodeBatcherSchedulerPluginBase.add2BatchNode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13 (20 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"00f550e1abb452568958646bd755b5cfe8683f9648cfc9b3ea47dd0c60e7e6dd"}},{"ruleId":"D2","level":"warning","message":{"text":"Profiler.resolveLocation (cognitive 21): Profiler.resolveLocation has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 1 (3 pts), boolean chains 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/Profiler.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8cc5a7fc4b445f1aae8dc95e6e1321fa041f2583675f1564fcae79b2e59d094"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractPersistBlock.closeAndCreateAsserts (cognitive 21): AbstractPersistBlock.closeAndCreateAsserts has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10, match/switch 4 (6 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d9f42a5743efa4db12868757d67792ddf83c8f79a83da439f2de76570b9e88"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionSqlFormatter.visitSelect (cognitive 21): ExpressionSqlFormatter.visitSelect has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 2 (4 pts), 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionSqlFormatter.scala"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e3b31af267dd73059a9b2f5848dbfa1fa26dc5690319d6e91d86870c54d477e"}},{"ruleId":"D2","level":"warning","message":{"text":"AdjustAST.transformAccelerated (cognitive 21): AdjustAST.transformAccelerated has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 4 (5 pts), boolean chains 3 (nesting depth added 6). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e4cefc7d0ceee0be4134f0eb74477cedcd61730465e001ccf0c481ca39d357"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusExportInfo.gen (cognitive 21): OptimusExportInfo.gen has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (17 pts), boolean chains 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusExportInfoComponent.scala"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a61d4ca36a304f1fa3bfbc96a5d8670e41bcee5f41f5875910816a61714d69a"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncProfilerIntegration.ensureLoadedIfEnabled (cognitive 21): AsyncProfilerIntegration.ensureLoadedIfEnabled has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (17 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 11). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/AsyncProfilerIntegration.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdc81e5633f5a3adcd8d8ad2e6094dbe639a95ef8e3c0b6606c38b4a5f8446a1"}},{"ruleId":"D2","level":"warning","message":{"text":"InfoDumpUtils.execute (cognitive 21): InfoDumpUtils.execute has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (19 pts), boolean chains 1, 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/platform/util/InfoDump.scala"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"aceb8913ecfc8b5f7c914c60114866cffe86b6646784c93eba9aaff6f0b2ca77"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerUI.minimumScenarioOf (cognitive 21): DebuggerUI.minimumScenarioOf has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2 (7 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/DebuggerUI.scala"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"73d8f0458106a1b736d4f91f4f51d7e8b1e17d92b93aa2c2cd400562e6b0291e"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnProjector.visitElement (cognitive 21): ColumnProjector.visitElement has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (6 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ColumnProjector.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"6be8fa7aba038a2c5f7de0a2e7207661289b25bdab2d20c1f8bc27cef382ee8c"}},{"ruleId":"D2","level":"warning","message":{"text":"ComparisonRewriter.handleBinaryExpression (cognitive 21): ComparisonRewriter.handleBinaryExpression has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 2 (5 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ComparisonRewriter.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cc4f36ffdbe3df8dd6d88d76bb690dc188b7b5bad857117fbf4f4e05d99f41d"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityTreeReducerCommon.buildMemberRef (cognitive 21): EntityTreeReducerCommon.buildMemberRef has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 3 (10 pts), if/else 5 (8 pts), boolean chains 3 (nesting depth added 10). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"176f8737322c6b718668edb85c94fdbef1f2df2215f49298ee9a2f106eccb195"}},{"ruleId":"D2","level":"warning","message":{"text":"DALFormatter.handleBinaryExpression (cognitive 21): DALFormatter.handleBinaryExpression has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (13 pts), boolean chains 8 (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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALFormatter.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"89adf66c55300eac7f3fa79dd4f177a996e6afb8f13d12ec5d20b6d1d8c60029"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityAgent.premain (cognitive 21): EntityAgent.premain has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14 (16 pts), ternaries 2, boolean chains 1, error handling 1, 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":"optimus/platform/projects/entityagent/src/main/java/optimus/EntityAgent.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"e39833282d3899dcb6035b7f6ffda27b7444dc26e15a7fcf678383d3035313c3"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoRegionList.merge (cognitive 21): ProtoRegionList.merge has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (18 pts), loops 1 (2 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a6f9e54e70d495126ec02207fa098742f7b8fa1187e928456554cb2704581b"}},{"ruleId":"D2","level":"warning","message":{"text":"CPUtils.constructorMatches (cognitive 21): CPUtils.constructorMatches has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 1 (2 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/CPUtils.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"d30aba646ddcc72af3a535916314ffc4d74a346fde01a3c5951338d0eaa9374d"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassParser.createConstructorArgsFromParams (cognitive 21): ClassParser.createConstructorArgsFromParams has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (12 pts), error handling 2 (8 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"8951e2e32ec11b7ab4c61e2ded1ec31436d1f56d796debbe3b0bfefda322388e"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassParser.\u003Cinit\u003E (cognitive 21): ClassParser.\u003Cinit\u003E has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15 (18 pts), error handling 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, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"79aa3fbf89b18b8a8a06570d225efdb116fbf101d9b024c8767c0336850009c7"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncScalaCompiler.doCompilation (cognitive 20): AsyncScalaCompiler.doCompilation has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (15 pts), match/switch 2 (4 pts), error handling 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncScalaCompiler.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eced76c049a35da7f2f20f4e21380efd68e529a637021236e82ebeaabade943"}},{"ruleId":"D2","level":"warning","message":{"text":"MsIvyArtifactSource.matchingPublications (cognitive 20): MsIvyArtifactSource.matchingPublications has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 5 (12 pts), boolean chains 4, if/else 3 (4 pts) (nesting depth added 8). 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/MsIvyRepository.scala"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b69c38d1f21420bfa41a48918457f778302fa0fb412ccfe92f71f7d5d7ce39"}},{"ruleId":"D2","level":"warning","message":{"text":"ScopeDefinitionCompiler.loadCustomScopesDefinitions (cognitive 20): ScopeDefinitionCompiler.loadCustomScopesDefinitions has cognitive complexity 20 (threshold 15). Drivers by points: loops 5 (9 pts), if/else 5, error handling 1 (3 pts), match/switch 1 (2 pts), boolean chains 1 (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":853}}}],"partialFingerprints":{"codehealthFindingId/v1":"776df6fd35108956d8cbefde56cf49f6673863d1e8f7eebe781eb8a39ce351d7"}},{"ruleId":"D2","level":"warning","message":{"text":"CrumbMerger.merge (cognitive 20): CrumbMerger.merge has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 2 (5 pts) (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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/graph/CrumbMerger.scala"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"37fbfa2af122188ee9fa2b491b2e39afe590af6ac5e7a35c3b481dd54a935499"}},{"ruleId":"D2","level":"warning","message":{"text":"BreadcrumbsPropertyConfigurer.implFromConfig0 (cognitive 20): BreadcrumbsPropertyConfigurer.implFromConfig0 has cognitive complexity 20 (threshold 15). Drivers by points: loops 4 (6 pts), error handling 5, if/else 4, match/switch 3 (4 pts), boolean chains 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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce37f3bc041159307542fda1d6048a1e0a12f4126bca2eeb022cfffbad4d605b"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraysSeq.sliceSafe (cognitive 20): OptimusArraysSeq.sliceSafe has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 3, loops 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"7492fba0c331a86f9a810ed0d23bed83a2234484ea47e4caf0e17b0db9c5f561"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraysSeq.sliceSafe (cognitive 20): OptimusArraysSeq.sliceSafe has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 3, loops 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"b497ad2fbb96429ea763d3c37c533a7fd7edb2f6c3569e3a026317fbfe09d5b6"}},{"ruleId":"D2","level":"warning","message":{"text":"ProfilerTimings.timeCurrentMillis (cognitive 20): ProfilerTimings.timeCurrentMillis has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), 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. This shape REPEATS in the file: one other method here (ProfilerTimings.timeNanoTime) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ProfilerTimings.scala"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb5d0eebfec6e6d271869d30aaeeaa36669ca115986689ee7baefe07e23dd060"}},{"ruleId":"D2","level":"warning","message":{"text":"ProfilerTimings.timeNanoTime (cognitive 20): ProfilerTimings.timeNanoTime has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), 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. This shape REPEATS in the file: one other method here (ProfilerTimings.timeCurrentMillis) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ProfilerTimings.scala"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"8072c1bcebfeff2a863a66ab6dfa9124d36847884ec70d8e72178a60cdec4820"}},{"ruleId":"D2","level":"warning","message":{"text":"ExperimentalAsyncIterator2.force$newNode (cognitive 20): ExperimentalAsyncIterator2.force$newNode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (18 pts), match/switch 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f534c1c0a6c1f18533ef8d826721a07626db16e1c136bd858f63315e94c9bc"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstantNominator.traverse (cognitive 20): ConstantNominator.traverse has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 6, match/switch 2 (3 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"c321dbc86a5e0dafa6f32abd695e57351156b726f335cb8330b2a09ee7768b18"}},{"ruleId":"D2","level":"warning","message":{"text":"AppStatsBasics.doTraitProbe (cognitive 20): AppStatsBasics.doTraitProbe has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (16 pts), boolean chains 2, loops 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d96e1b05f49f892a063593e926375f203cd3a314123b46c51cfd4a1a0fb29bb"}},{"ruleId":"D2","level":"warning","message":{"text":"FilteredStreamEvent.getFilteredEvent (cognitive 20): FilteredStreamEvent.getFilteredEvent has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 3 (5 pts) (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/pubsub/NotificationMessageHandler.scala"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8ed055c86bd38fd6164d67c3c8eadc3d1aed9bdfed3eed2cdd381a47da9e706"}},{"ruleId":"D2","level":"warning","message":{"text":"NotificationMessageHandler.replaceReferenceOnlyNotifications (cognitive 20): NotificationMessageHandler.replaceReferenceOnlyNotifications has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 4 (7 pts), error handling 1 (3 pts), boolean chains 1 (nesting depth added 11). 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/pubsub/NotificationMessageHandler.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ad2f021d2a45ace83e32d866a034881b31f34a651533dfa05e476836aa35156"}},{"ruleId":"D2","level":"warning","message":{"text":"AdjustAST.transformBackedDef (cognitive 20): AdjustAST.transformBackedDef has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 5, match/switch 2 (3 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"22ed08e55f811d6a448987249c3333ff64ef9f5599f87f2514b901956da7346e"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncTraverser.traverse (cognitive 20): AsyncTraverser.traverse has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (14 pts), loops 1 (4 pts), boolean chains 1, match/switch 1 (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncTransformers.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"e26e189b4093ed72805b97110880463dbb7e19365efee1e527334efa28ac8c63"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassifierComponent.nodeAttachment (cognitive 20): ClassifierComponent.nodeAttachment has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 7, match/switch 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/ClassifierComponent.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"90405dabed2b6532c12941dffb85125f97a152f49c8dfe66f675ab9a83a12447"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeClassBuilder.addFuncMethod (cognitive 20): NodeClassBuilder.addFuncMethod has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 8 (nesting depth added 8). 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cb75948e3148e4e7fe21ffc0cce81d98f0bce660297f268688056026b464463"}},{"ruleId":"D2","level":"warning","message":{"text":"WatcherProcess.dump (cognitive 20): WatcherProcess.dump has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 3 (6 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/heartbeat/WatcherProcess.scala"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6f0ea7699099c0179e33795c96295bd5e396bdb4ebdca3e58d36cd86e9d193"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusTask.runtimeConfig (cognitive 20): OptimusTask.runtimeConfig has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13 (16 pts), match/switch 2 (3 pts), 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusTask.scala"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ec8940439374d774915580221705bb307bd94cbf9eb55ce5c78a8533f333ba"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphConsole.init (cognitive 20): GraphConsole.init has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (19 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GraphConsole.scala"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6e2202cb16a9693e42818b407df118e270c80c1e9b9c054cb2ff7fbbed5f741"}},{"ruleId":"D2","level":"warning","message":{"text":"TableColumnFlags.parsedFilter (cognitive 20): TableColumnFlags.parsedFilter has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 2 (4 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"a57aa7202db30007cc37392898b347ecf6d511c664914f6bd1f82f25ddb15d81"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeGraphReducer.compressedGraphV1 (cognitive 20): NodeGraphReducer.compressedGraphV1 has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (18 pts), loops 1 (2 pts) (nesting depth added 12). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/utils/NodeGraphReducer.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aeb0fb4b1aba64bf8ef731d2be5d201d09e8f9b238c53e8c3bc5da09d81209c"}},{"ruleId":"D2","level":"warning","message":{"text":"ASMGeneratorUtils.convert (cognitive 20): ASMGeneratorUtils.convert has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (19 pts), boolean chains 1 (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMGeneratorUtils.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7adb0be585d5a47c09d616ef1f080b0c9b3ef27f52825d9455f78d231c0eac6"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryBinder.bindMember (cognitive 20): QueryBinder.bindMember has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 6 (11 pts), if/else 5 (6 pts), boolean chains 3 (nesting depth added 6). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/mapping/QueryBinder.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"57ae07063f3213c5c530904f94a1491d91413df6a67603c35721b22e0f0d2b1f"}},{"ruleId":"D2","level":"warning","message":{"text":"Tabulator.format (cognitive 20): Tabulator.format has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (10 pts), loops 4 (9 pts), 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":"optimus/platform/projects/utils/src/main/scala/optimus/utils/Tabulator.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"b853590237b22bf628f8acd3789285eed91ebd054e9d5d5e048044a2ca700632"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchOperationTemplate.handleInfraFailures (cognitive 20): BatchOperationTemplate.handleInfraFailures has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (16 pts), match/switch 1 (2 pts), 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/replication/BatchOperationTemplate.java"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea9dd6563191e91e4f235bde5a039ae428699747bb747809dc7010b2743f90b"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncOperationImpl.setResult (cognitive 20): AsyncOperationImpl.setResult has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (20 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncOperationImpl.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f9491c8171e4e6c68ca978b16949ce5dc3a7d04784368eabd66fe36418da24"}},{"ruleId":"D2","level":"warning","message":{"text":"RetrievalOptionsComparator.compare (cognitive 20): RetrievalOptionsComparator.compare has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (20 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/RetrievalOptionsComparator.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb5e70883b1e53d3b000b61fa1341bff71a24edf7f41250c6ad36c172ea58d3a"}},{"ruleId":"D2","level":"warning","message":{"text":"DHTRingManager.recoverData (cognitive 20): DHTRingManager.recoverData has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), error handling 3 (7 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"7682a674e275530054a256e933b4e55f9a351e0b99c7446cbdb2ad09456f0c00"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeMatcher.match (cognitive 20): TreeMatcher.match has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (14 pts), loops 3 (5 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/TreeMatcher.java"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"d21c107d58d42a2e90e8c89dd388f3bd9ddc0c6991f9c832e1a9705b8cdef1aa"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseRetrievalOperation.processInitialMessageGroupEntry (cognitive 20): BaseRetrievalOperation.processInitialMessageGroupEntry has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (15 pts), error handling 1 (4 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/BaseRetrievalOperation.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"773158e1d547535e28ab3b772d365fb811510a4895b9580e7dacb1e97527044a"}},{"ruleId":"D2","level":"warning","message":{"text":"LooseConsistencyWrite.update (cognitive 20): LooseConsistencyWrite.update has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (20 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/LooseConsistencyWrite.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8f7329b05d7e45141994b9c9f416660a30984637674bb4bf60993aba9e016e"}},{"ruleId":"D2","level":"warning","message":{"text":"RingRegion.intersectionType (cognitive 20): RingRegion.intersectionType has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14 (18 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"e28569535c060a14ec5e399d2707a6723736bd89af50024fff285ad609073cbf"}},{"ruleId":"D2","level":"warning","message":{"text":"RingTree.cleanupList (cognitive 20): RingTree.cleanupList has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (17 pts), loops 1 (3 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"376f50334fc3705e7ca1f62538f4578ef6a2332d2002323e14183f23e057e743"}},{"ruleId":"D2","level":"warning","message":{"text":"TopologyRingCreator.nextRegion (cognitive 20): TopologyRingCreator.nextRegion has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (15 pts), match/switch 1 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d234d328a025fd3f7d74e8ba72fff0e45a1e5c7bc976f787602cadf56b2db76"}},{"ruleId":"D2","level":"warning","message":{"text":"TopologyRingCreator.swap (cognitive 20): TopologyRingCreator.swap has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14 (20 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c916b34d37212165dc1d7ce278d4e5782452777f3044da34b4ca5b686fa3b4b"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassParser.parseSet (cognitive 20): ClassParser.parseSet has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (19 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4773a7b80833552e554865bc9b130f06cac61164a764b4d7fac60671bd4c11"}},{"ruleId":"D2","level":"warning","message":{"text":"TestplanInstaller.prepareFor (cognitive 19): TestplanInstaller.prepareFor has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 1 (2 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/installer/component/TestplanInstaller.scala"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c8e496a12e5faa6e7bb805aa1bf1a162120ee33fa17098ee84ec40a55273057"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractImageBuilder.processPath (cognitive 19): AbstractImageBuilder.processPath has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 5, match/switch 2 (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"137790119ff8f08bd544a33fe75bcfbaf2927b7e5fd820c3d164d430284d0d0f"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraySeq.filter0 (cognitive 19): OptimusArraySeq.filter0 has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 3, 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a350011c0e21a97f40e53e81c1ed2e2689afdca02e14127290ae343821b7144f"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraySeq.filter0 (cognitive 19): OptimusArraySeq.filter0 has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 3, 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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"99ee5ccc2bf0fa7b38065abe609f78334a2804d22d7ef0c3c4e2b9a98f964813"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioStack.getParentTrackingNode (cognitive 19): ScenarioStack.getParentTrackingNode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (11 pts), loops 2 (5 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":1013}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ca75de69d89240fac6b8f44cc493277005a66889ed6829c454eac8b04c5278"}},{"ruleId":"D2","level":"warning","message":{"text":"DSIClient.computeRedirectionImpact (cognitive 19): DSIClient.computeRedirectionImpact has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (12 pts), match/switch 2 (4 pts), boolean chains 3 (nesting depth added 6). 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIClient.scala"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14f88d316d93cba39ef708c618d2cf72b49f58e6979203d0168f4fe1d562d56"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectiveEntityPicklingImpl.prepareMeta (cognitive 19): ReflectiveEntityPicklingImpl.prepareMeta has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13 (17 pts), match/switch 1 (2 pts) (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/ReflectivePicklingImpl.scala"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e9775788b3ad38ca857e5a1e21c5638c21b7c435f723ae29bd47e53a2e4d692"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityTraceMsg.buildEntityTraceMsgFromString (cognitive 19): EntityTraceMsg.buildEntityTraceMsgFromString has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14 (19 pts) (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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"646e679e80cdc868ab30e9a7ff9ed19f7c4511a5d0d755fe61362979322bb1c3"}},{"ruleId":"D2","level":"warning","message":{"text":"TypedUtils.checkOwnership (cognitive 19): TypedUtils.checkOwnership has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 5, match/switch 2 (3 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded141ae279b1b41125f6c2b488f92fae339a15e9653fbf25c6bbaa1be18ad62"}},{"ruleId":"D2","level":"warning","message":{"text":"BundleDiffStat.apply (cognitive 19): BundleDiffStat.apply has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13 (18 pts), 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":"optimus/platform/projects/git-utils/src/main/scala/optimus/git/diffstat/GitDiffStat.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a766a1e8199cc8ba72f72d018fc0af071564791727c6d080a1c36ea4f262fbf"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseSamplers.provide (cognitive 19): BaseSamplers.provide has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 3 (7 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/BaseSamplers.scala"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c09c9ee5bade4e3d07d59e265e3600b7fc65149a48103c6f4aadb7c084f828f"}},{"ruleId":"D2","level":"warning","message":{"text":"ProfilerUI.getNodeStacks (cognitive 19): ProfilerUI.getNodeStacks has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (14 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ProfilerUI.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bbb72f7a4725189da2f7b7fe035257329f379e741a9dd359aaa76520c51e7b1"}},{"ruleId":"D2","level":"warning","message":{"text":"NPTreeNodeExt.expandTree (cognitive 19): NPTreeNodeExt.expandTree has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 1 (4 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/extensions/NPTreeNodeExt.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"732567f0bef05392c12883df8c22c69b2e0695ced4d77147210fdf8400eaa183"}},{"ruleId":"D2","level":"warning","message":{"text":"NPTreeNodeExt.openTo (cognitive 19): NPTreeNodeExt.openTo has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (16 pts), boolean chains 2, loops 1 (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/extensions/NPTreeNodeExt.scala"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f335b1e9129bf8c9fcc34b141203b0ee6d221412bde996e8921a699ab5d7a0"}},{"ruleId":"D2","level":"warning","message":{"text":"HotspotsTable.afterUpdateList (cognitive 19): HotspotsTable.afterUpdateList has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 3 (6 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/HotspotsTable.scala"},"region":{"startLine":1066}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1175c80268dc75265321c235edbc30936e441a42d83d84410bf0e4c0bf03542"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeTableCellRenderer.click (cognitive 19): TreeTableCellRenderer.click has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (17 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NPTableRenderer.scala"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4c82910bcbdf2c4621bbe510f1cdbdd4718ec93fc1c47a315ea8fcfcf0c6486"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeTimeLine.drawDistributedEvents (cognitive 19): NodeTimeLine.drawDistributedEvents has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15 (16 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":856}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa3fc5b02a0ff40e3acf1052e588fee77b2cc47c983bf5f3bca95ba61089631f"}},{"ruleId":"D2","level":"warning","message":{"text":"ElementFactoryEx.andAlso (cognitive 19): ElementFactoryEx.andAlso has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 2 (3 pts) (nesting depth added 7). 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. This shape REPEATS in the file: one other method here (ElementFactoryEx.orElse) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/LambdaReifier.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"536b1663edf61519d862a98ffa9372757222a7bc503b2c632841bfdb9396a393"}},{"ruleId":"D2","level":"warning","message":{"text":"ElementFactoryEx.orElse (cognitive 19): ElementFactoryEx.orElse has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 2 (3 pts) (nesting depth added 7). 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. This shape REPEATS in the file: one other method here (ElementFactoryEx.andAlso) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/LambdaReifier.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3e159daf2b9983eeba779f2ed4668ba4d2fbc861a4d4521700aede05f46dd7"}},{"ruleId":"D2","level":"warning","message":{"text":"ASMProxyGenerator.defineGetters (cognitive 19): ASMProxyGenerator.defineGetters has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, match/switch 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMProxyGenerator.scala"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b7951bed0fb11a3a755cf967fb43a7b9fcc7d1172ce15a7c63fd34aca79d919"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindSelect (cognitive 19): DefaultBinder.bindSelect has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 2 (4 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec7946233f946b99da5da7bf2a104dcc51e9e8167b700f6218e135cbeb88414"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindGroupBy (cognitive 19): DefaultBinder.bindGroupBy has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 3 (8 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":706}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2e7f2bd2fcabd47371de3793ee1c21ecd8fbbaee4b35d5f8b6165fa34a77845"}},{"ruleId":"D2","level":"warning","message":{"text":"UnusedColumnRemover.handleSelect (cognitive 19): UnusedColumnRemover.handleSelect has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (15 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/UnusedColumnRemover.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"e89eed5461c01d4cbaac327ac0816398f05f13ce6f725ffe5e8872ae73c80895"}},{"ruleId":"D2","level":"warning","message":{"text":"KDBSerializerImpl.serializeObjectList (cognitive 19): KDBSerializerImpl.serializeObjectList has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (10 pts), loops 2 (5 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/KDBSerializer.scala"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1e50771baf8b3fa25dc9ddd218660fcbde23b6f01d37bf3cf76019f904e5f88"}},{"ruleId":"D2","level":"warning","message":{"text":"NilaryOverride.transform (cognitive 19): NilaryOverride.transform has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (16 pts), boolean chains 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":1025}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dee0931541fba5cfdeab2b29ccb03652387ee95f4b06c75ce059b70378915e2"}},{"ruleId":"D2","level":"warning","message":{"text":"Traversablish.traverseEither (cognitive 19): Traversablish.traverseEither has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 4 (10 pts), if/else 3 (5 pts), loops 2 (4 pts) (nesting depth added 10). 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":"optimus/platform/projects/utils/src/main/scala/optimus/utils/MiscUtils.scala"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"666e664db3745f376694955442b2e53ed69d8c5d8a8ba9072d6e144a16e35c19"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectoryOpts.copyTo (cognitive 19): DirectoryOpts.copyTo has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (19 pts) (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":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/filesanddirs/DirectoryOpts.scala"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfe6f9e2d6c3e5059e499fdd3687db38ddaf2e886e8b8923b34e42c243ec998e"}},{"ruleId":"D2","level":"warning","message":{"text":"Block.updateHeadLabel (cognitive 19): Block.updateHeadLabel has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (18 pts), 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Block.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"e74eb73399f740eb28e5884aeccb43c5a86084872b7f24950328b58bda20cbec"}},{"ruleId":"D2","level":"warning","message":{"text":"LCompiler.loadConfigFrom (cognitive 19): LCompiler.loadConfigFrom has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (16 pts), 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/LCompiler.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"512a6de02c3a997184824c5d1d2a77159606d0fd4a3792594fb2317070453c76"}},{"ruleId":"D2","level":"warning","message":{"text":"NamespacePerspectiveOptionsImpl.keyCreatorFor (cognitive 19): NamespacePerspectiveOptionsImpl.keyCreatorFor has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 8 (9 pts) (nesting depth added 6). 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/NamespacePerspectiveOptionsImpl.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeb2a0ff2726944b52b06523c9d0f6d2998ccd0a9520a743aa3f2ba642585a47"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseStorageOperation.processInitialMessageGroupEntry (cognitive 19): BaseStorageOperation.processInitialMessageGroupEntry has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (12 pts), loops 2 (7 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/BaseStorageOperation.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"1839513a215619723518c1c97abde86fcecc593e1110bc31bdc1b93ceb6c67ee"}},{"ruleId":"D2","level":"warning","message":{"text":"gridprofiler.hotspotsTable (cognitive 19): gridprofiler.hotspotsTable has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 2 (3 pts), 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":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd71df971ec4f366c635aa4e8d5e277ac06d56df69a901c8332f74189ea4290"}},{"ruleId":"D2","level":"warning","message":{"text":"GccUtils.copyToSandbox (cognitive 18): GccUtils.copyToSandbox has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (18 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccUtils.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"c731696c561dbae36cdfa5898dfc40fc2bc3109f26d738d1aa20a74c3270bc59"}},{"ruleId":"D2","level":"warning","message":{"text":"TruncatingIndexBasedZipOps.updateExtraTimestamps (cognitive 18): TruncatingIndexBasedZipOps.updateExtraTimestamps has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (14 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 8). 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/TruncatingIndexBasedZipOps.scala"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ba5d3748333e1383b0d5c9f61e59f67eec04c0e56701a652e403f341d36601"}},{"ruleId":"D2","level":"warning","message":{"text":"Formatter.formatValue (cognitive 18): Formatter.formatValue has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (9 pts), boolean chains 3, loops 2 (3 pts), match/switch 2 (3 pts) (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ObtFileFormatter.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"df4bf66fab07c8fbb5113416de32705cf6809f8e25cfb9bb5f777e43da8ed27b"}},{"ruleId":"D2","level":"warning","message":{"text":"Builder1D.result (cognitive 18): Builder1D.result has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (9 pts), loops 2 (4 pts), boolean chains 3, match/switch 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"659cc7689aed40dd2ab29b7f80b0af12c42b7e85681436650fc39167fa07e041"}},{"ruleId":"D2","level":"warning","message":{"text":"Builder1D.result (cognitive 18): Builder1D.result has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (9 pts), loops 2 (4 pts), boolean chains 3, match/switch 1 (2 pts) (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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1127a2c5329eb034755c4b1b24082d11deaa849ea05851b7fc8aa09224bb5b6a"}},{"ruleId":"D2","level":"warning","message":{"text":"ConvertByNameToByValueNode.workOnScenario (cognitive 18): ConvertByNameToByValueNode.workOnScenario has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), error handling 1 (3 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/ConvertByNameToByValueNode.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3091ca2a995ba1edd9e3f77536af18dbeac5a0301775e174477c1bdfb075932"}},{"ruleId":"D2","level":"warning","message":{"text":"LegacyGCMonitor.timeBasedStrategy (cognitive 18): LegacyGCMonitor.timeBasedStrategy has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (14 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/LegacyGCMonitor.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd7e009c0d65995f51184b2f4a035a78fdd62168f9b0abe3ed863baab77e046"}},{"ruleId":"D2","level":"warning","message":{"text":"AdaptedNodesOfOnePlugin.randomNode (cognitive 18): AdaptedNodesOfOnePlugin.randomNode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (13 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/SchedulerPlugin.scala"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"f372d8c120f74bfcf0f327101137a3abf07363165d5e743dd33f14ab93de908e"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioStack.getTrackingNodeID (cognitive 18): ScenarioStack.getTrackingNodeID has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e80e3e419c33d2b050fd7c2a48c4cc4a2efe80e10b4d62ccd26095cc55a4d05"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInfoUtils.extractJavaType (cognitive 18): TypeInfoUtils.extractJavaType has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (7 pts), error handling 2 (6 pts), match/switch 2 (5 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e7b3e6887d0e5bc0b6e31f048b86dbe3223ba3f81ff328996e6982b7eeac9f1"}},{"ruleId":"D2","level":"warning","message":{"text":"AppStatsProfiler.jsonSegment (cognitive 18): AppStatsProfiler.jsonSegment has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 1 (5 pts), match/switch 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsProfiler.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d0a32a0b2ab419102a29981db8eeb3045f9941ccc75e8300d43aed5265cdc9a"}},{"ruleId":"D2","level":"warning","message":{"text":"VersioningServerManager.version (cognitive 18): VersioningServerManager.version has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 1 (3 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/VersioningServerManager.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf9c345b559c7d437ccf5b8ebdd312e7a08b18e937f700363ef7eb4416890d9c"}},{"ruleId":"D2","level":"warning","message":{"text":"WriteBusinessEvent.logDisplay (cognitive 18): WriteBusinessEvent.logDisplay has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 4 (8 pts) (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f48bbb6781aa5ebcf16a7dcabc0a063ca93276ff50eb8520441d234a31bf1e"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoPickleSerializer.protoToProperties (cognitive 18): ProtoPickleSerializer.protoToProperties has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 1, match/switch 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b7aa080bd88fe40386cff81ae99ef4ebdb8cedbddf44948626065b677a2baf"}},{"ruleId":"D2","level":"warning","message":{"text":"EmbeddableTransformer.buildEquals (cognitive 18): EmbeddableTransformer.buildEquals has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 2 (4 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EmbeddableComponent.scala"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ce675fc7ecc310249d4f7b29a62b1077c4ee3e37fe4e75f89a41fc95116b91"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusDALRefChecks.checkFullTextSearchType (cognitive 18): OptimusDALRefChecks.checkFullTextSearchType has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (13 pts), boolean chains 3, match/switch 1 (2 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"7661c17ec1f9b805cd726eb0005831cc0419abedcba92d82c94e4140dfa92f83"}},{"ruleId":"D2","level":"warning","message":{"text":"TypedNodeSynthesis.genStoredPropertyLoad (cognitive 18): TypedNodeSynthesis.genStoredPropertyLoad has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (16 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeSynthesis.scala"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"b592236473bdad401f132d3dae587b8d829528617109549f6c8e5e451708479d"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncProfilerIntegration.command (cognitive 18): AsyncProfilerIntegration.command has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (16 pts), error handling 1 (2 pts) (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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/AsyncProfilerIntegration.scala"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5f160fffe9dba6404ff6aaa69e065f7be7a5677e0a9f9d47a676ae11f392c49"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncProfilerSampler.snap (cognitive 18): AsyncProfilerSampler.snap has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (13 pts), boolean chains 4, 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/AsyncProfilerSampler.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88c0a1ae5b5b2791b317fe333e3dee35c8a102420f056b4ebbe79d2f5daf8ed"}},{"ruleId":"D2","level":"warning","message":{"text":"TemporalContextDeserializer.helper (cognitive 18): TemporalContextDeserializer.helper has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15 (18 pts) (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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/bitemporal/proto/TemporalContextDeserializer.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd13c6d34b63124dfeb73e04d8c48cbd4e978eeaaa636e93c4b5cd46b5456c32"}},{"ruleId":"D2","level":"warning","message":{"text":"CompanionTypeInfoBase.getStoredVal (cognitive 18): CompanionTypeInfoBase.getStoredVal has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (9 pts), match/switch 2 (5 pts), 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/TypeInfoApiBase.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"cacda2c88a481df51db1d19fa042175ea509f91d2bc26c38715e80d176987669"}},{"ruleId":"D2","level":"warning","message":{"text":"Visitor.enqueue (cognitive 18): Visitor.enqueue has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (16 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/recipes/concurrency/ConcurrencyTracing.scala"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"f15aa40f662dc7ec3cbf1b84c8214bb6a847073d6466a5beab4c1ad6316f1130"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeTimeLine.drawSelectedNodes (cognitive 18): NodeTimeLine.drawSelectedNodes has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 1 (2 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c4c4ad12ffba6dbf99ee2963f880b609bb2113a4db459eb09e0d343bc539cf"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicObjectJavaProxy.invoke (cognitive 18): DynamicObjectJavaProxy.invoke has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 5, match/switch 2 (4 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/AbstractDynamicObject.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"18eb98964a8775fd01429306a84de43cbffd188d1e0f4f77c11b79e844e65039"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryBinder.bindUntypedMember (cognitive 18): QueryBinder.bindUntypedMember has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 5 (9 pts), if/else 6 (8 pts), boolean chains 1 (nesting depth added 6). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/mapping/QueryBinder.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"c22436bb49bf2b25d9efc7df3c15c75fc630ab2115c14b07c2abba49e0828039"}},{"ruleId":"D2","level":"warning","message":{"text":"CrossApplyRewriter.handleJoin (cognitive 18): CrossApplyRewriter.handleJoin has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 3, match/switch 1 (2 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/CrossApplyRewriter.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"6575a1c912431ea7aae3a666ca1d19e32a98689d4ab7a823c2d160433046ad0e"}},{"ruleId":"D2","level":"warning","message":{"text":"RedundantColumnRemover.handleSelect (cognitive 18): RedundantColumnRemover.handleSelect has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 3 (6 pts), loops 1 (3 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/RedundantColumnRemover.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f18167d3019f161950c1c78b48eb9cc9c606a8ba7c6715436c4206247473a8e"}},{"ruleId":"D2","level":"warning","message":{"text":"ConditionOptimizer.optimizeProjection (cognitive 18): ConditionOptimizer.optimizeProjection has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (14 pts), match/switch 2 (3 pts), 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee59568f3ad300286ab65adcfd59891bb706171e97db304555d78e06d4daa688"}},{"ruleId":"D2","level":"warning","message":{"text":"StagingPlugin.processCommonOption (cognitive 18): StagingPlugin.processCommonOption 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingPlugin.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"b278664418f55642fa2cca98fa31ab777d925bf7cd0053d685fe40c847a67402"}},{"ruleId":"D2","level":"warning","message":{"text":"ZookeeperRegistryObserver.processCuratorConnectionStateChanged (cognitive 18): ZookeeperRegistryObserver.processCuratorConnectionStateChanged has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (13 pts), error handling 2 (4 pts), match/switch 1 (nesting depth added 7). 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/registry/ZookeeperRegistryObserver.java"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"b17452f4a734478ad666c4c6e0a2be547201c07891bae5a29f2393f86547d662"}},{"ruleId":"D2","level":"warning","message":{"text":"RingIterator.hasNext (cognitive 18): RingIterator.hasNext has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (3 pts), match/switch 1 (3 pts), 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/ConsistentHashRing.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ad2197dc3bfb020e31b86006fdf9c6883c2c7611ac9b65047c0572e3cff7d25"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultServerConnectionsManager.serverConnected (cognitive 18): DefaultServerConnectionsManager.serverConnected has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/DefaultServerConnectionsManager.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0503c117d6b8172de779f016738912cef2a630a35f589564e5a4cac4c1a52f9"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultServerConnectionsManager.serverDisconnectedOrFailed (cognitive 18): DefaultServerConnectionsManager.serverDisconnectedOrFailed has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/DefaultServerConnectionsManager.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"b793a8e2c3f034fbaa0027b017737759a1a7007f29d34b9233c7e61686bcfb8d"}},{"ruleId":"D2","level":"warning","message":{"text":"NettyInitialClientHandler.processInitialServerMessage (cognitive 18): NettyInitialClientHandler.processInitialServerMessage has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (11 pts), ternaries 5, error handling 1, 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/NettyInitialClientHandler.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"91b231820bf5c5ec56dc213b9b3878149cd8c8ec1ee281e5fd4d259c7dc12c63"}},{"ruleId":"D2","level":"warning","message":{"text":"InstrumentationInjectorMethodVisitor.injectMethodPrefix (cognitive 18): InstrumentationInjectorMethodVisitor.injectMethodPrefix has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15 (16 pts), boolean chains 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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorMethodVisitor.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60565e848f8fee63576b125883abc675168edfd29797323c54716b75f89c740"}},{"ruleId":"D2","level":"warning","message":{"text":"InstrumentationInjectorMethodVisitor.onMethodExit (cognitive 18): InstrumentationInjectorMethodVisitor.onMethodExit has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14 (15 pts), boolean chains 3 (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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorMethodVisitor.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebe104689700fc9695674a3de8a76f11bed2fa5c7b3120258a5024b9c3bc916b"}},{"ruleId":"D2","level":"warning","message":{"text":"LCompiler.transform (cognitive 18): LCompiler.transform has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 3, loops 1 (2 pts), ternaries 1 (2 pts), 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/LCompiler.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3705a54bcaa2d481a4a87a5da12207ba98de0f1c25e112a7e5b1403750297b4"}},{"ruleId":"D2","level":"warning","message":{"text":"Regenerator.write (cognitive 18): Regenerator.write has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 1 (3 pts), 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Regenerator.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"7559d82dd85c0af426397a035f9a2003110d17a6e5757b1ec76f19e76a51d482"}},{"ruleId":"D2","level":"warning","message":{"text":"AwaitStackManagement.awaitStack (cognitive 18): AwaitStackManagement.awaitStack has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 3 (5 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"77deef9d7262f1ebd2bed9aaf6950eb00afa53bdd13e4305fc8888c3d1f9ff55"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassMonitorInjector.transform (cognitive 18): ClassMonitorInjector.transform has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 3, loops 1 (2 pts), 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, 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":"optimus/platform/projects/entityagent/src/main/java/optimus/ClassMonitorInjector.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"a63b8f902de4cda7c66add6b682917fec557a242ac8f9f8fe1472050b9d9231c"}},{"ruleId":"D2","level":"warning","message":{"text":"NamespaceOptionsClientBase.getNamespacePropertiesAndTryAutoCreate (cognitive 18): NamespaceOptionsClientBase.getNamespacePropertiesAndTryAutoCreate has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (14 pts), error handling 1 (4 pts) (nesting depth added 11). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespaceOptionsClientBase.java"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"63eb2fad8b06e0105af8a3dfb7c0d2ef4c06e0da8dff1519f5872808debd7bb0"}},{"ruleId":"D2","level":"warning","message":{"text":"ProtoValueMessageGroup.addValue (cognitive 18): ProtoValueMessageGroup.addValue has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 2, error handling 1 (2 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoValueMessageGroup.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"41bfdd606ee2c53679bfd633646c82b59384f509c1f2df2b6fd0dff76d14511e"}},{"ruleId":"D2","level":"warning","message":{"text":"Histogram.parse (cognitive 18): Histogram.parse has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (10 pts), error handling 1 (4 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/Histogram.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc0f18df4e555dbc85f39089f3c150be23e5e8bce5880f0513ad876fe48ab905"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizedJavaCompiler.compilerOutput (cognitive 17): VirtualizedJavaCompiler.compilerOutput has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (11 pts), error handling 2 (4 pts), match/switch 1 (2 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncJmhCompiler.scala"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4d5f0361c2eeadb23f7a26e32b4f0b75dd68da6ba20b637717ad37b2d778754"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusInfo.applyConfig (cognitive 17): OptimusInfo.applyConfig has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 2 (3 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/entity/EntityInfo.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"391c1418bf0699241051dcb841aa083ef8b38d619b215e93033910190e5b6d03"}},{"ruleId":"D2","level":"warning","message":{"text":"Profiler.t_sstack_usage (cognitive 17): Profiler.t_sstack_usage has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (12 pts), error handling 1 (2 pts), loops 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/Profiler.scala"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c005fd71a8fd00cebdf51bd5ca55e6f0c1e761868240d9755edcd8fa4ea0cbf"}},{"ruleId":"D2","level":"warning","message":{"text":"ProfilingEventStatistics.processProfiledEvent (cognitive 17): ProfilingEventStatistics.processProfiledEvent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/ProfilingEventStatistics.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f93fa0ae81b1e64513adfac586c19da5c0c20cbcfd226ac83a06e6580d353fd5"}},{"ruleId":"D2","level":"warning","message":{"text":"AdvancedUtils.evaluateIn$newNode (cognitive 17): AdvancedUtils.evaluateIn$newNode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (15 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":897}}}],"partialFingerprints":{"codehealthFindingId/v1":"02497dd7f66f9f5a74e00768b34a6a688658ce686159508d971ef535a79e2833"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioStack.createChildInternal (cognitive 17): ScenarioStack.createChildInternal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (15 pts), boolean chains 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"523b8559faf4f2a0496d290c15d3915ad2a2847272a58837e84f87ac5bf1227d"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.jsonToString (cognitive 17): Utils.jsonToString has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (2 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"63fef9890f1d381650dc221975014b1b09c402bfbc80e7372e91fc6116f5a789"}},{"ruleId":"D2","level":"warning","message":{"text":"Utils.jsonSplit (cognitive 17): Utils.jsonSplit has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (16 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"776222c89b02ee965aaeac8ae7fdc879bc5d72e7efedf79fad7f55ba2a29e27e"}},{"ruleId":"D2","level":"warning","message":{"text":"HtmlInterpreters.nodeToHtmlString (cognitive 17): HtmlInterpreters.nodeToHtmlString has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 2 (3 pts), boolean chains 2 (nesting depth added 7). 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/util/html/HtmlComponent.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6ee3af3681f80ea82ba88990622f8963045417d1a260cf43176d4526f63a0e7"}},{"ruleId":"D2","level":"warning","message":{"text":"DSIResolver.serverTime (cognitive 17): DSIResolver.serverTime has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 2, match/switch 2 (nesting depth added 6). 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/AbstractEntityResolver.scala"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"e49a892c4ffd7265fe382beb1a6ae912a96fe9cf45a64897ec7536474cc9e695"}},{"ruleId":"D2","level":"warning","message":{"text":"DALDSIExecutor.doExecuteQuery (cognitive 17): DALDSIExecutor.doExecuteQuery has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 3 (5 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIExecutor.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"beef63f01514878baaa1133286fa4b4da23cdc4b2501374bf365952ada2157d7"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityResolverWriteImpl.executeAndRetryAppEvent (cognitive 17): EntityResolverWriteImpl.executeAndRetryAppEvent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (3 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverWriteImpl.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c8ade6651d49b69f7dc772330989f91cfa1a3ff6d510d5affcc2e746afb645"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientRequestContextImpl.addCommandResults (cognitive 17): ClientRequestContextImpl.addCommandResults has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (16 pts), boolean chains 1 (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/MessageContexts.scala"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"39533f9097f4ffd6228c845a4968f18addfafbe6a3af418b28ee61d8cde3fc87"}},{"ruleId":"D2","level":"warning","message":{"text":"Tracer.flushTrace (cognitive 17): Tracer.flushTrace has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, match/switch 3 (4 pts), boolean chains 3 (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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/trace/Tracer.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"88f28901023736d5e9f8956cbbafd8375c8d0692cf2bd1c6bcfe9ddbd68c7dfb"}},{"ruleId":"D2","level":"warning","message":{"text":"CombApply.apply (cognitive 17): CombApply.apply has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (16 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a35dd9e59988a940117b9bfb35e041f38d8f2e2dea290d8598bb0ab626ec30a"}},{"ruleId":"D2","level":"warning","message":{"text":"RedirectAccessors.generateArgsMethods (cognitive 17): RedirectAccessors.generateArgsMethods has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 4, match/switch 1 (2 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/RedirectAccessorsComponent.scala"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb1e13d6a6b8fc5dc438f57b1a87375a74b649b1c0a91fc94462b9350cb345a"}},{"ruleId":"D2","level":"warning","message":{"text":"TypedTreeCopier.inject (cognitive 17): TypedTreeCopier.inject has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (16 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":1217}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0d9e23c2c14149af0a200296d8559ac935cd35edcdb0cc1804edada40bcbb5e"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordingStateMachine.run (cognitive 17): RecordingStateMachine.run has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (8 pts), match/switch 3 (8 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/AsyncProfilerIntegration.scala"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae5b76abc4884a7415725075e81caf24897e785db9244cb9d82f10f9f4492d88"}},{"ruleId":"D2","level":"warning","message":{"text":"CleanName.cleanName (cognitive 17): CleanName.cleanName has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (10 pts), loops 2 (4 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"59539114f14b7400cf91886b23c70705eb9dc24d3ea54f8007c2cad145f7269e"}},{"ruleId":"D2","level":"warning","message":{"text":"StackAnalysis.stackMemoize (cognitive 17): StackAnalysis.stackMemoize has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (16 pts), boolean chains 1 (nesting depth added 9). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1142}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5865ba4cdf95d87cc2fb7f7da7f5e3879b72e1ed83027dd757680b710b79604"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeQuery.convertToQuery (cognitive 17): RangeQuery.convertToQuery has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 7 (13 pts), if/else 4 (nesting depth added 6). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"b81749070e4ec46e6ff1b05aca22fff80e28cbe82ca6ca2e4af80ad43ef483fc"}},{"ruleId":"D2","level":"warning","message":{"text":"RangeQuery.convertToKey (cognitive 17): RangeQuery.convertToKey has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 7 (13 pts), if/else 4 (nesting depth added 6). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"08f46d21fe2c14167348601080196c64e65df15eabf523ca7fd688110772d589"}},{"ruleId":"D2","level":"warning","message":{"text":"MatchTable.getMatchTableForClassMetas (cognitive 17): MatchTable.getMatchTableForClassMetas has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (15 pts), 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/temporalSurface/MatchTable.scala"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b932ec7cc40b538ac39c20887d094f9e041c3f7b7af8b9dbb997e2104a5ad09"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcurrentMultiSet.remove (cognitive 17): ConcurrentMultiSet.remove has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 1 (nesting depth added 6). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/temporalSurface/cache/ConcurrentMultiSet.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"29b3ff88207bf74a9eaf07434875dd401b8b43f2ea71757e7e4531934eec57ea"}},{"ruleId":"D2","level":"warning","message":{"text":"CmdLineTokenizer.transition (cognitive 17): CmdLineTokenizer.transition has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 4 (7 pts) (nesting depth added 7). 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/util/CmdLineTokenizer.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"6794bc3f1321081d3d54571df707fc160da20562ecffb6bcb2e6bfd9973a65f9"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcurrencyTracing.groupGraphEntryPoints (cognitive 17): ConcurrencyTracing.groupGraphEntryPoints has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (12 pts), loops 3 (5 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/recipes/concurrency/ConcurrencyTracing.scala"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1a80ece38d8b030e6e0d5b2d2329230abf83f87a05778332ce87ed9b665f6fb"}},{"ruleId":"D2","level":"warning","message":{"text":"Visitor.executeNode (cognitive 17): Visitor.executeNode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (14 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/recipes/concurrency/ConcurrencyTracing.scala"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"da409944d6eb83a64004350758afdf3b2b5b7d143d5e9d1491d734ba262a081b"}},{"ruleId":"D2","level":"warning","message":{"text":"HotspotsTable.initPopupMenu (cognitive 17): HotspotsTable.initPopupMenu has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 5, loops 2 (3 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/HotspotsTable.scala"},"region":{"startLine":794}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ee7bd056654246ad81b5d2b327a7e83fa36b85e3e697d5f22855241a0fca1d7"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeTimeLine.drawThreadHorizontalLines (cognitive 17): NodeTimeLine.drawThreadHorizontalLines has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (4 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c92450be131326a9bbccda9bd56b9e0210d4c2354a17bc963501776300a2e8e"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueTreeTable.fieldExpander (cognitive 17): ValueTreeTable.fieldExpander has cognitive complexity 17 (threshold 15). Drivers by points: error handling 1 (4 pts), if/else 2 (4 pts), match/switch 1 (4 pts), loops 2 (3 pts), 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/ValueTreeTable.scala"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e3f3ca99e6db4a3afb9f3030ac60fea91dceee0291f262092bc3b23455ad84"}},{"ruleId":"D2","level":"warning","message":{"text":"PostMacroRewriter.handleMemberRef (cognitive 17): PostMacroRewriter.handleMemberRef has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (8 pts), match/switch 4 (7 pts), boolean chains 2 (nesting depth added 4). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/PostMacroRewriter.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"d69e398b402c26f8f34081236ae67aea9f78310e78752745ab331153242ac1c2"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderByRewriter.handleSelect (cognitive 17): OrderByRewriter.handleSelect has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (11 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/OrderByRewriter.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"be7ebefb579614f0d0c4eeed635a27ff6c70e318367d4c26673c0a56b2a2183d"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionElementHelper.modulo (cognitive 17): ExpressionElementHelper.modulo has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, if/else 8. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.minus, ExpressionElementHelper.mul, ExpressionElementHelper.plus) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"f54b72f7febc556d71af19e25a882ae2bc80b2bbbe7d97489182cb372bb3bde3"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionElementHelper.minus (cognitive 17): ExpressionElementHelper.minus has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, if/else 8. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.modulo, ExpressionElementHelper.mul, ExpressionElementHelper.plus) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a68e83fc320162e8389b98d7a70321ca5e6004ba419b093aff12f8c32a23cbc"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionElementHelper.mul (cognitive 17): ExpressionElementHelper.mul has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, if/else 8. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.modulo, ExpressionElementHelper.minus, ExpressionElementHelper.plus) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"14b2bf212e7fa7ca0ad0c8f93322f7d6ded1965c0f5a05eced96bd3bed8b7b62"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionElementHelper.plus (cognitive 17): ExpressionElementHelper.plus has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, if/else 8. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators. This shape REPEATS in the file: 3 other methods here (ExpressionElementHelper.modulo, ExpressionElementHelper.minus, ExpressionElementHelper.mul) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/ExpressionElementHelper.scala"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3108b7beea3dcb00e23889d465651a879e796594999760ea759356049b9bb30"}},{"ruleId":"D2","level":"warning","message":{"text":"RelTreeDecoder.decodeMemberRef (cognitive 17): RelTreeDecoder.decodeMemberRef has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (17 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/RelTreeDecoder.scala"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"c44bc57c3c8e9138b31f5434f32ebb2fa079b62e4e4c4edbf33a25cd2f2429b3"}},{"ruleId":"D2","level":"warning","message":{"text":"ImportShadow.transform (cognitive 17): ImportShadow.transform has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 4, match/switch 2 (4 pts) (nesting depth added 6). 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e0640fce89f0bf50434ce227cddd8daad9e7b615450e3270d42529d450a0db2"}},{"ruleId":"D2","level":"warning","message":{"text":"GCMemoryPoolSizes.fromMap (cognitive 17): GCMemoryPoolSizes.fromMap has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13 (16 pts), 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":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/monitoring/gc/GCMemoryPoolSizes.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f844ba62ffe29277243910c71b78b14d40c8f58bba32cd34f62c1c3e09ef21"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.parse (cognitive 17): Parser.parse has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (14 pts), 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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Parser.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"276a282997097bba3e181117b6b643f2965f5dea0fb5d79e51cf6171c91ec944"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncKeyedOperationImpl.checkForCompletion (cognitive 17): AsyncKeyedOperationImpl.checkForCompletion has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 1 (2 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncKeyedOperationImpl.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"cac08ab441588746e6997906380c7b67963ec4f49b97a5df6ecae61749918c2b"}},{"ruleId":"D2","level":"warning","message":{"text":"DHTClient.openSession (cognitive 17): DHTClient.openSession has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (11 pts), error handling 4 (6 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/DHTClient.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"97270da700dbac1c8c6cf4e58a5f301c7499f9becacda09c620735814c1cdddf"}},{"ruleId":"D2","level":"warning","message":{"text":"RingIntegrityCheck.main (cognitive 17): RingIntegrityCheck.main has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f78650be0e2940a7b5f0f5c903c91d4277f6b0bb943ace4188966f45c274ad"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelSSHBase.sshCmd (cognitive 17): ParallelSSHBase.sshCmd has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 2 (4 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/pssh/ParallelSSHBase.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86a4ea6ea62edb52aca9330266815a8af6004c06a2b43a57c1a1cc79487d5ee"}},{"ruleId":"D2","level":"warning","message":{"text":"MavenPomInstaller.pomDescriptor (cognitive 16): MavenPomInstaller.pomDescriptor has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/installer/component/MavenPomInstaller.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"924cbbff02be2956a5aa99cb6643ce96ffb71863bcf07d6257ac4d8d39a9a4b8"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractImageBuilder.analyzeDependencies (cognitive 16): AbstractImageBuilder.analyzeDependencies has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (11 pts), match/switch 3 (4 pts), 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, 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"374d96332d2e59ee7f9b6248bc43da0c4f15f387d9a4812eba34e3e4edc87de3"}},{"ruleId":"D2","level":"warning","message":{"text":"MavenUtils.downloadUrl (cognitive 16): MavenUtils.downloadUrl has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (8 pts), match/switch 3 (7 pts), boolean chains 1 (nesting depth added 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/MavenUtils.scala"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce70ce90327517950e0fd6605716a4567657a2189bc38006d31f2363bf9b2893"}},{"ruleId":"D2","level":"warning","message":{"text":"CountingTrace.logStatus (cognitive 16): CountingTrace.logStatus has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 2 (3 pts), 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/trace/CountingTrace.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"690bf08aab8a5c132af590d1b2d0f8bc12b8be455887a63eccc763bdb6e46bcb"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryThrottle.throttleIfLowMem$NF (cognitive 16): MemoryThrottle.throttleIfLowMem$NF has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 2, loops 1 (2 pts) (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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/trace/MemoryThrottle.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"23540d31fe829382c02cf181ad21a798869a2d26ad2c06882ae43a9b0246aec5"}},{"ruleId":"D2","level":"warning","message":{"text":"Hashing._hashFileInputStream (cognitive 16): Hashing._hashFileInputStream has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (14 pts), error handling 1 (2 pts) (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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/utils/Hashing.scala"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"a866952fa800e188c2b64ed31a2d8c60d4503c408443018647ab49afe172b4c0"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusSeq.tabulate (cognitive 16): OptimusSeq.tabulate has cognitive complexity 16 (threshold 15). Drivers by points: loops 3 (10 pts), if/else 4 (5 pts), 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"4604e1244521589d998ff1af202904831084f049667a3ac9cf07e9e74e4df7e8"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraysSeq.equals (cognitive 16): OptimusArraysSeq.equals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (7 pts), boolean chains 5, loops 2 (3 pts), match/switch 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"25a649b47ce5f5d36f368cf0209ccfd685ce75413a5d1360268c8b6c2524b810"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusSeq.tabulate (cognitive 16): OptimusSeq.tabulate has cognitive complexity 16 (threshold 15). Drivers by points: loops 3 (10 pts), if/else 4 (5 pts), 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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"d172a20c36eb1bdcda64074576bfabb866712e105e18d753cfb90c7da9cf6be4"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusArraysSeq.equals (cognitive 16): OptimusArraysSeq.equals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (7 pts), boolean chains 5, loops 2 (3 pts), match/switch 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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"42495bf5cbc235589309c890fa26768d2a9c284bc87294144e13b9f905a7a328"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeCacheConfigs.remapTwkIds (cognitive 16): NodeCacheConfigs.remapTwkIds has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (nesting depth added 6). 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":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aab5034b1355b686e908977137bd94e71ff9263ae1186ee1c5b66fdcbe77b41"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordedTweakables.writeHtml (cognitive 16): RecordedTweakables.writeHtml has cognitive complexity 16 (threshold 15). Drivers by points: loops 3 (9 pts), if/else 4 (7 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/RecordingScenario.scala"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"971e406e2da2b2809fa727d4105222a32f4cf86c51fcb47362093b57c3db45da"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordingTweakableListener.onTweakableNodeUsedBy (cognitive 16): RecordingTweakableListener.onTweakableNodeUsedBy has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/RecordingScenario.scala"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c06d39f06b769bb092b042151706afbd25882d7e74adb04b7d7680d72407e7"}},{"ruleId":"D2","level":"warning","message":{"text":"CollectionAggregatorNode.initializeLoopReporting (cognitive 16): CollectionAggregatorNode.initializeLoopReporting has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 1 (2 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/SequenceNode.scala"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"69d87ef24325303d4e87d46bbba94c8e6706b7efa7f6ccae1a32465190ff9cb0"}},{"ruleId":"D2","level":"warning","message":{"text":"TweakableListener.checkAndSetParent (cognitive 16): TweakableListener.checkAndSetParent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (11 pts), loops 2 (4 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/TweakableListener.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f15ff8ad1272887a0d88715c8d821934fbe8f3fa610a3aeb7f08d960398170f"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultStallDetector.detectStalls (cognitive 16): DefaultStallDetector.detectStalls has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (14 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/StallDetector.scala"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a0c376a7c11db3ca7cd0855b6e07698e74eb6f911382b6bc61f6e30a88f664d"}},{"ruleId":"D2","level":"warning","message":{"text":"GridProfiler.statistics (cognitive 16): GridProfiler.statistics has cognitive complexity 16 (threshold 15). Drivers by points: loops 3 (6 pts), if/else 2 (5 pts), match/switch 1 (5 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":866}}}],"partialFingerprints":{"codehealthFindingId/v1":"58282f23266d1582ea41088b99e3a3ca3b1b4b5ca9925675368e5a97a91ea178"}},{"ruleId":"D2","level":"warning","message":{"text":"GridProfilerData.pop (cognitive 16): GridProfilerData.pop has cognitive complexity 16 (threshold 15). Drivers by points: loops 3 (9 pts), if/else 3 (7 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59e3061501f8a264fd70335bef5aa1343a447758d4b3ee1f1f03ca373cce351"}},{"ruleId":"D2","level":"warning","message":{"text":"StackRecorder.recordAndAdjustTiming (cognitive 16): StackRecorder.recordAndAdjustTiming has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/sampling/StackRecorder.scala"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b0089465b655cb19dee36c25e9796d902745293d5adbf9f30b982a1d92a224e"}},{"ruleId":"D2","level":"warning","message":{"text":"DependencyTrackerQueue.scheduleAction (cognitive 16): DependencyTrackerQueue.scheduleAction has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), error handling 2 (4 pts) (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":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerQueue.scala"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b1c36fbc0899a675fb085ef159224c1d39c60382e0e09caea4865655d34cdf6"}},{"ruleId":"D2","level":"warning","message":{"text":"Scenario._topTweaksAreEqual (cognitive 16): Scenario._topTweaksAreEqual has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (10 pts), boolean chains 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8003d18920fdaf5c323a1b0099bb8fdb052a7ae61e72c69234707a0ab6b4dbc"}},{"ruleId":"D2","level":"warning","message":{"text":"ScenarioStack.getNode (cognitive 16): ScenarioStack.getNode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (14 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":1115}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca166815a11157307d1ab435777c5894ffee5cad2d547b3ef549461323eb911"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeDescriptor.getMethod (cognitive 16): TypeDescriptor.getMethod has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (11 pts), boolean chains 5 (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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeDescriptor.scala"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"42e0e4b2fa5411c7e9f20889f42a7547a7306ce55225508c851bd84defdbcfc8"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInfo.cast (cognitive 16): TypeInfo.cast has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (10 pts), 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f4b59e08736dbbde17f183042b5b8092063b498e70a97abe17387bc89c84005"}},{"ruleId":"D2","level":"warning","message":{"text":"MessagesProtoClient.onMessage (cognitive 16): MessagesProtoClient.onMessage has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 1 (4 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesProtoClient.scala"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d3744427e0e5d60876e3b6cd363556bd045e51d65e379045de5bf62a6427d8a"}},{"ruleId":"D2","level":"warning","message":{"text":"TemporalSurfaceCachedDataAccess.refineClassInfo (cognitive 16): TemporalSurfaceCachedDataAccess.refineClassInfo has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (15 pts), 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceCacheManagerImpl.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2bfd6e8f8fdd3dc461c083244a0d1c82f9762642189311f0b0bcf5d134b2c8c"}},{"ruleId":"D2","level":"warning","message":{"text":"EstablishSessionSerializer.deserialize (cognitive 16): EstablishSessionSerializer.deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, match/switch 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0034ae0c4cf6aa701290d8f26c3f4ad9a59575e12d85658656b8650921301cf"}},{"ruleId":"D2","level":"warning","message":{"text":"DSIQueryTemporalitySerialization.getTemporality (cognitive 16): DSIQueryTemporalitySerialization.getTemporality has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (13 pts), match/switch 1 (2 pts), 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, 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/TemporalitySerialization.scala"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4572f99b046bea37a40100723ed64d19e2312365a7143b59579a59887d55a0"}},{"ruleId":"D2","level":"warning","message":{"text":"AutomaticBrokerResolution.resolveSpecificDalInstance (cognitive 16): AutomaticBrokerResolution.resolveSpecificDalInstance has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (4 pts) (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":"optimus/platform/projects/dal_environment/src/main/scala/optimus/platform/dal/servicediscovery/AutomaticBrokerResolution.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"22927e40b891552c0c0b7e59d288128d3f975005b8c08772b5fb3d4367a71df0"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyGenerator.checkKey (cognitive 16): KeyGenerator.checkKey has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (14 pts), 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/entityplugin/pretyper/CompanionMethodsGenerator.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"6be89555b2a78780129c7d86a53ae7915b60c1ade1c8619ce3481db57aac8bbd"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncGraph.asyncCall (cognitive 16): AsyncGraph.asyncCall has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 3, match/switch 1 (3 pts) (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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca96384167318d804714aa23228a7f4307d5400241c823c0b2041c31602fd9d"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusConstructorsComponent.getOrComputeLoomLambdasWithCN (cognitive 16): OptimusConstructorsComponent.getOrComputeLoomLambdasWithCN has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (8 pts), loops 2 (6 pts), boolean chains 1, 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusConstructorsComponent.scala"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"92b73781eee7509c20b8d41465f77d5d51508dccf29b29030be22247f9b1ca0f"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimusRefchecks.checkInheritedVal (cognitive 16): OptimusRefchecks.checkInheritedVal has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 9, if/else 4 (7 pts) (nesting depth added 3). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b885934f72d8fd44892572b0f51a757d807f5c2a0be8fd45cb9172a2a1e6b4"}},{"ruleId":"D2","level":"warning","message":{"text":"SampledTimersExtractor.analyse (cognitive 16): SampledTimersExtractor.analyse has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (11 pts), loops 2 (4 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/SampledTimersExtractor.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"912a592db565d97294777b0d68b047e14a2c40fa7d9dc5b79cf3bf3435952c76"}},{"ruleId":"D2","level":"warning","message":{"text":"StackAnalysis.pruneLeaves (cognitive 16): StackAnalysis.pruneLeaves has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 2 (4 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1355}}}],"partialFingerprints":{"codehealthFindingId/v1":"a223677f2bba1ee4ac3f9e0511afdfbadb2ff78a1816a1f2d01874df8ae9dcb9"}},{"ruleId":"D2","level":"warning","message":{"text":"StackAnalysis.mergeAllocationsIntoLive (cognitive 16): StackAnalysis.mergeAllocationsIntoLive has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (14 pts), 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1429}}}],"partialFingerprints":{"codehealthFindingId/v1":"b52b1fdbd11a83eeb7b22bda4608ad0754cdc83f9a6dfc4d021f51d36d3b9630"}},{"ruleId":"D2","level":"warning","message":{"text":"CrumbRecordParser.unwrap (cognitive 16): CrumbRecordParser.unwrap has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (14 pts), if/else 2 (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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb1db9a67adf4377caf62b39e204000fda4eced1ffb3395213022df2d90ba76e"}},{"ruleId":"D2","level":"warning","message":{"text":"MetricsTable.init (cognitive 16): MetricsTable.init has cognitive complexity 16 (threshold 15). Drivers by points: loops 3 (6 pts), if/else 2 (5 pts), match/switch 1 (5 pts) (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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GridProfilerTable.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"6454797790a6031afb4ee5afd39f5d4b703a6fedf3cced7589a4be7a764448f9"}},{"ruleId":"D2","level":"warning","message":{"text":"TableColumnTime.parsedFilter (cognitive 16): TableColumnTime.parsedFilter has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 3, loops 1 (2 pts), 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. This shape REPEATS in the file: 2 other methods here (TableColumnCount.parsedFilter, TableColumnLong.parsedFilter) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0e9f6299def05f65f6e2c8109877a622e5b1d118d9a8fdab2a509ac46aca7cb"}},{"ruleId":"D2","level":"warning","message":{"text":"TableColumnCount.parsedFilter (cognitive 16): TableColumnCount.parsedFilter has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 3, loops 1 (2 pts), 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. This shape REPEATS in the file: 2 other methods here (TableColumnTime.parsedFilter, TableColumnLong.parsedFilter) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab23d2022865acf03c58f4b408303a1da6826e536b617670f60f2ca352ef611"}},{"ruleId":"D2","level":"warning","message":{"text":"TableColumnLong.parsedFilter (cognitive 16): TableColumnLong.parsedFilter has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 3, loops 1 (2 pts), 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. This shape REPEATS in the file: 2 other methods here (TableColumnTime.parsedFilter, TableColumnCount.parsedFilter) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"c00d91534162540ddeb27aa7a192298c7083ced88ee01df332cc6e592d26ab8e"}},{"ruleId":"D2","level":"warning","message":{"text":"NodeDiGraphWriter.hasPath (cognitive 16): NodeDiGraphWriter.hasPath has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/utils/NodeDiGraphWriter.scala"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"da96c2eeae39f4e78bf4451814aa5fdcd1f771b2ad71c67782c6d1d235a5cf7d"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalaBasedDynamicObjectFactory.apply (cognitive 16): ScalaBasedDynamicObjectFactory.apply has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 6 (15 pts), if/else 1 (nesting depth added 9). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/AbstractDynamicObject.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"75aa06093816aa0f5f2a5e26328d5fc7895d0919fd856f5ab2cf47dea4525be0"}},{"ruleId":"D2","level":"warning","message":{"text":"PostMacroRewriter.handleFuncCall (cognitive 16): PostMacroRewriter.handleFuncCall has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 5, boolean chains 1 (nesting depth added 5). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/PostMacroRewriter.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"d13df60692a2ed52b15fe6bf74ccf01e313860814dd95564a616f977dbcc0c18"}},{"ruleId":"D2","level":"warning","message":{"text":"QueryMacros.rewriteAnonClassDef (cognitive 16): QueryMacros.rewriteAnonClassDef has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 7, if/else 4 (5 pts), match/switch 2 (4 pts) (nesting depth added 3). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/QueryMacros.scala"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"1acf5f73cbc1a63d12f73bccad278a88f87856d5bfbf146aefc6c321665a2655"}},{"ruleId":"D2","level":"warning","message":{"text":"Typer.promote (cognitive 16): Typer.promote has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (15 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/Typer.scala"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c8aa5f16c8f606d0148dc71b28449a6daecb92032c40c868728bc84b9bdb292"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultBinder.bindTake (cognitive 16): DefaultBinder.bindTake has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (16 pts) (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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":1156}}}],"partialFingerprints":{"codehealthFindingId/v1":"31bd8409444be89c2e2bfa7f1a83e7c69a378a01a1c21ae3a0e48682277538c0"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiRelationElementRemover.handleAggregate (cognitive 16): MultiRelationElementRemover.handleAggregate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (9 pts), match/switch 3 (7 pts) (nesting depth added 6). 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/MultiRelationElementRemover.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"039c5389101d9ae2511e91b2aa906a3f52102430386a9eb3595dfcf83871a7f6"}},{"ruleId":"D2","level":"warning","message":{"text":"DictionaryProxy.proxyEquals (cognitive 16): DictionaryProxy.proxyEquals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (10 pts), loops 1 (4 pts), 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/DictionaryProxy.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"b24f7dd79360ba1358bdbc087df95ba18265b29ad0be1f3893ac4e837625693c"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMultiRelation.verifyInClauseExpression (cognitive 16): EntityMultiRelation.verifyInClauseExpression has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (8 pts), match/switch 4 (8 pts) (nesting depth added 6). 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a8529d5ae2f81328c16ca439088dcf0aafeeec430a4ce0d5d5defdcd00f4f0"}},{"ruleId":"D2","level":"warning","message":{"text":"PicklerSelector.getPickler (cognitive 16): PicklerSelector.getPickler has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 1, 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"87aaa59de64ba1ac0587b8ef239a061e35fc786397e2d54aa6a214e2e5d86fa0"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteArrayBasedParserInput.nextUtf8Char (cognitive 16): ByteArrayBasedParserInput.nextUtf8Char has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13 (16 pts) (nesting depth added 3). 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/JsonParser.scala"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"06322697e4a072735b53b0fcb6de6edd7a070a3a234c2f86452842d44005e9a4"}},{"ruleId":"D2","level":"warning","message":{"text":"MapValuesRewriter.transform (cognitive 16): MapValuesRewriter.transform has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 6). 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"d75259f7bd4d3429c3247cf69c76d42189fac851d28269eb52604c4270666ce6"}},{"ruleId":"D2","level":"warning","message":{"text":"ProcedureSyntax.transform (cognitive 16): ProcedureSyntax.transform has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (nesting depth added 6). 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8fd76a3544c3c75a13aea76dcff82974446139c891d2cbb3030eeb06ab6acca"}},{"ruleId":"D2","level":"warning","message":{"text":"SparseUtils.sparseOpen (cognitive 16): SparseUtils.sparseOpen has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (8 pts), match/switch 3 (7 pts), boolean chains 1 (nesting depth added 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":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/sparse/SparseUtils.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"aedd863606f9323caa8aec51f310c5707d090bee7e7730524070fd1a77f55cc0"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicDependencyDiscoveryMethodVisitor.visitMethodInsn (cognitive 16): DynamicDependencyDiscoveryMethodVisitor.visitMethodInsn has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 3 (7 pts) (nesting depth added 9). 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":"optimus/platform/projects/entityagent/src/main/java/optimus/deps/DynamicDependencyDiscoveryMethodVisitor.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"41a75d483b450f58f3972689795150efd40b7c88068daa0cf075af0f7b8d3cb9"}},{"ruleId":"D2","level":"warning","message":{"text":"Parser.handleOp (cognitive 16): Parser.handleOp has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (9 pts), boolean chains 5, loops 1 (2 pts) (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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Parser.java"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef37e30548e85838522c19e53eebeb21b962f7d40d7c548523ee2b9a37d58abb"}},{"ruleId":"D2","level":"warning","message":{"text":"SystemExitGetOsInfo.isAllowedExit (cognitive 16): SystemExitGetOsInfo.isAllowedExit has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 3 (6 pts) (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":"optimus/platform/projects/entityagent/src/main/java/optimus/systemexit/SystemExitGetOsInfo.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc5c436ee6c3e3e630464c55eb0484348817a12ffb40d0faeee5400e395641ad"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncDispatcherBasePatch.emitQueueFullWarning (cognitive 16): AsyncDispatcherBasePatch.emitQueueFullWarning has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (8 pts), ternaries 3 (7 pts), 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":"optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b7b0ddc38f0fc7ac686355da6237c28d1b6119e6cc5847b2c132c634b8ded9"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncDispatcherBasePatch.write (cognitive 16): AsyncDispatcherBasePatch.write has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (13 pts), loops 1 (3 pts) (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":"optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"3123f6d4eaf13ee8cc460147e5fc9db642a72cf65fc2a84bef5339ad41744d38"}},{"ruleId":"D2","level":"warning","message":{"text":"ActivePutListeners.currentPutSet (cognitive 16): ActivePutListeners.currentPutSet has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 3 (7 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActivePutListeners.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"66235ec3ee7483079effa92ff0ceda9977a5da8e7d7fe2b9920710101bc8d5f0"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPutOperationImpl.debugTimeout (cognitive 16): AsyncPutOperationImpl.debugTimeout has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 3 (4 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncPutOperationImpl.java"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"d37e9dcc9a16d60af24d777d66584504aca8cce2bbe2936716485efb3345f59d"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageFormat.writeToBuf (cognitive 16): StorageFormat.writeToBuf has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (15 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/StorageFormat.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"e42552c69646134bcd7e402d9d7e98e70acdab4cdd672ca5f06d21b432557bd7"}},{"ruleId":"D2","level":"warning","message":{"text":"PutOptions.equals (cognitive 16): PutOptions.equals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (15 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/PutOptions.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"b13be1238424799863aaabcc1fb6776851d4ade1586f4f73447bd020d3070787"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjectDefParser2.parseFromObjDefFormat (cognitive 16): ObjectDefParser2.parseFromObjDefFormat has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (12 pts), error handling 1 (3 pts), 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ObjectDefParser2.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fcad75e11e805b13ae30b0c437e13081556383c982d1ce44e3b0ebe253dce08"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupingPausingBaseWorker.addWorkForGrouping (cognitive 16): GroupingPausingBaseWorker.addWorkForGrouping has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (16 pts) (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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/GroupingPausingBaseWorker.java"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfe4607f406711debe3957b913876107462043964c8017eed9181ff34ae1904c"}},{"ruleId":"D2","level":"warning","message":{"text":"gridprofiler.layoutRow (cognitive 16): gridprofiler.layoutRow has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), ternaries 2 (6 pts), 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":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"83bbd2c9ec7e11ba7c0f005c5d51acd593838043ebc1312fd48bdb49f85588e3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tracer: TooManyMethods \u2014 176 methods. The bar is 30 methods; this is 146 over it, 5.87\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/trace/Tracer.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d4f00a13c4c919619b30e665420c5988b59f336f5b8dbae72ca7b85e80573f6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AdvancedUtils: TooManyMethods \u2014 136 methods. The bar is 30 methods; this is 106 over it, 4.53\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"d25d83c6f8fef96003d64b34843b1a8e42fff24de33ee2317d869317fb1d1292"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GridProfiler: TooManyMethods \u2014 112 methods. The bar is 30 methods; this is 82 over it, 3.73\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f91769fe681cb73bcf40a46d2775185d815a47599574d79f11fa8815b0642706"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: bitemporal/Command.scala: FileTooLong \u2014 1852 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1352 over it, 3.70\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae3acad5967e78877d9663bd93a9076b80bbbf128d76dc4eaaa9e42f1c3017f4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: relational/RelationColumnType.scala: FileTooLong \u2014 1694 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1194 over it, 3.39\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b57d447b8e7b758b2e9b3a302dc1e8dee3733a4f67a2c03a6b1f75600887df9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: json/ProductFormatsInstances.scala: FileTooLong \u2014 1615 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1115 over it, 3.23\u00D7 the bar. 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ef42762ad6a16ec843b3d12c542e6fbbbf7f77c735959b4787012769a06bef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TypedUtils: TooManyMethods \u2014 96 methods. The bar is 30 methods; this is 66 over it, 3.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fcfebfb90b45be006038108e2d9f19d8004823fa2b49e1f326f461e075b7735"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncBase: TooManyMethods \u2014 94 methods. The bar is 30 methods; this is 64 over it, 3.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Async.scala"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"9527974bdf16c9dad7dcd5676c2efaffad16483b686ce79ca1eb0a6d6acc0c86"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: proto/GetCommandProtoSerialization.scala: FileTooLong \u2014 1479 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 979 over it, 2.96\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dd792c7a51ffa8c0878f5b092690a282a409f7073ff3cfaf532107266ab0fa0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: platform/NodeFunction.scala: FileTooLong \u2014 1464 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 964 over it, 2.93\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeFunction.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"736fb1f3f96f78a2569519cb3d2b82ec5361ab29ebc6bd497983c2da0012dcc4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: entity/AutoAsyncComponent.scala: FileTooLong \u2014 1402 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 902 over it, 2.80\u00D7 the bar. 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"315c4fcc97e4073a1eaec099d3c0332be14f6302e537dc6433cd88cfd3e0918b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CoreAPI: TooManyMethods \u2014 84 methods. The bar is 30 methods; this is 54 over it, 2.80\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/CoreAPI.scala"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"77362d164f9976b998442d09af08ec1baa479c8de5e8ea96e4d7c469e11f7372"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: NodeMenu.create: MethodTooLong \u2014 create runs 277 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 177 over it, 2.77\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeMenu.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"214d164e4f318cba0c9d12b4bc6caa9a7445e2f68fb4aafa59b6c2cd38e0b238"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UntypedUtils: TooManyMethods \u2014 82 methods. The bar is 30 methods; this is 52 over it, 2.73\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/UntypedUtils.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"adfa30398fdaf40149c935787b51298e7476849e10e7a623b1734a5e88e025e6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AdjustASTComponent: ClassTooLong \u2014 1087 significant lines (blank, comment-only and punctuation-only lines excluded), 1 methods. The bar is 400 significant lines; this is 687 over it, 2.72\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f0698b398a262bee9eb605618b230685a8da3c178bab3a0846df0836f12511"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EntityResolverReadImpl: TooManyMethods \u2014 78 methods. The bar is 30 methods; this is 48 over it, 2.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverReadImpl.scala"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c5b977345111f85921bbf00de8fbc32dfe273946cbb3cc54f854bb31133b6d9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OptimusBuildToolImpl: TooManyMethods \u2014 72 methods. The bar is 30 methods; this is 42 over it, 2.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolImpl.scala"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"54d02b600652e404646208a1c8b125d0a282b8685b3651ff94bdae7d1c2b77f4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: entity/AdjustASTComponent.scala: FileTooLong \u2014 1119 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: AdjustASTComponent (52-1637). The bar is 500 significant lines; this is 619 over it, 2.24\u00D7 the bar. 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca90ac86c4d02c4934dc0d01197cf0ea797cf6ab11948182d16f3e426f87b0a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RewriteComponent: ClassTooLong \u2014 893 significant lines (blank, comment-only and punctuation-only lines excluded), 1 methods. The bar is 400 significant lines; this is 493 over it, 2.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"a05901c988173ca59c1655baa923524e238f8b09d49d84d3871dd4fa4e9dd1c6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ap/StackAnalysis.scala: FileTooLong \u2014 1115 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 615 over it, 2.23\u00D7 the bar. 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe78f041be9e650631a5dcc6c5692a0b21d29876517953a873b17d3fe988a554"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: crumbs/Properties.scala: FileTooLong \u2014 1111 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 611 over it, 2.22\u00D7 the bar. 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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/crumbs/Properties.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c108ec433b86661842816ed03af505dfde549a4a133610bb5eaef510dbe3e78d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SilverKingZooKeeperClient: TooManyMethods \u2014 66 methods. The bar is 30 methods; this is 36 over it, 2.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/zookeeper/SilverKingZooKeeperClient.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"da1d887cbe7b5cd167c996472a4c43aa7df49b18b9ef7d1c047c7fa78b6a658b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: format/ScopeDefinitionCompiler.scala: FileTooLong \u2014 1088 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: ScopeDefinitionCompiler (73-1389). The bar is 500 significant lines; this is 588 over it, 2.18\u00D7 the bar. 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":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7f748bce979079bba274882612293c1a77b2b48323a7c2cb250aa2daf548c6c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: translation/DefaultBinder.scala: FileTooLong \u2014 1074 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DefaultBinder (39-1355). The bar is 500 significant lines; this is 574 over it, 2.15\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a6b58960d731879cae8a4d0e4e430342bdd9b7dad4f67233f4d0dad7de1f009"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultQueryProvider: TooManyMethods \u2014 64 methods. The bar is 30 methods; this is 34 over it, 2.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5df66feb1ddded4d0123ea22b0ff7ed73ce4cf27a9835ca87a2776eaf397adc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: toporing/TopologyRingCreator.java: FileTooLong \u2014 1032 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 532 over it, 2.06\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f95f441285e012fe125b542a7d545e176967c5d4f48f1ccf5abd9c150b593451"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: artifacts/Artifacts.scala: FileTooLong \u2014 1029 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 529 over it, 2.06\u00D7 the bar. 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/artifacts/Artifacts.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1730f9d350e73aa9c6171e3b659fba297f60fa9b70d246df4c378944ef86d78"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AppStats: TooManyMethods \u2014 61 methods. The bar is 30 methods; this is 31 over it, 2.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce1603f4c8d813a2e002c839435c7daa70e0de13a209c4ecfb3677878e06fd71"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: trace/Tracer.scala: FileTooLong \u2014 1013 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 513 over it, 2.03\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/trace/Tracer.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57d043b4ba5ea0c96afd5b678b5d3be0043103496d37d04d345e18869384bb23"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dal/EntityResolverReadImpl.scala: FileTooLong \u2014 974 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 474 over it, 1.95\u00D7 the bar. 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverReadImpl.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"901561d197c6da2c3d5777a14c66da8741f85ac8b0e03a31f0e4224d3b8fd624"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: app/OptimusBuildToolImpl.scala: FileTooLong \u2014 966 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 466 over it, 1.93\u00D7 the bar. 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolImpl.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d3e0ba2b126d7f3938a7c4838f6fe456a48ec95eb6219d45f97c5017b71cb3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: platform/AdvancedUtils.scala: FileTooLong \u2014 945 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 445 over it, 1.89\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea8253f621af0463aabb2a3e863c5908f47f347b26a29c7f1a0c2a53a9405e4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: gridprofiler/GridProfiler.scala: FileTooLong \u2014 936 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 436 over it, 1.87\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60503939fe30bcb0756ed5688beeef915d13614d47bba25faff0af520195da77"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PluginUtils: TooManyMethods \u2014 56 methods. The bar is 30 methods; this is 26 over it, 1.87\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/PluginUtils.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ed8026f64aa98dace313cd368ff3a1972e7b426f438da0128cea8db6bba4992"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NPTable: TooManyMethods \u2014 55 methods. The bar is 30 methods; this is 25 over it, 1.83\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NPTable.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"bced6494b10cc78e47979482c8273d310dd1ebd7f7eeea3986bd9822eecd2040"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: entity/TypedUtils.scala: FileTooLong \u2014 914 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 414 over it, 1.83\u00D7 the bar. 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"506694e7fb58fb95ac496c7fb5e9beb234f3dd39fe7ef0563fdacc5b1cbc39e6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rewrite/RewriteComponent.scala: FileTooLong \u2014 908 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: RewriteComponent (33-1255). The bar is 500 significant lines; this is 408 over it, 1.82\u00D7 the bar. 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a86e910b7c106d431a1e73af852cc513a980d859133de3bbca1070f39abfebc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: relational/DefaultQueryProvider.scala: FileTooLong \u2014 885 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 385 over it, 1.77\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc44a9ba523e54122967e772adbf60e6a186b05f14d5ebfb9f2127f8f1b6cf97"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EvaluationContext: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/EvaluationContext.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d992e4157cb7f9c2d144960790b9fe4693a5cdaa000159a25546e08cbfc7aa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RingRegion: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"6171b10151e5ab85a40c19cbb2ec46256b93e46511ccc096a2657ca53d61294b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Utils: TooManyMethods \u2014 52 methods. The bar is 30 methods; this is 22 over it, 1.73\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/Utils.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef1d73124168fb2bef645434d5b8272a2b0f5714ec268ed8f035486111ce9632"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerUI: TooManyMethods \u2014 52 methods. The bar is 30 methods; this is 22 over it, 1.73\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/DebuggerUI.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c13cc9fb80ee59a43b4e6e4486bc4c2455304a082252a8b4a5e55e139620463"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BigDecimal: TooManyMethods \u2014 52 methods. The bar is 30 methods; this is 22 over it, 1.73\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.13/scala/math/BigDecimal.scala"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa9824e05f9a920975508faa79601852ee89b7f03100cff5fba2d02316d826c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Utils: TooManyMethods \u2014 51 methods. The bar is 30 methods; this is 21 over it, 1.70\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"762bda73177a3459533c98e1afc881c5682958d111100d4e6ad80f21fd43050a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DHTRingManager: ClassTooLong \u2014 677 significant lines (blank, comment-only and punctuation-only lines excluded), 40 methods. The bar is 400 significant lines; this is 277 over it, 1.69\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"624725bb74dbda85ca23a6105b82e9144476f371122d8a97c0002b2c201f74c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: compile/Compiler.scala: FileTooLong \u2014 846 significant lines (blank, comment-only and punctuation-only lines excluded), about 83% of them inside a single declaration: Compiler (175-1132). The bar is 500 significant lines; this is 346 over it, 1.69\u00D7 the bar. 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":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"633cb2b5d503719ae7375f9df0d0c5e1a0c24247a78b2ac22240d390deef3895"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: OptimusBuildToolImpl.trackingBuilder: MethodTooLong \u2014 trackingBuilder runs 169 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 69 over it, 1.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolImpl.scala"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"d878d3645d264df641cc2dad3afabe9f852fa0e5152e5e2837f58179363ee903"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: graph/PluginSupport.scala: FileTooLong \u2014 843 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 343 over it, 1.69\u00D7 the bar. 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":"optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9db99b960e44419e0d6e34bd5df060555d8eb544a67e3444edc54d70f27788f3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: config/NodeCacheConfigs.scala: FileTooLong \u2014 842 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 342 over it, 1.68\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e68dc06ee857f8e04920a09a071ee04ea9451d984a4177d35acb387791b2ec1e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: breadcrumbs/Breadcrumbs.scala: FileTooLong \u2014 841 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 341 over it, 1.68\u00D7 the bar. 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":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f245da2f28bdcc9c77ac72c7a11458b4130ea524516c447e0259f504de8e332"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InstrumentationConfig: TooManyMethods \u2014 50 methods. The bar is 30 methods; this is 20 over it, 1.67\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationConfig.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf68739747d081ad8a0efe7ea9a01de62349946c29269e00d0ef0197fed45b0d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DefaultKVClient: ClassTooLong \u2014 665 significant lines (blank, comment-only and punctuation-only lines excluded), 20 methods. The bar is 400 significant lines; this is 265 over it, 1.66\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"45b2b55e54803d11e92d9569f6a97700a9c607c38f1499532fe04a5928af8f2e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: trace/TraceEvent.scala: FileTooLong \u2014 831 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 331 over it, 1.66\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/trace/TraceEvent.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2af38489b6e27e00e115f95d611d112c10b6a4d21a6ca65f5e5e810aa8d498f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: asm/LambdaCompiler.scala: FileTooLong \u2014 828 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: LambdaCompiler (28-1019). The bar is 500 significant lines; this is 328 over it, 1.66\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f90623e64bc1da4d1607e64a84c49572aa8dd6e48e4ddd2ce757f63d1e062d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RingEntry: TooManyMethods \u2014 49 methods. The bar is 30 methods; this is 19 over it, 1.63\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingEntry.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7797fe2be7844ab9cd8232bdca7f9bfef8e4fbeb00bf1e14ca05192d6785596"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ui/HotspotsTable.scala: FileTooLong \u2014 813 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 313 over it, 1.63\u00D7 the bar. 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/HotspotsTable.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3f4734b437f22def16158859d36b4242dea3c74ce817b3d75c57a5aeb5e641"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: platform/ScenarioStack.scala: FileTooLong \u2014 807 significant lines (blank, comment-only and punctuation-only lines excluded), about 79% of them inside a single declaration: _parent (150-1348). The bar is 500 significant lines; this is 307 over it, 1.61\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e92b5b0a5c1f357dff6ad6194a754bb78fecce7a2a8380c9f14ec90fc12cb651"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InstrumentationCmds: TooManyMethods \u2014 48 methods. The bar is 30 methods; this is 18 over it, 1.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationCmds.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f061f988e0d8f0f908e1195b9921aa5d9b0824f9b41dd02973ca0f396a68a1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: resolvers/CoursierArtifactResolver.scala: FileTooLong \u2014 795 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 295 over it, 1.59\u00D7 the bar. 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/CoursierArtifactResolver.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ede517c3fd2d909012d3a330297dc18146a21d03b71eb84b6d3966b4189d4f5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: reporter/OptimusAlarms.scala: FileTooLong \u2014 793 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 293 over it, 1.59\u00D7 the bar. 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":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c380240c95b12116e6298edc9111dba475fba3f6aec99d0b1545636ab088d879"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PersistentAsyncServer: ClassTooLong \u2014 631 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. The bar is 400 significant lines; this is 231 over it, 1.58\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4b5d4e43bdd630ed7ea51a990a0d9571a56ffee88308caa6953422f54349d72"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Breadcrumbs: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c6e62955563555bf9429be1df9b98696ac5c4040f51f56177e95f2a80e96b11"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NodeTimeLine: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"821e38dd45a6e6e9907ad62bdaef7316c397217e53e6d5c26bdeaa72771747a0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: QueryMacros: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/QueryMacros.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"75e6cce28bde5356ca3848710d085f3b43691801035d368b2c82e97d236c5891"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DHTSessionImpl: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/DHTSessionImpl.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bfd68657962ff21341aa65cf73f7ef709f15252834c30f615d2a22e5910caf8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ui/NodeTimeLine.scala: FileTooLong \u2014 776 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: NodeTimeLine (127-1085). The bar is 500 significant lines; this is 276 over it, 1.55\u00D7 the bar. 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLine.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a8d9ff1e83d28c429153a8be615219681960437b8d14f29a5efb1ce45e39ad"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: entity/OptimusRefchecks.scala: FileTooLong \u2014 768 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: OptimusRefchecksComponent (31-1092). The bar is 500 significant lines; this is 268 over it, 1.54\u00D7 the bar. 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26ea4f1c71c04af3b616d343b6a994a54bbd70793f718ca855b59d7ea6f91466"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PluginSupport: TooManyMethods \u2014 46 methods. The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4265f9e11a9b34bb76260bc37840f9d97be874b5dd8b122c9e41184c7cb821"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MetaDataUtil: TooManyMethods \u2014 46 methods. The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"66bb399a3e2ce185f7f264b9bc6a130aef1ebff45ed2567a26e4e0e76c9b9f7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: proto/CommandProtoSerialization.scala: FileTooLong \u2014 755 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 255 over it, 1.51\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/CommandProtoSerialization.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de3bf4be888cb1f94ccb835f716b9ec7c3ac1b952922907278379000e67cd63b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: entity/AsyncGraphComponent.scala: FileTooLong \u2014 755 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: AsyncGraphComponent (35-1144). The bar is 500 significant lines; this is 255 over it, 1.51\u00D7 the bar. 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"532a504698606e35e033d3520c1dd273b13c351482bbc4776b1f23607fecf5d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stats/AppStats.scala: FileTooLong \u2014 749 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 249 over it, 1.50\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19ee610523e0bcbeef5660559527bc7ee5fb392ba7c363141992b1401d4120ca"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: StratosphereConfig.\u003Cinit\u003E: MethodTooLong \u2014 \u003Cinit\u003E runs 149 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 49 over it, 1.49\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/bootstrap/src/main/java/optimus/stratosphere/bootstrap/config/StratosphereConfig.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c98efb6be693398eee452de4a501863eec338cccd648a7e2eaa30cbd0c1f10c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expressions/FunctionFormatter.scala: FileTooLong \u2014 741 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 241 over it, 1.48\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ff611cec83b4818bb4f59ebe3da2dff519c09353005b50242c61bcce992aae1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AsyncDispatcherBasePatch: ClassTooLong \u2014 589 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. The bar is 400 significant lines; this is 189 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"49cca71606c98b279c348dba06d19f3a02b17ecaee0510a1c09cf33ffbf137f4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ConfOps: TooManyMethods \u2014 44 methods. The bar is 30 methods; this is 14 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ConfigUtils.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"60e002abf45de6f8960b79b77774852967840b04a3c5056f1c8ce9baf3f9e64a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProductFormatsInstances: TooManyMethods \u2014 44 methods. The bar is 30 methods; this is 14 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbcd469654ad84536c30e78105929a32e590c51f0ea222414a064a0e9d5c2d7b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: management/DHTRingManager.java: FileTooLong \u2014 729 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: DHTRingManager (73-1049). The bar is 500 significant lines; this is 229 over it, 1.46\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f8f7138c8b6bfa81b0701a7e9786bc7793fcc9b46858233e524f47a9b9bca85"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RingTree.merge: MethodTooLong \u2014 merge runs 145 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 45 over it, 1.45\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e31bfb3b3d4ed809addbba33e633a1d1e3645d05ca31c5004a234699c54a46a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: kv/DefaultKVClient.java: FileTooLong \u2014 718 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: DefaultKVClient (69-995). The bar is 500 significant lines; this is 218 over it, 1.44\u00D7 the bar. 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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a76d62fa0eef395c2d71a6ea8a932e98d5985b428c6e57ab08c3ed144eb30fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: platform/Async.scala: FileTooLong \u2014 717 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 217 over it, 1.43\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/Async.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a3f9ca75b4e17c40c251e25fd8deda9c757c822de8cebb8dca3cef82402335"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actions/DSIActions.scala: FileTooLong \u2014 715 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 215 over it, 1.43\u00D7 the bar. 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"efec7de5358f9a3fe2b9bf3c554750f64e7d12db28e8c78da4a29cce238f9349"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tree/TypeInfo.scala: FileTooLong \u2014 709 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 209 over it, 1.42\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a7986aa813c666e9e12fb68a506ec68c0b528f99af0e9aa6319cbc62505cec5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HtmlBuilder: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/util/html/HtmlBuilder.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"97383d0b282d20a8be3792b750a3785e550572053d3949510cb0709d3f204a99"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CommonAdapter: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/CommonAdapter.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"84b9d3e97e2c5b5190abca0fbe75f6df3fd989caf478bba43148862ec763794f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StackNode: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"921f1e5578b30aeab2677d9de5fca85715909853ec64e323e297cbe4fe271ba7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IterableProvider: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca33098caece81c4f51da4ff1e9971c4e311e37899f842bd0c2802628ff88f6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NamespaceOptions: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/NamespaceOptions.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"d286547c01fa71834f8f230b88a489f11afd52ca766f08f29fd92c1db45c2832"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IPAndPort: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"474ea65e7937c401d12c6b9577bab2b54a0616e488383eef138e889ae56c0199"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: NodeTaskAdapter.visitMethod: MethodTooLong \u2014 visitMethod runs 140 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e02854a73f6410e366313ff55dba9197d6dd73a65c63724f4c9bc1995069c84"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: kafka/CrumbPlexer.scala: FileTooLong \u2014 696 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 196 over it, 1.39\u00D7 the bar. 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a27bc27449cdf177ecb80b8aff980efcdfacdc9ebe389b0913379e2e53621820"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: oci/ImageBuilder.scala: FileTooLong \u2014 690 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 190 over it, 1.38\u00D7 the bar. 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60a5e0024665653a80af688ed1c7eaee459a14bdd892bf3e9b9d0931b0ab6101"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClassMonitorInjector: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/ClassMonitorInjector.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5392cfa40fbdaee082278a288529712c565ef689ee17f07a145cf3f2f559fda"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncOperationImpl: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncOperationImpl.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8795cd2e060b109f91be3aceb91ecc4553da66bfd8771ba3b782a02f4b5032"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Connection: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/Connection.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c73b5291c66073b4d83a45762451d1a40b245768febb7731e944ee9c6050ca55"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NamespaceOptions: ClassTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded), 42 methods. The bar is 400 significant lines; this is 134 over it, 1.34\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/NamespaceOptions.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ce3436c6d42e028a4ac141e3f48e0e7eb4ed63ef65587e51d13ed1054124d0b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DHTRingManager: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ecb4d9d0a5e424bc1800d60e31ee3b8686b455cb61a94884d922f3828700bde"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Util: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/aws/Util.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"7985a27c645235cd505d6510a4e632241eb3ff380b9b772d0d873b2aab2a20c2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SpinningTransferQueue: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/SpinningTransferQueue.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"729f07822674ccf1daa36d9673ac4e1dd2c615ea02c3a2621cf9c76ecde7e439"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: platform/OptimusApp.scala: FileTooLong \u2014 661 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 161 over it, 1.32\u00D7 the bar. 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusApp.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6af5915a4d5e25b80de72d024591f13abbbe666dff34868153552e495a39dd04"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TPDMaskAdapter.visitMethod: MethodTooLong \u2014 visitMethod runs 132 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"af1abf1b9efd3060b965c15c033cc8322c0518503dc4c4d8ce50a7282686a58a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: app/OptimusBuildToolCmdLine.scala: FileTooLong \u2014 658 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 158 over it, 1.32\u00D7 the bar. 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolCmdLine.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"123e4feb493146b03a0d76abf2e41c65989deada1587ec4e74f91003a780a228"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: async/PersistentAsyncServer.java: FileTooLong \u2014 653 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: PersistentAsyncServer (38-936). The bar is 500 significant lines; this is 153 over it, 1.31\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3455c6f8e77fa6788f353bc14c48fa4d00b9b618807983a17edfa575ca6a8cf9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultBinder: TooManyMethods \u2014 39 methods. The bar is 30 methods; this is 9 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a56737e888c4bb9ca0a3e6042547dbc4c4fd08b0d93a8f5d628da05af2d6a0f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NumConversion: TooManyMethods \u2014 39 methods. The bar is 30 methods; this is 9 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/numeric/NumConversion.java"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db52476b435bf8c56a1a44068d4614a27f91dc49ac7942b3b017dca6e292b8a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BitbucketApiRestClient: TooManyMethods \u2014 39 methods. The bar is 30 methods; this is 9 over it, 1.30\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/bitbucket/BitbucketApiRestClient.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c7d808e8d35603a9e8f80e4514d677d6b99322cb4863844e3fd5a8694e6d64d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dal/EntityMultiRelation.scala: FileTooLong \u2014 650 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 150 over it, 1.30\u00D7 the bar. 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e3b592bf81ca9ec2af707e272b7888f83131b65f15eecf741a68e89bea8d65"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sampling/SamplingProfiler.scala: FileTooLong \u2014 646 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 146 over it, 1.29\u00D7 the bar. 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"293071e1014c483b3a1f61a225ee963f65ea661383cb5e6930b64f7c6dcd306c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DependencyWatcher.build: MethodTooLong \u2014 build runs 128 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 28 over it, 1.28\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c06a350fdad2dc640d447650a456b8dc07c7e55dd95de5cec7380995c04d7dd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: IncomingBufferedData.readFromChannel: MethodTooLong \u2014 readFromChannel runs 128 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 28 over it, 1.28\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"8582cc4f25de985291c5a7630550bdbd021c5258ec416048eb9b4220a3923d6f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: compilers/AsyncRunConfCompiler.scala: FileTooLong \u2014 639 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 139 over it, 1.28\u00D7 the bar. 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncRunConfCompiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d0d9c5e8a0d43af57f3ffed30b202f0b1a19b9f0b9aefbae23f9661343ee468"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Jars: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/Jars.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bafaec2df61c073e322c075fdbf3cb68eac38e45f95006e67e15bfea3dd12f8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Compiler: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca650695fa0047b830b5bc06ee482f2527e85f6d35b23c7b2c6fa754b16a1364"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncProfilerIntegration: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/AsyncProfilerIntegration.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"465c02169d804bde801d8ad5b6bfd269977a37a2f68099c67038cb6150ef7466"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: QueryMacros: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/QueryMacros.scala"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"20fe7813e215177e3197e6e557104631ee207db35b907dc21a2e33d0f1cf3a60"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BigDecimal: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.13/scala/math/BigDecimal.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2b8a95e2a29a2cd381250011e7ec83d93566407130c2024eb89c2c6ebaeee7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: profiler/RegressionsConfigApps.scala: FileTooLong \u2014 628 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 128 over it, 1.26\u00D7 the bar. 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/RegressionsConfigApps.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78a6c4f4cdc3d6c554f03810608d240f58a59db274ae024804b12770b28e879f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DaemonStateZK.waitForQuorumState: MethodTooLong \u2014 waitForQuorumState runs 125 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DaemonStateZK.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a92ef5f404cf548b07d4cdcfae625cd69c4a048ccc847339e57820f5726575"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RingRegion: ClassTooLong \u2014 497 significant lines (blank, comment-only and punctuation-only lines excluded), 53 methods. The bar is 400 significant lines; this is 97 over it, 1.24\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"63e4e15d44baceeebfd2b0bbf5d9ee0dbb7009a4b25bb46add2d9dd15f6ee8af"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: protobufutils/MessageContexts.scala: FileTooLong \u2014 620 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 120 over it, 1.24\u00D7 the bar. 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/MessageContexts.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31870dfc01d6df753d7b22b67fb710e6847a23c0f986a3f3eb1e7372e0a4cc11"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: internal/AsyncDispatcherBasePatch.java: FileTooLong \u2014 618 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: AsyncDispatcherBasePatch (48-997). The bar is 500 significant lines; this is 118 over it, 1.24\u00D7 the bar. 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":"optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aebe53166f69d1b7bec5450bdb712639ff3265ac2418e040f658e0b3f0f1e6f6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ElementFactory: TooManyMethods \u2014 37 methods. The bar is 30 methods; this is 7 over it, 1.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/ElementFactory.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"04ea0909c88f3b0a1a59c1d7264db2a98f499c4d8078928f3cd9a2ed047a5f0b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: InstrumentationConfig: ClassTooLong \u2014 487 significant lines (blank, comment-only and punctuation-only lines excluded), 50 methods. The bar is 400 significant lines; this is 87 over it, 1.22\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationConfig.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fe44ce7abff7aaeb0e1e4310e0fbf116fd4802df65980b4f39d15b2ee7ab4eb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: inmemory/IterableRewriter.scala: FileTooLong \u2014 608 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: IterableRewriter (31-809). The bar is 500 significant lines; this is 108 over it, 1.22\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"301fe6ec2ca142c5f5245f9d14381aa1ea3d96607ecdcd9a849cdaa7b05bbb9a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RetrievalOptions: ClassTooLong \u2014 486 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. The bar is 400 significant lines; this is 86 over it, 1.22\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/RetrievalOptions.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c89f0fc93661bd3b2b56ea66e525ceebb708209356f6318244ba3464281275c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RingTree: ClassTooLong \u2014 485 significant lines (blank, comment-only and punctuation-only lines excluded), 27 methods. The bar is 400 significant lines; this is 85 over it, 1.21\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"57aca9528d3e3f1d8e17a55452561993a6223c85eac735d0fb0d3423685c5b2d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CoursierArtifactResolver: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/CoursierArtifactResolver.scala"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3552183d8723624f6e139d58455dda30971f7c0644384907ca3e6e095dd979e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DHTClientBuilder: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/DHTClientBuilder.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed5f390177ae46f899acdf27f50d256c47cf1ca5949aa38e581d7a03373ae35a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AutoAsync: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"9090cf8852437088af55e38b070dfdefdb46de40e6af558773398b2e3f524a41"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PersistentAsyncServer: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ddaf0939ca73ec4e731f8ea113f50e478d0e0635f87e21e58ecd88d05f36e41"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PropertiesHelper: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/PropertiesHelper.java"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"e040b303f67e0b321299993578d4e6fe895c090cb06023e379a7cb88fb02b714"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ClassMonitorInjector: ClassTooLong \u2014 478 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods. The bar is 400 significant lines; this is 78 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/ClassMonitorInjector.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"4784c8cd3ebb7e3a19c1de4760e050d6a36665f677836e362f6a8dffd08a997f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SilverKingZooKeeperClient: ClassTooLong \u2014 474 significant lines (blank, comment-only and punctuation-only lines excluded), 66 methods. The bar is 400 significant lines; this is 74 over it, 1.19\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/zookeeper/SilverKingZooKeeperClient.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbbd4dec7ea44a9a1de42f19a2f5cf545537b081208289b5547f8bbfb66c8198"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dal/EntityEventView.scala: FileTooLong \u2014 590 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 90 over it, 1.18\u00D7 the bar. 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityEventView.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f07670a5b2da298caee7908d8dd4bfcce5170b0b978eeb6bf471f4e6f76eabc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ui/NodeProfiler.scala: FileTooLong \u2014 590 significant lines (blank, comment-only and punctuation-only lines excluded), about 83% of them inside a single declaration: NodeProfiler (144-819). The bar is 500 significant lines; this is 90 over it, 1.18\u00D7 the bar. 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63182723202527f8b7c6f63c00994e296ccbf809817aeff617f34ff9fed18ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: serialization/QueryBuilder.scala: FileTooLong \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 85 over it, 1.17\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/serialization/QueryBuilder.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6da1445688a945c6bc173d467974a5ca7fbe0b82c553771c061d7e4f8af59a25"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractImageBuilder: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"66af8cc1f688253e8f062ff19d1f2e0970c7d12e1658e6398e47daf42ac1ec83"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExpressionVisitor: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionVisitor.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7ce39486ee2428f4d2571d724c3d43eb97b9dc8a6cfd5945c4b34c72965c25c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DbQueryTreeVisitor: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/tree/DbQueryTreeVisitor.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"692d4e7a44f2dd82c9589594e6410232a8cc4a2513fab2a6cf5b87cb80135287"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RetrievalOptions: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/RetrievalOptions.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2b9ec7e3cc0c43373b84944db4243a8e0ff9e6c40c9b07babff40be9e2121c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StopwatchBasedTimer: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/time/StopwatchBasedTimer.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"47f67d53f5e84430ca2c7229c3220ae8b6f08b58a66b2045f0df593cc314ade9"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WaitOptions: ClassTooLong \u2014 462 significant lines (blank, comment-only and punctuation-only lines excluded), 29 methods. The bar is 400 significant lines; this is 62 over it, 1.16\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/WaitOptions.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4ba80fa6cae32a7519ed02f991a0cbe96d6b8b5092a11633047c41435ee2675"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dal/EntityResolverWriteImpl.scala: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 76 over it, 1.15\u00D7 the bar. 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverWriteImpl.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc73c154da5aa6d3221f93f17e38f67248a92e4c3e4a24e09c1539b4d55e88a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DHTSessionImpl: ClassTooLong \u2014 457 significant lines (blank, comment-only and punctuation-only lines excluded), 47 methods. The bar is 400 significant lines; this is 57 over it, 1.14\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/DHTSessionImpl.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"05e5f81b17ea3da43162926bcf033d97edd6ca20603771118a3846c340016df3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: relational/QueryMacros.scala: FileTooLong \u2014 571 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 71 over it, 1.14\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/QueryMacros.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc1f1493200f78236cdd65cf6be124b3a1739f5711591a84876b72d9d50842d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: configmetrics/ConfigMetrics.scala: FileTooLong \u2014 567 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 67 over it, 1.13\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0e0b07d02d611a3abed242eb82f878cbe88a4e157410d7c62e7d33c5b8bb677"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Scenario: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"81961111f302a1f6a51f40c0652542c1e320efa42e91f32c2783dc5ed82a7fd8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExpressionDecoder: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/proto/ExpressionDecoder.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02b57315977ff49a767483b6a81dbbcb5a1efc2bd78d72571b75e5674a57223"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AdjustAST: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"075cece237a0f8ff31c0557d19e3ef0e58d1f41f3c6787c4ae092ddd51d25073"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncDispatcherBasePatch: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d029bf2e29ede3795f6b461152274ea305b64b5fcfcfc35d7a77230f73ce90"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Query: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/Query.scala"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"995daf5d1b235718578a92a77d048b70e5a1c992d4a1c57bb37b52e30dfd9aab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SyncController: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/SyncController.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"55d2918bcca3df061162b3a60eea7c925a545845a5b76fdbb905b396c1462313"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PropertyInfoProvider: ClassTooLong \u2014 452 significant lines (blank, comment-only and punctuation-only lines excluded), 0 methods. The bar is 400 significant lines; this is 52 over it, 1.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/provider/PropertyInfoProvider.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"d78d98507c6dfdb92591179900333ce0f0687e6f2088c201d4b9ab7e769ea423"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: loom/LNodeFunction.scala: FileTooLong \u2014 562 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 62 over it, 1.12\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8334eee24a50e5b43d4f02b2d456a845130866447be2aca6fed6ebc773e5480"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DALRegisteredIndexBinder.handleFuncCall: MethodTooLong \u2014 handleFuncCall runs 112 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8387617d68e95dd703b1b15d140a484ed90ca56e8f9e7cc74b23814e4f54e318"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: config/TypeSafeOptions.scala: FileTooLong \u2014 556 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 56 over it, 1.11\u00D7 the bar. 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":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/config/TypeSafeOptions.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce173cf3b6f4ac1677c16bbc342c2129145d4311d53514bf58e6a9357d7515f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dal/RemoteDSIProxy.scala: FileTooLong \u2014 554 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 54 over it, 1.11\u00D7 the bar. 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/RemoteDSIProxy.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"515115f8ebbb6b74b7e55dcbadd2a56f5b7dd68ef78427b87d9d9677e35279ad"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Scheduler: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Scheduler.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"17d149b74a4c652eba617afa890cf0e87521b3feec1a45ad01449c4e7c32daa4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tweak: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"33debd1c01302d822514396b3f217bffb6b8ed9b0a2627e76463d169bcf8cb63"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LoomAdapter: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"949a77fea2175a8f5baf427280e0086d61c1d694205bb393aa35e66a9ca99ada"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Parser: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Parser.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"2757c7a44068cad7412522a7dbb75b422bdc0e79d7ce67dd10a45de734daff4e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NodeProfiler: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8e1921e2ef31689967a68ca8d78a7dd7a288e9475f923a1ce125f41c66066b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LegacyElementFactory: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyElementFactory.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"891e0b321977a0eaae4b0ef03ff670a65beb8e62efe4507ddf0283ce056dda37"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dht/NamespaceOptions.java: FileTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: NamespaceOptions (27-891). The bar is 500 significant lines; this is 43 over it, 1.09\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/NamespaceOptions.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc40ba265ec6ccb34552ba32af19d0e6c47077e2c8f8aba2c25197a5376e6245"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: profiler/CacheAnalysisTool.scala: FileTooLong \u2014 535 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 35 over it, 1.07\u00D7 the bar. 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/CacheAnalysisTool.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a80f03acdbbcc5c709b19e731105b7b037f7ab7b2e00ab1dece629449e7ef034"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScopeDefinitionCompiler: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa071f86dc48940ec236fd49d6e8ab60b418bde27c49825a9335defdc166a8ca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BitBucket: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/bitbucket-utils/src/main/scala/optimus/rest/bitbucket/BitBucket.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"aca89c32e41795a4a7ee4df0098f5f0c7efdc07152e41cd2d5abdab7e93170cc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EntityResolverWriteImpl: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverWriteImpl.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4e92403dbdfd65cb3e920e67c0bd0185158b54ca4411933c5959c6972c3a5db"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractPersistBlock: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"f89fd6982940ad289e0896bf05c2e929ec7017b45929a68641e3e64a58cf4147"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExpressionEncoder: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/proto/ExpressionEncoder.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"47cc140fc2829cffb41ca31429de01928237380e8343d7c8c8d043a19f21750b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IterableRewriter: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b323a24ec7eace19e7de5ff82375bf47db246bac522bb33e5d224c2afcb19e5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncRetrievalOperationImpl: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"73fca636e45cef4eec09b1349ce86fa759d8b2dddcc5e406f52402fa76d9b58c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClientNamespace: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ClientNamespace.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"496875d0a1a4f1a2d1816f0e0d8b9adfa1c5961087ff94e879501fe8c5bb6850"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RawRetrievalResult: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RawRetrievalResult.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"c37519d255ed07227a8ab742a27a5b8902ffe83c4e8271a115a2aed0a4b265df"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DHTConfiguration: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTConfiguration.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fb929f49e93c2b8c61bcbd3dd4cd3572d6586a1f96af3ec0eb8583c7acf332"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SingleRing: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/SingleRing.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"9483efae8d4cf4e4651fafa166e5b7931d4cc21194d3e37d34ddcf08af9f55a4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DefaultConnectionsManager: ClassTooLong \u2014 423 significant lines (blank, comment-only and punctuation-only lines excluded), 8 methods. The bar is 400 significant lines; this is 23 over it, 1.06\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/DefaultConnectionsManager.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a12813d03d3d8ef9c8fef75dac46e82c51bbefe2a7257abb1d91f37d5eb352"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ui/NodeTreeTable.scala: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 28 over it, 1.06\u00D7 the bar. 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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTreeTable.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49774130ce96e9e8063222c747af80d02b3032b62909f87cffcb9eb7d1ad6566"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tree/LegacyMethodElements.scala: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 28 over it, 1.06\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b04f6e7e9e626c5c8a5582684bb744275d2536c18f5ca6577d9e4754e5191976"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DHTClientBuilder: ClassTooLong \u2014 422 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. The bar is 400 significant lines; this is 22 over it, 1.06\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/DHTClientBuilder.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae479f59f1b852f17f92c7038d83175ec7aafc5a9ab487c58517c1c853ef3c39"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DiagnosticSettings: ClassTooLong \u2014 422 significant lines (blank, comment-only and punctuation-only lines excluded), 20 methods. The bar is 400 significant lines; this is 22 over it, 1.06\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/DiagnosticSettings.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"214e8a698f7e5fcf73ac5554907822b5d7b986a8b5ec49fa35a13687ad059d77"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: text/ClassParser.java: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 26 over it, 1.05\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"425dd7241c2516b79ebb994318c35462a005c8ea8bc7b04883885b5305e8c6ef"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: AbstractSegment.retrieve: MethodTooLong \u2014 retrieve runs 105 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/AbstractSegment.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"41ed1f50d8df42f655957de652a1e93707364711484c00c0e3b3dac5daa894fd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: relational/AbstractLambdaReifier.scala: FileTooLong \u2014 523 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 23 over it, 1.05\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f75092456363f1849419428c84eb64a1e0d4e4c59e3633ecc7474dbe27ca4d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: optimus/ClassMonitorInjector.java: FileTooLong \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: ClassMonitorInjector (87-827). The bar is 500 significant lines; this is 20 over it, 1.04\u00D7 the bar. 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":"optimus/platform/projects/entityagent/src/main/java/optimus/ClassMonitorInjector.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f15b5282e2b62f6a55d63a6cfc9ddb77baf18a7d969535983dd309ee0eddb8b7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: impl/DHTSessionImpl.java: FileTooLong \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: DHTSessionImpl (80-773). The bar is 500 significant lines; this is 20 over it, 1.04\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/DHTSessionImpl.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95c47b31fe6f6c259a5b37dc3061a1a2341e4d970fb6556cda7d42ccdbb34e93"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ProtoPutMessageGroup.addValue: MethodTooLong \u2014 addValue runs 104 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"154afd81654e53a9932af6a8011b822d6098bdc93000a6f638903b51687245b0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stats/Utils.scala: FileTooLong \u2014 519 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 19 over it, 1.04\u00D7 the bar. 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"519d7cb28ba3ee6e32b5fa3f51f2144f7680b63fe092627dfdcfa5bba9d32944"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NodeCCache: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCCache.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"83de02ccb04b0f0a045ea4c84dbf724994819ca5760b9cf3db96817b015b831b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Profiler: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/Profiler.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"babaeef1304a34467b4521147993c3486496c5bcf370299ae023f395e1c5d149"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DependencyTrackerAction: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerAction.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b97585e9807b48747697ccfa9e2ba72fcdac9a65cf8ae3e67ea37ddc594d371"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LoggerMacros: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core_macro/src/main/scala/msjava/slf4jutils/scalalog/Logger.scala"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad998cc1f8ea4d75a54c60ca7b90ec43a48df62e3b2a9a5da624162dbc370e6b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CacheAnalysisTool: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/CacheAnalysisTool.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c3bb11bf430f112b78075a2d94255597385548d27052f01817c94cb1f8a801"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MetaPaths: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/MetaPaths.java"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"796669db2430d750303db83d1f20fa29451252bc6b32bb49763ad8e53d515ed2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MessageGroup: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroup.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbef65daecc58351d463c24f3743a24d7a7ffcdd654a6997489f1d6f258b67d5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LightLinkedBlockingQueue: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"2190bbbea092a532fd01f46f2bb616c4de25fbda22ff5a02c323e1546803d2b5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjectDefParser2: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ObjectDefParser2.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"18400ba57c2fbba01da5346a83a53ff46b48879f08f5765d3d7e8e45b07a1d7b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PersistentAsyncServer.createConnection: MethodTooLong \u2014 createConnection runs 103 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"48af32268b695d74206dceec4d979b18f991b92df0804699f0e6debd452b4a5f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tree/LegacyElementFactory.scala: FileTooLong \u2014 514 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 14 over it, 1.03\u00D7 the bar. 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyElementFactory.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c88fc324262dcd298e3770f850696774a425f12df2e74df6d1e36e5b36fa26f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: toporing/RingTree.java: FileTooLong \u2014 511 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: RingTree (51-803). The bar is 500 significant lines; this is 11 over it, 1.02\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTree.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"17bc76e9a644526df712218ce6efb5fc9d218a5ebc2e62e039508de2239ef087"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: debug/InstrumentationConfig.java: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: InstrumentationConfig (37-746). The bar is 500 significant lines; this is 8 over it, 1.02\u00D7 the bar. 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":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationConfig.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"428c766ba807b27989fa747456d39f7e88de8dd017cfac323f009dfbb985f7bf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: core/DALBinder.scala: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: DALBinder (39-602). The bar is 500 significant lines; this is 8 over it, 1.02\u00D7 the bar. 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c3b82f5bf37cbc041bd6adb3e72919831f2c77b1af0a4732cbb167a7e996f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ring/RingRegion.java: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: RingRegion (26-828). The bar is 500 significant lines; this is 8 over it, 1.02\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38da4e6a78e691ff034424ac98e744dcf8a6cbe8c5b492845338b9361125d4f2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: zookeeper/SilverKingZooKeeperClient.java: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: SilverKingZooKeeperClient (50-766). The bar is 500 significant lines; this is 8 over it, 1.02\u00D7 the bar. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/zookeeper/SilverKingZooKeeperClient.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0621cd984f18605898e2b17886eb65c4513cfee3ec1e8f100457aede2de1d94a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DistInputs: ClassTooLong \u2014 406 significant lines (blank, comment-only and punctuation-only lines excluded), 1 methods. The bar is 400 significant lines; this is 6 over it, 1.02\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/inputs/src/main/java/optimus/platform/inputs/registry/parameters/DistInputs.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebdd7a4910bb6bd266acb290326e442965d7f123285cd7917bf1fd567206d61e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: heartbeat/WatcherProcess.scala: FileTooLong \u2014 504 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 4 over it, 1.01\u00D7 the bar. 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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/heartbeat/WatcherProcess.scala"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99b50f8d0e27f5b35ff511997e5dad39e3b9417cf294e92cf5a2f61156f2170"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 25 shared lines): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:57-86 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala:65-94 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:61-90 \u2014 These 3 members are variants of one another: a block of 25 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"15685aea2d90faacaea21d3abad6ffded8329fc6c8933cac0dbb84fc2a59a5dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (49 shared lines): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:36-91 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:41-96 \u2014 These two members are variants of one another: 49 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4886582e6ab511a677c735fe291baae9fcf2640c2ce565266c6f7f337d029b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (46 shared lines): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:92-253 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:282-449 \u2014 These two members are variants of one another: 46 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"e677c69c0bccb24935d98dd58eb0b03caf28394098b6b5991b803d7dbd5854e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (30 shared lines): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala:76-164 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala:75-168 \u2014 These two members are variants of one another: 30 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfda0994c27b40a0d8c35e84830c75517c0381e95121a1dda1b3630ce6d6068e"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (35 corresponding lines): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:84-118 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:83-117 \u2014 These two members are one piece of code written twice and then edited apart: 35 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd95bcb46f9b5d7152e5b2d43f821808fbffcacfd08e968a907a4a8a750e324d"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (23 corresponding lines): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:347-369 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:344-366 \u2014 These two members are one piece of code written twice and then edited apart: 23 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f1da4697631d1dbe62f93c01418d9516c438889e05e869a8cee89fceb5b04a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (26 corresponding lines): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:510-540 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:513-543 \u2014 These two members are one piece of code written twice and then edited apart: 26 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecc5050406741b082c16d57b53d57286c63d246f2aa74208f19448ca3236f40e"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (28 corresponding lines): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:37-65 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:113-141 \u2014 These two members are one piece of code written twice and then edited apart: 28 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa70b42313a70a48ef1cfa8ab3de6eaf7492b2865af63d6815ea3e31c9fcf373"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (23 corresponding lines): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:192-214 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:216-238 \u2014 These two members are one piece of code written twice and then edited apart: 23 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"449e81eaa36e786a10ba80647d92c047a440f2f93ba0d8fdf266e304b0cf9507"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (16 corresponding lines): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:302-317 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:160-175 \u2014 These two members are one piece of code written twice and then edited apart: 16 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de860ee12d065c4116f0e3147db8df8baabae82500c2863ea862e452726d1f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (21 members, 50\u002B identical tokens): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:52-65 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:77-92 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:106-123 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:138-157 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:173-194 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:211-234 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:252-277 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:296-323 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:353-382 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:426-457 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:505-538 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:589-624 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:678-715 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:772-811 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:871-912 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:977-1020 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1088-1133 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1204-1251 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1325-1394 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1493-1565 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1711-1786 \u2014 These 21 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 21 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 21 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6e65c592880c17ba53c2069309889a236f7c568a753d94d0783b0331646a959"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (14 members, 50\u002B identical tokens): optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:143-152 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:162-172 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:182-193 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:203-215 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:226-239 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:250-264 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:287-302 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:326-342 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:367-384 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:410-428 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:455-474 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:502-522 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:551-572 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:644-666 \u2014 These 14 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 14 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 14 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"de57912ca3f6042bc1ece3ce1419999fc00abe17bd077a02a850bd21735cac30"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (8 members, 50\u002B identical tokens): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:144-155 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:168-187 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:201-222 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:237-260 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:276-301 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:326-353 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:380-409 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:441-472 \u2014 These 8 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 8 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 8 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee4790d04388a4c775b682c80d49f9149fc8f5c0b3a68f3a8d3caf3400bbcbd"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:67-88 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:143-165 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:159-180 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:205-237 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:272-308 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:397-415 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1715-1747 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c55daeb505c970d937a2eb138ce5f52af93ec0e2a8adf6ec8ebdf6dcdb7bb9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:170-180 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:191-202 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:214-226 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:239-252 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:266-280 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:295-310 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21a8c53f3c0263e06bdbb4314ea6893ffd9d29dc1d0fb09752230f32222e521"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:299-439 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:441-470 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:265-399 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:401-431 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMProxyGenerator.scala:460-528 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"da87f4cdc3e37db4a9edda6583237f87e7ef81f809d33b67204e03b38a6452e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:139-161 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:252-275 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:124-146 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:234-257 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d104b665d14c96b8ec1d6d23ee11695494faf89283de1475b38d85344aea07f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:201-218 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:238-256 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:175-192 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:212-229 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"47191a8d22fe0b16ee350237054e02faee8b02c91107873eef2e49cea39b0102"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:219-236 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:257-274 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:193-210 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:231-248 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d5052f23d34c330879dc732e37b46bffd00bcf5616069bcc5987749d83bc81c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:450-466 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:468-489 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:421-436 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:438-455 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"186e2046cfef3b20006c116af9f0554c4b670682e66681e399ac10ef3b843610"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:34-45 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:89-100 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala:34-45 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala:89-100 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4957d0299a745df020217527bfe1b0c8d4b7be8b5df228449ed1aaa7141a96c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1157-1165 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1333-1341 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1685-1693 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1862-1870 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"318abaf13a0bafbad5a92abbe9d693c49b9d0cb556e2409a5da9724037f654e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:37-44 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:73-80 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:109-116 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:145-152 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"eedea0d87174f1b648281e0fd5346a1047655fc44e96ec77313825085ef3c830"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:46-59 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:82-95 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:118-131 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:154-167 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"4efe663d3d3809be6b2e696b38b31f5eb7c512a90499da71b102cb0d0400bb3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:37-44 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:73-80 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:109-116 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:145-152 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"524fd027dc0fa3d6457a007a9e8002cfebcba954bbe1a97c55fc53777b61894f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:46-59 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:82-95 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:118-131 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:154-167 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc2c93b2c1568cc2ae20d7f47bfae044ffbb1fcf84e1619e270d86a7435f9201"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:513-550 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:605-696 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:706-781 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:792-827 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"13c1ee72624a440a6df6b4f118dc37f89ba8ee07e6543c88b85d363bff92022e"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:227-245 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:154-169 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:221-239 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:156-174 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac4f93cb15e78600bd77440098feb4dde7f1187e1afbfb3a9317d7cbf133b139"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:84-97 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DebugKey.java:161-174 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java:106-119 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java:251-264 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"418f16e479943fcc1c634d93be656ff5497cc86d8483bb540743c0024c0068d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:95-131 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:174-209 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/management/MetaToolModuleBase.java:129-163 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightsZK.java:88-120 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c14433b3cc18e121b20486b0075e30d66a6786df7479f5a18ad9937b751516"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (79 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqUtils.scala:39-117 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqUtils.scala:41-119 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqUtils.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqUtils.scala\u0060 as WHOLE FILES: 96% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqUtils.scala:39\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqUtils.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"509fb3a5601015e17c504f8a39a6cc2b50a7c328768a62dfa13858e6ff430313"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (52 lines \u00D7 2): optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala:82-133 | optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/repl/ScalaRepl.scala:75-126 \u2014 before extracting anything, compare \u0060optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala\u0060 and \u0060optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/repl/ScalaRepl.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 68 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0e1959aca28df9eb11f0e45f70e03f9f531951bbfe2ac429642a6fce5746079"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (42 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:96-137 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:70-111 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed4f74a22f9d50a54b1689663864d98eeb2dbe5f227d1d2b0085e93dc7082d05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (41 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ProfilerTimings.scala:156-196 | optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ProfilerTimings.scala:246-286 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ProfilerTimings.scala:156\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ProfilerTimings.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0eb4e572be9fcff77bc0d89255edb1c84e096d76b4141ac6c08b66123d74e77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:82-121 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:68-107 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ded92570980237d137da9be52cc08c953acb33379ae47e9d8571d6f0b0f316f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:110-144 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:128-162 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"3765521e81a67448046f3a3297772a476153bc4d6a75999139b885a695e14a4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29\u201333 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:318-346 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:375-407 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:318\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"6915894f42f21222991e3cbf0bc77d20cb9758db72ce7cf924799f96c028bfa6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29\u201333 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:282-310 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:335-367 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:282\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fffadbe76f25ec2f60538b7007101a2ef7564a5b658c0e40df994ce6790adef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/ArrangeHelper.scala:62-94 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/RelationalUtils.scala:331-363 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/ArrangeHelper.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"851102397183d512d98b09f7d68a083b93107ae20c21a99e1160b38f2e2f3d32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30\u201331 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:344-374 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:319-348 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4b6a8d114afcc5c445efccabbe80cbf37b68401f34a1a5303714039b0206871"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:89-118 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:88-117 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"81edc2ee3e4d2f539ac91f2cbb8c4a579f8df902df38a7d83482c2f18e571c2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala:56-85 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala:148-177 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala:56\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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e0787302147dd5c79b0635df7a56aaeace0c1e15b8050e19c8a0ad69f2b7d0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:353-382 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:313-342 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:353\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"be91467b2315859150b6902f4a21e6804734fc30fef9300a44a3accfb93bd345"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:284-312 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:257-285 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d1706141a1488c618423aab0658cc6214f648b1780965add9567397961e2786"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:387-413 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:420-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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"c273cd608ab85a982aa6ca547cbc3d704cb3e69aeedb49662ca98e509502400e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25\u201326 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:120-145 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:119-143 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"e632327586663bb1e63060313a695ea190baee784b47a90d86676c15b1766307"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:515-540 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:518-543 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:515\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"983dc75a1cde3e8b10b3614c942fba20e4212ca2e813774c09948fe2f2544f82"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (1\u201325 lines \u00D7 16): optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:446-446 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:450-450 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:454-454 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:458-458 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:460-461 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:463-463 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:465-466 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:468-484 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:487-504 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:507-525 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:528-547 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:550-570 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:573-594 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:597-619 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:622-645 | optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:648-672 \u2014 all 16 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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:446\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:446\u0060 calls \u0060target$withNode\u0060 and \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala:484\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9978b1fb6e575c427fd013ac1d693b5f46dfc67fd99a918346fbd458181531"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:148-172 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:122-146 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d8a43cc75e51bf73ad3e73838355c5b97b043765b4581fb75d78bca8cf0b009"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala:88-111 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala:93-116 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69ccaa95e07a5e0571d38614805537011ecb1f04f3003885317556ef0ec0314"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:39-62 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:115-138 \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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4af22abbb9e4c13ed73758ff31e8f70160f459711e8f6006504da66690f2707"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:253-275 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:235-257 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bba32fdc68115fc1fbc95f8cac18f8063274621722210610f04150b7db528fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201322 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:423-439 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:454-470 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMProxyGenerator.scala:507-528 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:423\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b13ee7e43ce556983ddcb04acc17cdbca7ad50ce533778f8af8614097e97c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:186-207 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:184-205 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5f23979db6994e32830af8526807b30e1aa78fcdd12ca551fdd0e384632a543"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21\u201322 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:487-508 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:491-511 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:487\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"52a14e08f7fc2144f1cc50ab278e7a68c78f6148f421ef022275346a6a466c0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:50-71 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:36-57 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"893e1b2e6234ed61bce44263deee0e6cd705202876187dbb334f78fa5a979612"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21\u201322 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:403-424 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:375-395 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"f48e9cbb865272c02d96a64061cdde27e6123b0878e5844fe576a43bad5a98e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala:172-193 | optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala:218-239 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala:172\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"65cde7c7d625d3b6602ca8db70cea819e1e76ef62c0ee999e61c5f46b44cccf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201322 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:412-431 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:460-481 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:412\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"14f3d119a7c4dd4c99e2f7277a7d66bd7b04bd7ef520c4127602b6ec23bd209c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201321 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:325-343 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:384-404 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:289-307 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:344-364 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:325\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccbc1bca351a760ad5b2330103bcceb1d184423b8bdb12ccc9746bdbafd0c9f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala:129-149 | optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala:170-190 | optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala:216-236 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/Apars.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"cccebc73e3bdc8e356ebe3ca18214096fa77f76f02847588d7769448cec23ec5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala:65-85 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala:70-90 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f038842363a227d9b020eba7e49c25615d327bab1ac51c7fceb88cf2eace561"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:248-268 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:246-266 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:248\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce8c66e2d0a683bcf00faf6cdc0c6865e253ffa06e5d374d44a0a4794bd026e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala:289-309 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala:358-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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala:289\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d2332a37c12300746999618dd66021e8bf2f44b4d007540c356a4a245776e94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:485-505 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:509-529 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"238324920fc8373660ae3f73a08e054b18fd1c2409571fb2881a93b213ff48a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala:793-813 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala:833-853 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala:793\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityMultiRelation.scala"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"96904bf871f89805556c9409a6dfc6f3977148f624ed07a6ef852b665d2bd4a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:429-448 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:401-419 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:429\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c7bb33d89d7d6e8e92761c382fca49da6f474ff4f85d2156fd77989b806294"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:102-121 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala:102-121 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e1f35daaf2c13614e8c31a9247a5523ce6ee6138da802bce35ca702a61de786"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/platform/projects/core_macro/src/main/scala/optimus/utils/MacroUtils.scala:188-207 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala:1124-1143 \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 \u0060optimus/platform/projects/core_macro/src/main/scala/optimus/utils/MacroUtils.scala:188\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":"optimus/platform/projects/core_macro/src/main/scala/optimus/utils/MacroUtils.scala"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49a8f85b3069ac40993447f0aa55aed4269f150a69eceadacf7c2067bc15f65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:276-295 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:301-320 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e70d2681db9082353d332b1288cced88de028aefafd28fe8b020909804efad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:587-606 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:613-632 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff2f212564f1a0a882330ea24698c458acf08332dbb600d946c7747bc7ec9d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:707-726 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:733-752 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dfed40a51d9b642ee36a33cfa34a3b773b9fa66825c434e568281a5735caaef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:140-158 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:125-143 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e036a95c78a36761270826a83f8181fc9ace2967d8cc326b50f9902697cca5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:493-511 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:459-477 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2f47228a19ffb5398574d467b00a38c955159995fad3d399de86d0ce9ee8c11"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala:777-795 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionSqlFormatter.scala:370-388 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala:777\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7a4a8d6c81db16e7805def381d19cc9043e40aa6fc7ffafb82be56d2939fcb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:84-102 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:275-293 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:84\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"37275c5d1e2d7d316340bfe0d67b916d8e1452efbd8c7d9a907cbf80a0abed7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:376-394 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:210-228 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:376\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c7bba4c89cd1485c8777baec5d4b4dfb9a6b68f448e1a3c092bc480a56c9a5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccCompiler.scala:78-95 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/vc/VcCompiler.scala:69-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccCompiler.scala:78\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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccCompiler.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"f713cf095e71c255e8a13587ccb658338f434c98eef3e6ed194f26a4522aeaec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:65-82 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:65-82 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"22ae49b9db3114ba6429b262cf5e421fe263409d7c2e6b4b216666f0fb7e0749"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:27-44 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:25-42 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f3def2578d8b5c60a369bc4c6046aa95db9c01ac9c13e725a62b4ed41525b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:47-64 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala:47-64 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"654875f6b31b3f30df77aa7d80f76c7fdc0cffd8208b08625010220b4d767b39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/SingletonProjectionRewriter.scala:90-107 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/LinkageSubqueryRewriter.scala:110-127 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/SingletonProjectionRewriter.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f8837fa3a7d0a6fd7598371fa324f69e3451c6173c61b9a5f2a98946d1f58bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:261-278 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/sampling/DALSamplingReducer.scala:122-139 \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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060s\u0060 to \u0060: others) = method.methodArgs val source = super.visitElement(s.param) val projection = convertToSequence(source) if ((projection eq null) || ((projection.select.orderBy ne null) \u0026\u0026 projection.select.orderBy.nonEmpty)\u0060 in one and \u0060: nArg :: _) = method.methodArgs val source = super.visitElement(s.param) val projection = convertToSequence(source) if ((projection eq null) || (projection.select.take ne null)\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"acaa7853a1a713c076fc40ce555834705a7ea772adc987c614d4248b82509f3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:505-521 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:546-562 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:505\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f6a5dd00f6a22378a3501fab5a2d70da1bc28f905d51a2338d91671776cb3da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:470-486 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:439-454 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:488\u0060 calls \u0060collect\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:455\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"900d2b404c8df8111f1be296140b6a6d59378c26403fee0e241547c98f9507c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:192-208 | optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:220-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:192\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"102eaa46287133aa48750978ad7de27b5a2c77b38be56de3e1c81ec92b5858f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala:241-257 | optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala:356-372 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala:241\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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06fbf12ed7e6b52042f6a6901136ed91b50d69101dfd7b0e36fa538360544e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/platform/temporalSurface/TemporalSurfaceMatchers.scala:517-533 | optimus/platform/projects/platform/src/main/scala/optimus/platform/temporalSurface/TemporalSurfaceMatchers.scala:581-597 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/temporalSurface/TemporalSurfaceMatchers.scala:517\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/temporalSurface/TemporalSurfaceMatchers.scala"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"477e65c4c117be88cb04e66e62d27c3d65b47340e9838aa8828e0ee1b7a76429"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:383-399 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:415-431 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:383\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e64e492a9a92489b9903302cfb6033a6b1927cc49e101d8b9762532be1b8efd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala:627-643 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala:677-693 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala:627\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e631f41917a92d6d2b1eac8eb7cbd6f619f722d27b867d2d6239abac0bc0534"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:164-179 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:233-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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:164\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2ea1ff9c6d7df33b27d1da74e3a8b353e2d6418e3832b41db44da10a228979b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201316 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:449-461 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:410-422 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMProxyGenerator.scala:501-516 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:449\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca3ab308f17500881acbfc0d389d18e55be06ace6a497ba3b498534bdde925c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala:97-112 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala:99-114 \u2014 before extracting anything, compare \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala\u0060 and \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"1443a157f2bfb42a0936d3858e54bc429f49fbb05de0689ab77a6cb38674afa3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:451-466 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:422-436 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87ce0396cb43896de2c6650dac42aa8c8bf763de7680306337b01403945d80b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:415-430 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:375-390 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:415\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"6718d321b4b9db7bb64606a53235c6ef5b6ffa1efd5ec80a73edac83a49e6129"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala:253-268 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala:399-414 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/LambdaCompiler.scala"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b059e8bcd23dddd0fe68e0982b1605ab0a493657c300847d3dc8b2dcdaa536e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:893-908 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:970-985 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala: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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb005c07c46cb5d5bd5388226f39a9379016ff21ae5e29b6ad450e10e07e6e03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 3): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:472-486 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:412-425 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:419-432 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:472\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9d06a5a7b2876f8bc1c30379f9b15a412678e94b41576165c92ff0795d356e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:288-301 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:305-319 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"6406840663228e57645f22691b4a374f1c965f3639c5791879ea4dce02d19c6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:62-76 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:50-64 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ce42e5795c538bfc5deba0453aedaa3bcb4533daa8ac181fa431d1b2f88586"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/DbQueryTreeReducerBase.scala:283-297 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/pubsub/ClientSideFilterRewriter.scala:46-60 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/DbQueryTreeReducerBase.scala"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"2299b4ff3fba747d715b9f5be4ac8a519871f4fa711c0df13f4ba0dfa2b984ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:610-624 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/RelationalUtils.scala:283-297 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/internal/RelationalUtils.scala:283\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"c40fd3fe15176ed81196e8a6b09e518a24a3b94b36794d4aa227d66d2fc77ead"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccExecutionProvider.scala:89-103 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/FullTextSearchExecutionProvider.scala:74-88 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccExecutionProvider.scala: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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccExecutionProvider.scala:104\u0060 calls \u0060Linkage\u0060, \u0060temporalityMap\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/FullTextSearchExecutionProvider.scala:89\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccExecutionProvider.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"43113f707cac8fe21f0b0f55a49722658f257875ac146c2b9378157885780157"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:290-303 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:351-364 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:414-427 \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 \u0060optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala: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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"efb0a9abd2da24c0b9b069fef42ad1e55fcda2c78a5f13a4e9be1b83a6cd23ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:128-141 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:179-192 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5ef9c913e2a62c6d55ba37e26c2c87f30ea51d7d041908d085ae4301e8eb0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/util/DependencyTransformer.scala:54-67 | optimus/platform/projects/priql/src/main/scala/optimus/platform/util/DependencyTransformer.scala:110-123 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/util/DependencyTransformer.scala: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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/util/DependencyTransformer.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5802c961d3391f1a2f5c7e0bacb17e5b53000f45ec6d605142fa29fcb9fecc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:47-59 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:83-95 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:119-131 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:155-167 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2006d1fcf2ae879c4adae5d4c4dc04bda4f869c2235e8dd1aa06bf38d58b2d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:47-59 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:83-95 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:119-131 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:155-167 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"7170b83c2355d55e8e1d703cb01d3b520bfbc0949f59f429f3de40f84593548c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 3): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:78-88 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:155-165 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1735-1747 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:78\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3c76ff67c2fc188bd4fbaa9321a842455c8c00d468a569cc9afaabdd775e888"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:74-86 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala:82-94 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:78-90 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:74\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb6f0a102b9da09306977376b16a9ec554db2271340fd3ccc391b24cf66b9a14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccLinker.scala:70-80 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/vc/VcLinker.scala:73-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 \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccLinker.scala: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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/cpp/gcc/GccLinker.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb53040f42e228305bd83d040468915b8952edd2d623094e83bb7eca1612d38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala:1002-1014 | optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala:1048-1060 \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 \u0060optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala:1002\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":1002}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbc7b89c44e6fdb4b59acc5f9b2ad674396f2ddad0ac3f6c13165c20f94c5c62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:357-369 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:354-366 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:357\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3ec5a7e24266eb4e9f2aa41f73b3eafe18b939385159dac3790f0d42d450e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:442-454 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:448-460 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:442\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"c58814cda295a0b6c3ccada5fbf445dbb83e9635e52acf948b21abc77dfb8ea7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:461-473 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:466-478 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:461\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"d376b284a7beb27c10ebef04e2c4d14736db0f938bd5dcd1987c14ffb54a7a2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:244-256 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:218-229 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:244\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d7f1d6b696a426ad8e5236e4f33c03d03377918f336567a9dcae43b9c22d707"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (2\u201313 lines \u00D7 4): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:165-166 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:212-224 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:279-291 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:403-404 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala: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. 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:212\u0060 calls \u0060At\u0060, \u0060setTxTime\u0060, \u0060toProto\u0060 and \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:165\u0060 does not \u2014 after which the two agree again for 5 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbd84e7ec253a9670d7506632d8a95c648c9557c192b9bdd48a4962db46fbd56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala:357-369 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/PluginUtils.scala:278-290 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala:357\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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"df530fc3c4772578857dff6fbbca249be71c7d90a5b490f36d586cdd6326b67e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:125-137 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:154-166 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:125\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8991252665f0110fb2f24e589dbd7a5b76da2bd799fc64b8e696580c48c1226"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:305-317 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:163-175 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala: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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"3091fe0490f7e9536dd90587ad99f46529c32d1723e27c7a2f547330ba1d8729"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:97-108 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:125-136 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:154-165 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:125\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fa2b308d42e85f5c49576e840b1455c8d5bb45e0a5129dca2fb96948ec50519"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:62-73 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala:70-81 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:66-77 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:62\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6174f2e5b83f94f2c9b5dfcb370d0eed6e8d50bc8b1c04170f44d153bb2666e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/PodcastGenerator.scala:235-246 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/PodcastGenerator.scala:270-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 \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/PodcastGenerator.scala:235\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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/PodcastGenerator.scala"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"6acca29bdaab047c6ac2c3cb46de9bb51fd3d1c8950ced9bf879caed6b6908f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:166-177 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:145-156 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"781dc19b704637d42af039fb415a45b277da9561f7c6275d5e61868758c8f47e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:180-191 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:159-170 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"903ae3913fa2062b85d1aece350d339ff5109ca571adab3fecc17babf38653bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:490-501 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:531-542 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala: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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"c798bfd5274108545f313ca0dd23e7f40091d9b2ee63cd67b4a80c84d953d14d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:207-218 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:181-192 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:207\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c60bc3b744a04cccd3cc981a280294dc4d35f314962cdf999114664e31e0bc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:225-236 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:199-210 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:225\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"69f1fa7d46ff15b8a45096225bfc7cb9971825e938c6bd48de0fed58a7798f78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:263-274 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:237-248 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:263\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ba60ce4c1235134da48bd625d1624bc777ef2bd4945abade472b952b1a9ca47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:92-103 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:79-89 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:105\u0060 calls \u0060collect\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:90\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc9a39631f5acefc34219a1ec56e223b6f325579304f65f8a62d34417dee27d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:144-155 | optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:167-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:144\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"40512a9242bed12a3260698c86cc5f49d0815e7bd70c7affd36ce0e44808ff6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1774-1785 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1814-1825 \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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1774}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6c255e85f59c3f4da5f385bec2c0d768350f54bf2f5bd5b0dff0ac0d059d2eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/PersistentEntityCondition.scala:154-165 | optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/PersistentEntityCondition.scala:171-182 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/PersistentEntityCondition.scala:154\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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/PersistentEntityCondition.scala"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a106fb0a7de984667aa8a12776a622d6107b27bed37b0bfa68d4a5461e5819"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/CountDistinctMerger.scala:28-39 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/CountDistinctMerger.scala:43-54 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/CountDistinctMerger.scala:28\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/CountDistinctMerger.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"4de2ac86999b0e220656adf7d125732e8207ffd3cd57c8ad461d8626888d2077"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:514-525 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:606-617 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:514\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad447e64daf9cc0415408488fd549c8fd8266e8eb2d3eb88997c6135869aee28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:329-340 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:358-369 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:329\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a20f8289bd7b8c7edf37936ed44ddfa592240753a8de813cb754e86c4b62a51"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:272-283 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:315-326 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"505681aa5f3fb8d083da2041995ce69b499e0499f72d356b0db0ead0547a8cbb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityProviderPersistenceSerializer.scala:41-52 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EventProviderPersistenceSerializer.scala:41-52 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityProviderPersistenceSerializer.scala:41\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/EntityProviderPersistenceSerializer.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e54d772ee76850d3a70cae06593a8cef34007fa21c53d70b45a53dcb2c9918bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201311 lines \u00D7 9): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:203-213 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:224-234 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:245-255 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:267-277 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:288-298 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:309-319 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:330-340 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:350-360 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:369-376 \u2014 all 9 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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:203\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"09fd876692d0de0ba5171857e4d1e8503a48d011f526cc57033ef729aefc2f58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:145-155 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:124-134 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"569dd91f30eb5506f3b43e4a207dfec2bf94f475179995aa506e0377f1c2f84b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:237-247 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:221-231 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:249\u0060 calls \u0060collect\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:232\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"66930a8fff13e6d4ba4acc3cba087f969a13b7fd723e3a87c8a913700df7156c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:78-88 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:66-76 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"7edcb87110342b674d66754acbfde3d53edc07e3a52c6e2a0c8d077fed723fcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:476-486 | optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:505-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:476\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7f42f9d7798637f661b8e3c6581660e8c753a1f931cb93acafaca521b4bdae2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala:42-52 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala:134-144 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"63927ebdc5e0dd35280b35f821a1ff4c2afcf4476a0b0031ab24d985dc13b030"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala:89-99 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala:181-191 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"f93fdb1a0c0941d42135e2555e030d469ce809ecd10957a7529be5c7fff0efab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/RelationKeys.scala:166-176 | optimus/platform/projects/priql/src/main/scala/optimus/platform/RelationKeys.scala:232-242 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/RelationKeys.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab47c4b5ca9199e212071e4f66e4806fe5d0bcf31f18973692fbe1740cf9d96f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ScalarSubqueryRewriter.scala:24-34 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala:39-49 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ScalarSubqueryRewriter.scala"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"858629bc9a0b315168d6c195d932b9e6644d19bcae5c05da3a5f383dd5c77318"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:65-75 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:89-99 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:65\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"26cf1a9230d1d1b0872987ce7667624b656252ba5d877b6f2f74f501885bccc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:204-214 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:261-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:204\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b37a00716654489ac3687d8f139f1dde72e540bdec597a0969ae883da555b17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:344-354 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:365-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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:344\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"12e937c50b2ae09d300b83d2360e3f6056c871bc9babdd28daa9c8f75c21c3a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:261-271 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:281-291 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:261\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"96937d46939f5367aabb7826cb66b99431860f878dd985c1b65cebd8cd1bc90f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:202-211 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:239-248 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:176-185 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:213-222 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:202\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c4270a3dadb567194fb3d61dc8ec2759fcfce3ed7ed2353aaf12460ef798635"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:239-248 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:541-550 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:672-681 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala:239\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/FunctionFormatter.scala"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"46b2705bccb6ddae7bfaed97209129b1e07cdc5c8bc97de6266247535eaaabf1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:143-152 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:200-209 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:257-266 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7220f1faae7bb4ec022aea762648e57bf0966c59063479606d0d7c52801ab79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala:68-77 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala:88-97 \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 \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala:68\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala:78\u0060 calls \u0060incrementAndGet\u0060 and \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala:98\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b835e6bf886e50fc7f31d75cf844de6800de4ddbf72eb38e3eef6137b8de41f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala:986-995 | optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala:1030-1039 \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":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/Compiler.scala"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"5627d72a7fb7d9a27bc415c25f0b82339cfe61484acf6814c16654ddd13557ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:224-233 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:209-218 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bcb6063e37cb6ae48234a4cec7147b54242588c3f3b4d055fe3686403a3d431"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala:755-763 | optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala:809-818 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala:755\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":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"1605ab48010fcb343e28e75844ff6de4bf7ee665465153f07b99508badb4bec5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:216-225 | optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala:267-276 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala: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":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf78f91b5006813010d76e1323e35857e70d5d2a70367acc8a0fbd16d5f9857"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:585-594 | optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:614-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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"993daef36e7793985334d61ebbde17cc3194014bfd4fa13dc84bd5511dda8ca2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:992-1001 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1015-1024 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:992\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ac78770c01d41ca10fa75835354e01411f948dda7ef0682d0fa54a30ea54e43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:66-75 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala:179-188 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Variance.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb4be359d83f0a43120d7e55ee6d139ec72ad2786627b3b165111ed7472f351"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelMultiRelation.scala:259-268 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelMultiRelation.scala:273-282 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelMultiRelation.scala"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"164337ced628458d098ccb7eff4febc3127a128df29bbf2aa164b9f2b0cb1e77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:123-132 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:130-139 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 60 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"a90e9f158c61834683d76b2bae4dd94543657042e15be61cbcff8ce1b9c2dc8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:323-332 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:182-191 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:323\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"6080425114abeedde655b9ba729d58046b09545249d1a7eb9e1eaa7c6a9aaade"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatter.scala:135-144 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:86-95 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatter.scala:135\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatter.scala"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b8087dcf78d23a689fa0dd369c66a08a664374803368e6a5783978c44556a8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala:88-97 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala:126-135 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala: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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"45d6bc32c64b4c5eb1325e7605e9ba40bc15744eaeba175e9de1db21eb5c1962"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:146-154 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:259-268 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:131-139 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:241-250 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:146\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea4a91f13f6fb9d66d97c470a7a884df4bcb8219dbba7b61f7a938337ca24e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:221-229 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:259-267 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:195-203 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:233-241 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:221\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"b94ec8c749e74dd1a70d08e6c6f19550350a5095674d2c86b925226d4c63f743"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:37-45 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:92-100 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala:37-45 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala:92-100 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/ZipIterator.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala:37\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/ZipIterator.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e5957168df4de19f7d3cad36bb1ab3deb156b6a4faa1bcc6d7949c511e2b272"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:126-134 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala:185-193 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:133-141 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"100530e8e9a232c65889c71c57e0a12e7e4b45333d3f475416aa89404a747d1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspBuilder.scala:201-209 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/Utils.scala:324-332 \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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspBuilder.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a0fefbb6baff9cd9bc8dcaf71e8794585d84f5af3545d72ff6c5d19c3cfd2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ElectronConfigurationCompiler.scala:34-42 | optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/WebConfigurationCompiler.scala:32-40 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ElectronConfigurationCompiler.scala:34\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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060origin\u0060 to \u0060ObtFile): Result[Option[ElectronConfiguration]] = Result.tryWith(origin\u0060 in one and \u0060ObtFile): Result[Option[WebConfiguration]] = Result.tryWith(origin\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ElectronConfigurationCompiler.scala:33\u0060 calls \u0060stringListOrEmpty\u0060 and \u0060optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/WebConfigurationCompiler.scala:31\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ElectronConfigurationCompiler.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"95bae407d45e466758335b230c301dcc6ce4c4503cd9494de8407784ebcf1e82"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:194-202 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:173-181 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f9a12c67b3e124516a491e1ba346de2a9f8d6b59920a46dc1f06783ddef0e7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:311-319 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:267-275 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"52f68773df7646cc11a1f04c37dbf617f9129dd6e08e5508486afeb288cef76a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:406-414 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:350-358 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:406\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"d040a6d1ad84c87ada1dc248f8b45434801309e00fa18ff9f91626df1ca86eab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/CovariantSet.scala:158-166 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/platform/CovariantSet.scala:84-92 \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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/CovariantSet.scala"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"90ae5769a45019aae14dacb4d345e581949afcc3b78ff53da966e15bd0ff94e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/CorePluginSupport.scala:27-35 | optimus/platform/projects/core/src/main/scala/optimus/graph/PropertyNode.scala:105-113 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/CorePluginSupport.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf1456d3bbb6edd8cbb07ce19febbd49f8f44a447e8434fb36c8d300bb105909"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:136-144 | optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:167-175 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:136\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"38c53677a6ea7adb16c04c73af36487742d99c98032004d080e3b453770c17d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EventCommandProtoSerialization.scala:55-63 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EventCommandProtoSerialization.scala:87-95 \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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EventCommandProtoSerialization.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bd1c812377352e43e0e7129d19b44308cae9c9e0093d29854c6e7b8fd028edc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala:1019-1027 | optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingPluginDefinitions.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b115a1a45799cbae8878981a78e8642522d346ab20b81f5a167d573b1618e53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:477-485 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:492-500 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala: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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf8cdc177351d89f12a11457aec2f0ef84076895e1587a4ecc60c7b3b76531a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:487-495 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMProxyGenerator.scala:606-615 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:487\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"4203d1922bb45f9564148cbeadb715ced0df09f73f420fe7e83faa04442086ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala:73-81 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReducer.scala:47-55 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala:73\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"92945b6b3ab5800fc5a862da9e629c704021e2db955d4c1506341cc900ad1756"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala:325-333 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala:337-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"310106a88b37a68c3fa44688678c5eb9378c8daf6adb2a73ad1f594d04464343"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:146-154 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:176-184 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:146\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"29e376c8bd53308a5c0b18432a7e0bb69584d4f1c37dab661500679fae37f422"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 14): optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:144-151 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:163-169 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:183-189 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:204-210 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:227-233 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:251-257 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:288-294 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:327-333 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:368-374 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:411-417 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:456-462 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:503-509 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:552-558 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:645-651 \u2014 all 14 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. 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:169\u0060 calls \u0060args\u0060 and \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:151\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"b79e2608469befe806c09ed2e22befdfb17e37551128bade6058e0087c829861"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:171-178 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:192-199 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:215-222 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:240-247 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:267-274 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:296-303 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:200\u0060 calls \u0060pickle\u0060 and \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala:179\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TuplePicklers.scala"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"514047171b5b17920b2dfbdd9e8c7c8525014530361ed239109cc383e7960752"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:451-458 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:472-479 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:422-429 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:441-448 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:451\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"7753e46edbf0d98c0b90c78c9e215a39be19743250ba27fed0ba33b0a9f84f18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1158-1165 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1334-1341 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1686-1693 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1863-1870 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":1158}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f5e5d27e59c60e976cb064c180ae1b4d3803893ef7e2dbe2bf0c7754b1ef282"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:681-688 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:697-704 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:720-727 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:681\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":681}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1d72ea1c94d645371284ced6cfb4bfb7fb85793b11d72bfaa550813cafec9c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1181-1188 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1709-1716 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1886-1893 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c6ef5764949baa563ada67258deaa279c722db22977257b37f75e51d77eff77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:40-47 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:102-109 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:165-172 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:40\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"25e52da8a6310bc1ae947b472617949bebc661e525befefc3ffe2983398d28e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/ElectronCompilationSources.scala:35-42 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/WebCompilationSources.scala:35-42 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/ElectronCompilationSources.scala:35\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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/ElectronCompilationSources.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a18e65a4288b5109f03c63ff22138a6b4c8a482a06c0452d5432ea0c970ea8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala:42-49 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala:45-52 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala:42\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"15e929c7a3a8080cadef8dea7d388818301bb4ad1465872ceaeccf1301f8a724"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:212-219 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:233-240 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"b268e40288cb2a2a5395cce9c70ae11a9a5524c56d2fdeda62b37f7a6bcbbd28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:235-242 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:256-263 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"053729d5b1d6b584afe93cabc0e235965c27ebdac91535000b695407a28f1300"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:286-293 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:245-252 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6f3402a91844717ef9c7d598be97029d252c742ce6742923b50caba7fadc727"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:376-383 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:323-330 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:376\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"addee8acfcfd8afcf47d812007f96d256b27436d31ef2bed6f0312fea1f04a73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ThreadStatUtil.scala:220-227 | optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ThreadStatUtil.scala:256-263 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ThreadStatUtil.scala:220\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/ThreadStatUtil.scala"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f170932fcadf9ece1684e40b9ec068fb7f7351e0d80043a613c0a349af3665f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala:104-111 | optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala:538-545 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala:104\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":"optimus/platform/projects/core/src/main/scala/optimus/graph/experimental/ExperimentalAsyncIterator2.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b622a6819e58237c7ae8b388aad35fd5d7ca0b9086eb8d2d87f0a8b7ae3379f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala:342-348 | optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala:351-358 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala:351\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/AbstractLambdaReifier.scala"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"e35e39da6a35b11fd667ab899313952d13ab83c7a76ffd360005e0956a2bf91a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20138 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/SkUtils.scala:83-90 | optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/SkUtils.scala:96-101 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/SkUtils.scala:83\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/SkUtils.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"20266315022d73952a3b0c44b9f9862e5feb5d5b91353f76e005adb86bc6c135"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/cli/ZkStoreUtils.scala:110-117 | optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/cli/ZkStoreUtils.scala:160-168 \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":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/cli/ZkStoreUtils.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"5932e50e96739c52618315b0ee2bdebf2eb5bb54636e31ff9219129606913c60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala:313-320 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala:383-390 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala:313\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PubSubProtoSerialization.scala"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"96f65bbf6fb6f2aa069bf81536f984fb1250ee8246da662ee2b02df17152ab84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/entityplugin/pretyper/CompanionMethodsGenerator.scala:313-320 | optimus/platform/projects/entityplugin/src/main/scala/optimus/entityplugin/pretyper/CompanionMethodsGenerator.scala:333-340 \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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/entityplugin/pretyper/CompanionMethodsGenerator.scala"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"81ad57ca7aa2df730d1a22bf0b553798ad408dcfb35a83a4a7de4e7757ee4216"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala:143-150 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/SerializedKeyBuilder.scala:77-84 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala:143\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8299da780769a5b835c14b0756baa206924f3c32a28b143680ea281de234038"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala:257-264 | optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala:313-319 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala: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. 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ced07595a411882e23c73f7f41a2bf130bb8de185a30af568254e7e7b5bde1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/Query.scala:646-653 | optimus/platform/projects/priql/src/main/scala/optimus/platform/Query.scala:676-683 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/Query.scala:646\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/Query.scala"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1699bff3ee86fe48dad955f1d8d6b78324b8294f042c36172205a4d13fa419c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala:428-434 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala:493-500 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"facd6b19a540f4d6356a6d44e1bd77cf21e6e13a7d3ccafa9ef03733d59ed494"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:981-988 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1510-1517 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":981}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ef977163141f4acaede7b93116cc169683f8697fd91bbb10b866c93d04f561"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1657-1664 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1834-1841 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:1657\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":1657}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dde47a0ff0679fd1972ce3cb83b22cfc7ab0b2b696822417e05c11bf16c63a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:156-163 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:66-73 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04cd3398db4ed466c536d0f9b4bb1da2091295e076bb761806e96425c2fafe9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:406-413 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:366-373 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"a58a903c93e347f0535cdb51f1b753391fde7fea157b0cf419aea07bbae87d3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala:481-488 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala:442-449 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala\u0060 and \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 107 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e0291d7d882667e5bbd538a3a2916db4f7c2d773dc53dc6a8c3e0547780d07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:595-602 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:373-380 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:595\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":595}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5377f33d2ee3f04ad3a0eafa0124eec9821a5ba11d1bca69ad5caef7043f535"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:707-714 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:793-800 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:707\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dcc032ee0865f367591dfb0dab4794e0429e144b8a5219e224800e9f101901a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:1228-1235 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala:137-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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:1228\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"3df7807f9076f4397e3d4eca95596edb443d288f04e598ccc38703ba82ae4fa1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:118-125 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:169-176 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:118\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6e2b270caec27b134a9486cffb74f38c1cc0c4e7a39a3451cae433c6bcff108"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/MultiRelationElementRemover.scala:136-143 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/MultiRelationElementRemover.scala:167-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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/MultiRelationElementRemover.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3267c3ce86e57eda4d71422bb0153cee7a0040b2caa8042480f21a9cec344b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:156-163 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:213-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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:156\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"9276cf5ea2ce75bd6798b87d9a6c42f322bd8ab08e49680dcfa7c0b7c700dd0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:131-138 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:161-168 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f82967f3496be717cb651e3719c01cd84276915a6a630651d821197abdc89c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:226-233 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:242-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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala:226\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba46e5aadb153ca10aef4f2d6ea7049c49771a1a43a17136663b7a9a6972f054"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:526-533 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:555-562 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:526\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"b746ffc7f2f29fcff83f2295683c6615331917e3e850e1f24916c7100ed46f18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/utils/src/main/scala/optimus/utils/MiscUtils.scala:269-276 | optimus/platform/projects/utils/src/main/scala/optimus/utils/MiscUtils.scala:279-286 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/utils/MiscUtils.scala"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b9cf65c6227b2f3d878c91ddaff33eb4909645336d3b26c3d6476fc1c8d6fe7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 19): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:114-120 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:147-153 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:183-189 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:222-228 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:264-270 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:309-315 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:367-373 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:441-447 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:521-527 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:606-612 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:696-702 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:791-797 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:891-897 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:998-1004 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1110-1116 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1227-1233 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1349-1355 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1518-1524 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1737-1743 \u2014 all 19 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 \u0060optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:114\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff2956e6db67c99c98e977c11b1e76a57b7cf67e8c313174317aa6ad6965461"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 8): optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:295-301 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:334-339 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:375-380 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:418-423 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:463-468 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:510-515 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:559-564 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:652-657 \u2014 all 8 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. 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:339\u0060 calls \u0060args\u0060 and \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:301\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"3efd66b2c050f88d42eba98b759f9c15357faedae60af96d12616c39aaab365e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20137 lines \u00D7 8): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:148-151 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:177-183 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:211-217 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:248-254 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:288-294 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:339-345 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:394-400 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:456-462 \u2014 all 8 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 \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala: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. 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:218\u0060 calls \u0060unpickle\u0060, \u0060s\u0060 and \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:184\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"a41af8077d7ada803d1df4be411ae10ed79f2bf010a4ebc4da341f51db93e2f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 6): optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:90-96 | optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:99-105 | optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:109-115 | optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:120-126 | optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:132-138 | optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:145-150 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala:90\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with 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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfoConversions.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5827e41b4f1553b97a74057b6907c5cd777d121aded5b7189adf08089dc753c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:118-124 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:127-133 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:137-143 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:148-154 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:125\u0060 calls \u0060Tuple7\u0060 and \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:144\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5c272cfdc93fc35b70af74846db7e769f841d84a6f6b060c8342fcc74eecaa0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:525-531 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:617-623 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:712-718 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:798-804 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:525\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f25807fa909f73f97e3e4e8b56d8dfe37c1c1432be24076cf2e55ed609d7932"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:260-266 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:320-327 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:383-390 \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 \u0060optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala:260\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":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"f99e78f95d454435db2756143838c9ab1fa03bcd215e84b8926b1ffd0adb702e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:532-538 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:555-561 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:578-584 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala:532\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd36f6d4317c77e6767df47754a00d24758dee5b7348fa9366437036e5010b52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala:123-129 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala:126-132 \u2014 before extracting anything, compare \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala\u0060 and \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 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 \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala:123\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"57aaa6795a0397fefbc792a364006b8f0f1e609e65cfc0d81bff1facca7d308e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala:133-139 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala:137-143 \u2014 before extracting anything, compare \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala\u0060 and \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncWebCompiler.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 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 \u0060optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala: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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/AsyncElectronCompiler.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"21de7510121e597faeefb824e4e69d9056d8a2fcbcd5958bf63db28a8bd6f5d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:349-355 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:346-352 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:349\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef4fac1a9adce56ad54ffa98307c765ef05b9a7dcfccb3367fa2f23acdd86b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala:717-722 | optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala:769-775 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala:717\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":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a62dffd8a78243a6c0a3391fead0b2f83338188933d7e65f958c13773689f54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:565-571 | optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:658-663 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:663\u0060 calls \u0060args\u0060 and \u0060optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala:571\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/loom/LNodeFunction.scala"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"82134f95fcc1d09c40e602b6f649d2ef16e717717472b2ad6287fa82dd554ee6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:161-167 | optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:192-199 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala: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":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf48877a56c6b1db9e842062f9a655db5299502a87ad9121b09b92585dc1030"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:560-566 | optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:590-596 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala:560\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":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8e626b32fcd3932d5fb59ef01cb27d61c7ecaa8a78c6a780c586c9318834e4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/inputs/loaders/NodeInputMap.scala:282-288 | optimus/platform/projects/core/src/main/scala/optimus/platform/inputs/loaders/NodeInputMap.scala:324-330 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/inputs/loaders/NodeInputMap.scala:282\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":"optimus/platform/projects/core/src/main/scala/optimus/platform/inputs/loaders/NodeInputMap.scala"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"f45238f4787260aec27bec1f31e45b3eb2d852e01248eabf3125d9ea5d4e9faa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/QueryTreeComparer.scala:149-155 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionComparer.scala:176-182 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/QueryTreeComparer.scala"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"291eb1c1ed5e4d39d83f2ec4dc5867e7d4b1ef26778325c0ade0b0738a660a58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionAtlasSearchFormatter.scala:27-33 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionPriQLFormatter.scala:132-138 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionAtlasSearchFormatter.scala:27\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionAtlasSearchFormatter.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4a98f33cf972ecf937a895c6feaa734ac941e7b6177cd75fbafbabd4e7ca902"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala:350-356 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/PluginUtils.scala:271-277 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala:350\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a034957f2de1d864ef0d94955e65bd90508632df0d3c8c8392fc007051d3ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala:1198-1204 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala:1215-1221 \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 \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala:1198\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala:1213\u0060 calls \u0060val\u0060, \u0060pred_get\u0060 and \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala:1196\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":1198}}}],"partialFingerprints":{"codehealthFindingId/v1":"819cdf701fb92b9d3f754b4238d1eec224aa2fcd2dc384c2c16d1648f59928cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala:1065-1071 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala:1080-1086 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f830149cab8b1c233201eec540ac1e3a9a05d536245043386cddd5b1f3abd0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:404-410 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:450-456 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala:404\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/pivot/PivotTableMacros.scala"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3a24ed61428d5325d5d4cfa8b793d195cc0081926f9a5256a74289d36c5ca85"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatter.scala:127-133 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:78-84 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatter.scala:127\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatter.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"31e2203c7f84f943ae4e56e0a90e3227f8ba2dfdf463977facaf5189e22e3bb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALLanguage.scala:61-67 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/pubsub/PubSubLanguage.scala:65-71 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALLanguage.scala:61\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALLanguage.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"801a7f4c365d67231df329cd61ac1155c276a11c60b80fc748d6ab07c27c8fe8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala:249-255 | optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala:1004-1010 \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 \u0060optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala:249\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/PostTyperCodingStandardsComponent.scala"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"f05a3a2579a0ad1b409bce000d486d2c8f7f38ad1b14442f3f730c11f2c1d67b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 20): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:84-89 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:114-119 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:147-152 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:183-188 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:222-227 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:264-269 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:309-314 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:367-372 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:441-446 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:521-526 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:606-611 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:696-701 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:791-796 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:891-896 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:998-1003 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1110-1115 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1227-1232 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1349-1354 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1518-1523 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1737-1742 \u2014 all 20 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 \u0060optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:84\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a183344690cc5d0663b2e4b55aaf347652304576cfedfe9f272014b8dfa6a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:239-244 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:278-283 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:328-333 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:382-387 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:443-448 \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 \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:239\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:284\u0060 calls \u0060unpickle\u0060 and \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:245\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cad6cf27d308c2e11dc7f2d78f2793a83110ec68ae686c1ba4cd70bf2b240dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:110-115 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:118-123 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:127-132 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:137-142 | optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:148-153 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:116\u0060 calls \u0060Tuple6\u0060 and \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala:133\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/VersioningUtilsBase.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f25a7de93f98d097ea7993e0192876bbc4ec3302640fbe81f3bcdf8a1caf49c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:57-62 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:57-62 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala: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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"454cc894db5b9feefdd483e038743f7da6a396f86c74a785ea27063fb49bcd39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:378-383 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:393-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 \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:378\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed5969545da4776972f8c6b59b2e1a41bc86655e709c3dd5836b598f0768b404"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContexts.scala:78-83 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContexts.scala:114-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 \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContexts.scala:78\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContexts.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"7535a2cb25fabd4498e0dd781ce516a8438a442c2c560043f130f9043c570132"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20136 lines \u00D7 7): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:71-76 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:148-153 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:163-165 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:209-211 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:276-278 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:401-403 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1731-1733 \u2014 there are 7 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 7 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:71\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala:76\u0060 calls \u0060TxTime\u0060, \u0060setTxTime\u0060, \u0060toProto\u0060 and \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:165\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"30395dc3491325f781d80fbb6b20a8280a6c09a58d4b7c396a48502c16440a20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:167-172 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:405-410 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:167\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":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"b018ee2dcbc5d52951291e80ff3e545a98f826659b6c02459a6dcb8bbe342c1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala:240-245 | optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala:290-295 \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 \u0060optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala:240\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":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"b25a417c20b7c39319a6b0bb619e12235aafec1dceb6f8a52b22a24067684957"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala:496-501 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala:532-537 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/DefaultQueryProvider.scala"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"7672c8a95de8a622aaa08156e4f8b32c5433c532b39837a40891becb3b1e03e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:118-123 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:144-149 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"a24acf106de8dcf0eb3bb23710167c01aec4cf6e6b25bcec43743c71bc226b39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:216-221 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala:385-390 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/formatter/Formatters.scala"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"3236d975fda4c6d09db13367c3d26fdf2c034fd21f5b7bdcb41602f5505709c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala:213-218 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala:305-310 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"553704772b99a824ac1426d8740ae301d2b059f828a1c23f5b296348f2b4df19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala:60-65 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReducer.scala:38-43 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala:60\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"39853f15ef9ed77bef20ffd439e578ffe5fbdbc99271f130cfc2f17e18912b5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala:112-118 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala:141-146 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala: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. 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/SpecialElementRewriter.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"44cf7059af16297b858e2bcbc50a16c58a5a028ce7ecc67c17c1669ccff45c99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 21): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:52-56 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:77-81 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:106-110 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:138-142 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:173-177 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:211-215 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:252-256 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:296-300 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:353-357 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:426-430 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:505-509 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:589-593 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:678-682 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:772-776 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:871-875 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:977-981 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1088-1092 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1204-1208 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1325-1329 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1493-1497 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1711-1715 \u2014 all 21 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 \u0060optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:52\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cf21c950c128bd0f1aac423bbb6f5fbd8ad3e750ed7c9e088840cf968089615"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 14): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:316-320 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:374-378 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:448-452 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:528-532 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:613-617 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:703-707 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:798-802 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:898-902 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1005-1009 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1117-1121 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1234-1238 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1356-1360 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1525-1529 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1744-1748 \u2014 all 14 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3d4027eacf4a0167783da6588f4d52c307e959a7efa0042026c960db6e7d51"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 9): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:708-712 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:803-807 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:903-907 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1010-1014 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1122-1126 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1239-1243 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1361-1365 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1530-1534 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1749-1753 \u2014 all 9 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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"379d154ee326d92fcc3ad5d063b54410fa04af0aa7e11c18e56e6c1a82a550c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 6): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:203-207 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:239-243 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:278-282 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:328-332 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:382-386 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:443-447 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:203\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:244\u0060 calls \u0060unpickle\u0060 and \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:208\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"5690509ef5d2b923413159700db776d525c282e20fadd36cc053aba6f950eb6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:40-44 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:76-80 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:112-116 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:148-152 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:40\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"c27b9e9ff7c488322ed9dfef69497563fef6bb130ebbc734a0b134259fdee2e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:40-44 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:76-80 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:112-116 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:148-152 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:40\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc32783b661fba79f29dd1a1becff7f5fd214ce87173d1702aa853cbd7a6ee7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1244-1248 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1366-1370 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1535-1539 | optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala:1754-1758 \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":"optimus/platform/projects/spray_json/src/main/scala/optimus/config/spray/json/ProductFormatsInstances.scala"},"region":{"startLine":1244}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9d1ef91402fb0fc829e222fe79990333ac21af98b619ee0dabe742ce306eb91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:55-59 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:117-121 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:180-184 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala:55\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/StandardDeviation.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a3a2875fd5a34b033c57255e2a00dd1f5d8c3435101ec3d3cea74e21136e7fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:233-237 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:276-280 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:319-323 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"f390d9978384fe542eb5da9503e2c37b436a748ec2de5ee9bf24117e9855610c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:347-351 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:295-299 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:347\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"e188144d3f0614d7216e242430b63f0aa7de36fb6d8bd95ee6fee7e1ea3d10c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:354-358 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:302-306 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:354\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ad39123ecba24b04f8ec88d16e31df6e125d7719fd9ade8b477ae18522489c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:361-365 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:309-313 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f90e6f2d074f91d4ded3348d61711a40dd6c7993849982bf8bf6d75a73b4f4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:368-372 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:316-320 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:368\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c4cc12562b4bfeed4e25ed02db0a1aecebb27a4895adb427b6fbe7b14c16e4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala:43-47 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/platform/ImmutableArray.scala:42-46 \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 \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala: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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"34b4f5caef679111a29c999a16462b6d0df937aa9e001c19be4db90c27b55c5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala:90-94 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/platform/ImmutableArray.scala:90-94 \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 \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala:90\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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b5aff0dd5edc0720e46a50ee9bf9ea30cc6e2d04754922d824c6402f9faaca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:390-394 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:403-407 \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 \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:390\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":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"b67119b4b2f37002cbffdc614524aca0586ac273b431b3d7a9f11dab221b3922"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala:457-461 | optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala:469-473 \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 \u0060optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala:457\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":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"11516e6b94cef5532d284af9001a60823fe4fa2c12a43a3dbd6ebcfc1c460620"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20135 lines \u00D7 3): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:346-349 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:401-405 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:463-467 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:468\u0060 calls \u0060unpickle\u0060, \u0060s\u0060 and \u0060optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala:350\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/TupleUnpicklers.scala"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"17480fd0000764b1bfadbb83093c047edea8fec9765ccf030304b31b473561d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala:201-205 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala:393-397 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusDALRefChecks.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb88e53412c4e793233102b489d51f240cb7627e480cc9ad4897ff6f188429c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:114-118 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:120-124 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"c990e667705b13096680117a0737477c7dfd1ace19f57942331d6224d304ba59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:60-64 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala:84-88 \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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/excel/ExcelSource.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a1ce2dd75cdb374095a1bf017f9a01600ff6f0a9d42d9e4226db2d92008a96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:386-390 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:413-417 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala: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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"efdb1ae74822895670f7a1df455d10245366a538d7bd0dbca3960debf959ad89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:396-400 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala:423-427 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala: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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableRewriter.scala"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4db8a4b4ea510eb465a4b020218792ae77d04b42ce2f513413f47784133cb64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala:104-108 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/tree/LegacyMethodElements.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"d106993de55dc13fd52aaf83d4db9544f161dc8f97f58a3ede28866cf7f58fd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:168-172 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala:276-281 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:168\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc901efe19dcd61876dc1555c10f8f6fbccf9cc6f0d3dfcb0348647f1c9f95c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala:133-137 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala:221-225 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala:133\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PicklerSelector.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e0defa28dc977d5c2dc3d7471504ea9f7390f40ae55153659d9f133dccef5f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala:101-105 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala:143-147 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala: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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALRegisteredIndexBinder.scala"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"067f2182e0ca994de3943f101c2edac6f6e4670c19dbe71f9c9e1a75a2e7a086"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/proto/ExpressionDecoder.scala:194-224 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/proto/ExpressionEncoder.scala:233-263 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/proto/ExpressionDecoder.scala"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"30014490d92eae5ab4dcccad1178267fbeb60ee4778a97b3ef67247bc042c9d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (67 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSupport.scala:15-81 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSupport.scala:15-81 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSupport.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSupport.scala\u0060 as WHOLE FILES: 100% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSupport.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"c13ba84d929ed7208c362b81f1792285ba8634a772cee758b77bafd609c8501c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (41 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/RedBlackSupport.scala:25-65 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/RedBlackSupport.scala:25-65 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/RedBlackSupport.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/RedBlackSupport.scala\u0060 as WHOLE FILES: 100% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/RedBlackSupport.scala:25\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/RedBlackSupport.scala"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d58bc574dd4ba63f93e72e445fc68ecd59a50fe8622f0001b818a473e399dc6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): optimus/platform/projects/core/src/main/scala/intellij/only/DoNotUseIJCompileTimeEntityInjectedImplementation.scala:36-49 | optimus/platform/projects/core/src/main/scala/intellij/only/DoNotUseIJNodeFunctionConversions.scala:21-56 | optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/DummyTraversable.scala:21-75 \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. 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":"optimus/platform/projects/core/src/main/scala/intellij/only/DoNotUseIJCompileTimeEntityInjectedImplementation.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"228e96fdca8cf6b3ad41f9e6605242d4e5f0930f0a4b9125b8a9b819aaeee195"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/intellij/only/DoNotUseIJNodeFunctionConversions.scala:21-56 | optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/DummyTraversable.scala:21-75 \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":"optimus/platform/projects/core/src/main/scala/intellij/only/DoNotUseIJNodeFunctionConversions.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da34ba56ca6d9edc14eac16a74aa60d9d01791435c763371251f3452d6eb8bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (57 lines \u00D7 3): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALMappingEntityFactory.scala:38-94 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/FullTextSearchMappingEntityFactory.scala:41-109 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/pubsub/PubSubMappingEntityFactory.scala:37-123 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALMappingEntityFactory.scala:38\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with 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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALMappingEntityFactory.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae3888cc2c88573e44ec7b79ae515e14c59787e1ad8505ed05fc800d99ea8e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspBuilder.scala:194-199 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/Utils.scala:316-321 \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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspBuilder.scala"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"618873f385d0a8676bfcb8a9b2ad0e252de0faa80632a5827a6112134b2d3875"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/buildtool/projects/core/src/main/scala/optimus/buildtool/runconf/RunConf.scala:111-117 | optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/Template.scala:64-70 \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":"optimus/buildtool/projects/core/src/main/scala/optimus/buildtool/runconf/RunConf.scala"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"9096cdc84a33169f5b727892e9bc5220aed873a2e567da132bbd2dbe1745bf25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/utils/PathUtils.scala:64-70 | optimus/platform/projects/core/src/main/scala/optimus/config/InstallPathLocator.scala:274-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/utils/PathUtils.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ebeb6acc786832beb0a2ed4b30d2576843cc369836103e52223eb3ed6c8e319"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala:114-123 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala:119-128 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ab67db987a438ad95097c1e91ddce692bbee0a001d6ca24fd27ccc5eb3ec259"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:80-92 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:59-71 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e145a17d31e910ea73dce2b087cad2dafc061b1f28226cca1e7f00613a7dc36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:102-106 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:81-85 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a4badab5bc205979d87caa5a4dc49c1924bcc690e250cd09f7df44d5a826408"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:113-122 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:92-101 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"b97ff98c338ac19b6b1b63278e06fc5c8dceddbd9c32a5f584997db7d5d919b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:123-135 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:102-114 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"54bb70ca541af37380b9944be02126e3037475653ac0da8099483b45e323e01f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:137-143 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:116-122 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"8460d6f783dccbfd89da856c400987d16bd7d352599114c2cc0b43814c9dbd45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:208-213 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:187-192 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f5bfc005b51c23a2d4a42756cf250a5dcf2f02ed95a72a86dceac052403deef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala:224-231 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala:203-210 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusCanBuildFrom.scala\u0060 as WHOLE FILES: this scan already matched 11 separate duplicated blocks between them, totalling at least 106 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusCanBuildFrom.scala"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"e026aa31910731062b25f34dac2b78dd0b14b9b6812f8d7791bb20a17ac20f45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:151-160 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:169-178 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dae9982698e64fc7f6f05c634df926293c3df7e69ed69a0a0741cb5a7c6d469"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:161-168 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:179-186 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fd8b71c10ad40b5d5ce680202eb8716de231188d05fa5ae73f9191c882649fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:249-259 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:270-280 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6c99a17e609df49e9578eb33019de3b0b4495a87012d423928a9f6d07a2332d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:266-276 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:287-297 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0e9a9c2b5b2f7ad215cb328ff3db45cfb490a7902f42568f2992d6ece7a3c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:436-444 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:480-488 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:447\u0060 calls \u0060apply\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:490\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"5267ae9b6ec6be6c960d33be9a4ac83c282559304bc009a6cf67b3d2305fa228"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala:528-536 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala:569-577 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala\u0060 as WHOLE FILES: this scan already matched 12 separate duplicated blocks between them, totalling at least 153 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f6c4f6e6f583a09eda92b0818b9274c55f9a9bcfb30ce12fa7197c52277e7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:32-37 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:32-37 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d829d0179d8e00ff6b40d6dfa776d4278002b1be27746fa56dca9040276627"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:226-234 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:224-232 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b714aa808ee9db3d66586ce3cdaacf81e6ee970f9dc985d6b51b745a55e1ac7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:168-175 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:157-164 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"78a9a320961f3be334d7d867117ada794ec45433462cfb35594386254d4e5c6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:177-184 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:376-383 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e7dc664889d07854f4658ae3068c33f10709569c9fd16b758907fdf61f58634"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:187-194 | optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:386-393 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"58d5973b8c78c13f1b690c2bab11e7c5d2712b1717028f3ee984f8baedd60236"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:196-206 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:181-191 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0d1f9ce4d25d9184d754dabfd88f8ae0946d115ab69c92bc23b62c624113b90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala:207-217 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala:192-202 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArray.scala\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 165 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArray.scala"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"15a393830a368afaf0874ee17192b7e2feff14366edbd469d2a5957d726728a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:174-180 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:148-154 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5c098cb41b2f97969fc8ebf43b7fa80c171e5dda7f602b54e2a9091765c396"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:182-190 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:156-164 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d8223e51dc43ab4c050ae9fee86a45dc64d259eb2b9953bbf91de05a3d24d60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:191-199 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:165-173 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6b35427aaca76c3659e327d5bf9f03b8d54976955ec5a1a06a2e35329fbe3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:333-340 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:308-315 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bb94c0f5da6e3b2bcd96993109b167027cd48c7053290775682f9e6bbab2e8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:160-166 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:135-141 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdd6c12530f683dbf54638f9c315572d1d50bf429163aca5531a837963db4ee9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:170-174 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:145-149 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"24e277cceccf063c4c80e8db3bf40b5752eaad0a31a370e6bcefa836cca9b832"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:185-189 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:155-159 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"15be8744fbe02540243995aac2f4b6d82743b239e697ddf13c89164daa64cee1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:190-194 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:160-164 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf059894ef1ff771e11cf0e629293ad88ea09da22e1fb299091c83fd5eba254"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:195-199 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:165-169 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"118427bdecaaafe652fd6e8aabbab8a08ac98cccdac2ebd6367ba31a4f178c1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:200-204 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:170-174 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"07b3c055fcfbb1401a7b0c03ad7752dc6e9c88cd9a36cca704f5b9b610070d06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:229-237 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:195-203 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"662d1c7989db4ea0146ced4223246d1e5a0ecb897d61a8146f74296a3f4db437"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:241-246 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:207-212 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f097402973c58615129d774b3c2b9d48a075e3160847dbb948d56497c0a96a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:254-258 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:214-218 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0c6e1e897f821d9cd9a2c8b0532bf40ceaadb7592a5a228c2275ff1397801fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:259-264 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:219-224 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9253329d3f1ddad9ebff6881a6b2cbb2a704c94e6b368448496d75f8b1a234f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:265-270 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:225-230 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5a8ded4a6ed7f6c9145ae97d7924bf61246514f1d2b3f1cea895d950dafb84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:271-276 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:231-236 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fc09256a34871df3f6d19c8a1e9fcee6bb770a6f8195d336450b461b4b264f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:277-282 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:237-242 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"77a00221e82d4eea657191bc8e641c13d917ab599e8b14debb822fc985ce65b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:324-330 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:280-286 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"69aa57994a5f56ed2b57b498841a40b05b814967706a110f78164a13edf044a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala:339-344 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala:287-292 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqSmall.scala\u0060 as WHOLE FILES: this scan already matched 26 separate duplicated blocks between them, totalling at least 181 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqSmall.scala"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"c954f0946bb50c2e0c220c6786ebb9d9b0809d69b1b70d9570e9c3b5b64f3f23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala:65-69 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/platform/ImmutableArray.scala:63-67 \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":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/ImmutableArray.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f4ecc99d23fe72aa996be68f2eb22219b9af069c38e830aa999bab5ee8a6403"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/GraphMBean.scala:132-137 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/UIProfiler.scala:52-58 \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":"optimus/platform/projects/core/src/main/scala/optimus/graph/GraphMBean.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dbb56be1087118cd66b5df6456863f6ec7541ac264b4e4cefc613d3c2a55f7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/LegacyGCMonitor.scala:147-151 | optimus/platform/projects/core/src/main/scala/optimus/graph/gcmonitor/GCCrumbs.scala:83-87 \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":"optimus/platform/projects/core/src/main/scala/optimus/graph/LegacyGCMonitor.scala"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4676f9a9711504b3b6c871aab9cb077b411d77f51c8df68e13ee47b57313c8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/LegacyGCMonitor.scala:487-491 | optimus/platform/projects/core/src/main/scala/optimus/graph/gcmonitor/GCCrumbs.scala:93-97 \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":"optimus/platform/projects/core/src/main/scala/optimus/graph/LegacyGCMonitor.scala"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"f336e523d13e046e6074e459c9cdc28bba37f3223ca3cc7eccaaa69510c1d9d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/Node.scala:598-606 | optimus/platform/projects/core/src/main/scala/optimus/graph/PropertyNode.scala:500-508 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Node.scala"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf12fd04f101526e489c3a9085504f0e7070fc6290c48633186fdfab64a9d00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/graph/gcmonitor/HeapUsageMb.scala:74-79 | optimus/platform/projects/utils/src/main/scala/optimus/utils/GCUtils.scala:105-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 \u0060optimus/platform/projects/utils/src/main/scala/optimus/utils/GCUtils.scala:105\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/gcmonitor/HeapUsageMb.scala"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"6973b100397fa7dd8699b3bbcd99781a3e434b75f471307ff5b442f4f8e5b9f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/PropertyMapOutputStream.scala:339-349 | optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/filter/Condition.scala:517-527 \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":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/PropertyMapOutputStream.scala"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"28292744735c08bb172171bbc80a4c30ff52af142fa731170818d7b37aa1f367"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesNotificationStream.scala:636-645 | optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/pubsub/NotificationMessageHandler.scala:435-444 \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":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesNotificationStream.scala"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb6cb3065a60a7a5a4bef883c5c2ca8ca2ccc9cbd1fc884dafd6519fa67bbc40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionPriQLFormatter.scala:213-218 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionSqlFormatter.scala:108-113 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionPriQLFormatter.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"3859f5f9bd2f5d900c4fc784d4896a35542610c4d3d559e76ffa0711c9026864"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionPriQLFormatter.scala:267-274 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionSqlFormatter.scala:74-81 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/expressions/ExpressionPriQLFormatter.scala"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"60266cf31815be78e934face91731013dc787d7d4e97dd93a0ace18dd834da50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityPlugin.scala:39-43 | optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingPlugin.scala:43-47 \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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityPlugin.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"c98a9c8e0616e8eedba2d8bb3424168c6e521fda980eba5931fba9a9fd2aca5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GroupMergeDialog.scala:117-122 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala:678-683 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GroupMergeDialog.scala:117\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GroupMergeDialog.scala"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5669e0862ff70b396596bae1b1f6223679a45d696bb579133f4c87f2a98896a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/controls/GroupByButton.scala:114-119 | optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/controls/ProfilerTasks.scala:71-76 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/controls/GroupByButton.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a2e8170e37d2b56c822c1f78d4e17e375f0660ca6bd729850e770bf791b7306"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala:197-201 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Min.scala:197-201 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/aggregation/Max.scala"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"454d600c0d24820b086e56a01c26c9ddb8cc06005985e9f3b86b29f9ffd465e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ScalarSubqueryRewriter.scala:129-135 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/tree/DbQueryTreeComparer.scala:96-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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ScalarSubqueryRewriter.scala:129\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/ScalarSubqueryRewriter.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc195831557e1384cdd8abf046b768b5ee14e5f3f68243151bf57a00115f9032"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:112-120 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:119-127 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 60 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"cebbb653ea136f5e18bb7bbe9e678201ae4e5248a5ffb32254487f58cca4c71f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala:45-52 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/FullTextSearchBinder.scala:27-34 \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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"eecc9b6b87e09a4829c559e7aaed8da48a326686ffd2bcf683f6e10676171865"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala:91-99 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/FullTextSearchBinder.scala:69-77 \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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"124d84b15afcc6d3f7befe710f706c5d2fe91679cebb3e3a685a4eae74483358"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala:293-300 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala:151-158 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchLanguage.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALLanguage.scala"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"57505270efb90d1ca5cf956f84b98369e59ef4ef44f21b9e35b623d67c0181a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:69-76 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/FullTextSearchBinder.scala:104-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b05f513760eb07e40d74381742a766bd81c63c0d7d715119d41c819243e8fa1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala:75-79 | optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/repl/ScalaRepl.scala:68-72 \u2014 before extracting anything, compare \u0060optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala\u0060 and \u0060optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/repl/ScalaRepl.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 68 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a2cfef0dca605ab2cac324ed5b4fa3947fe03e1947a50aef9b1aba15126ae7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala:262-272 | optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/repl/ScalaRepl.scala:264-274 \u2014 before extracting anything, compare \u0060optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala\u0060 and \u0060optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/repl/ScalaRepl.scala\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 68 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/repl/ScalaRepl.scala"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f0344a321dd3ce2023bbfbbfbfadc10eed85f5866083c6c3b624e50f938364"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/ScopedCompilation.scala:327-332 | optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/ScopedCompilation.scala:345-350 \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":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/ScopedCompilation.scala"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4d4cd8c696c842a52573d8893039d0bec0a403b82a632eba0ab0f6e190c62e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala:242-246 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala:240-244 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala\u0060 as WHOLE FILES: this scan already matched 16 separate duplicated blocks between them, totalling at least 252 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6f5f43861810052f40af88a38892b319c63af0ed76c8c7747670ef586546920"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala:88-94 | optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala:62-68 \u2014 before extracting anything, compare \u0060optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala\u0060 and \u0060optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala\u0060 as WHOLE FILES: this scan already matched 22 separate duplicated blocks between them, totalling at least 355 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"54cb927acb5573a0dc286c1b92b6a731fd4f968f36e60eb69182b30b26b1da64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala:454-458 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala:471-475 \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 \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eae42867128804239bf7588c6cf09616542beca31ebc4c2827c5089360651f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1791-1795 | optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1831-1835 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1837\u0060 calls \u0060valueOf\u0060 and \u0060optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala:1796\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1791}}}],"partialFingerprints":{"codehealthFindingId/v1":"c94d7be0f16033edbd4eb997e463207122ac44fdd5e3cf2ce04f65cd7229ceb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala:401-406 | optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/PluginUtils.scala:320-325 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala:401\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"8434183bbbd9b6bb3c2c077b2e45cee4e6331247796e35581553ee77004bfd49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala:787-791 | optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala:894-898 \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":"optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala"},"region":{"startLine":787}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aed155887466fa0dc459e058a6c25d3ab277c9f35a34f6935d2fc9257db4179"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:201-206 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:207-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:201\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7f43a065c08848b1e654d2590a10aae7ff733de28dd91799ede52aa5a7074ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:557-564 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:326-333 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala:557\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/translation/DefaultBinder.scala"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d88fbdf35f516b3065e65097a4b49e4a84615211e4065ec187c576c883e7f7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:265-270 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:286-291 \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 \u0060optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala:265\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":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/inmemory/IterableProvider.scala"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc386eb05558375c34daa0daf9363fef0a7161d9cee7f9736b22c703ed924646"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/serialization/QueryBuilder.scala:715-721 | optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/serialization/QueryBuilder.scala:740-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/serialization/QueryBuilder.scala"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"b01440e48cf7398f6f2bb38ad701039a7447e15b0b0545afbedc98c89f1edc8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/DALProvider.scala:339-345 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/DALProvider.scala:350-356 \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 \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/DALProvider.scala:339\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":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/DALProvider.scala"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"26bb57ed94743681ad6a2680f64076ed0b42e9522462e8b28244f8c5ade9d6d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:157-163 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala:217-223 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:163-169 \u2014 before extracting anything, compare \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALReferenceReducer.scala\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala: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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala:164\u0060 calls \u0060FuncElement\u0060, \u0060List\u0060, \u0060bindMember\u0060 and \u0060optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/fullTextSearch/DALFullTextSearchReferenceReducer.scala:170\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReferenceReducer.scala"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"6132134f32f8af825c28feb4fd09b48237c90fdddcb32ed5212dfda50729b3bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:130-134 | optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala:136-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c6f3c430aea88b7d4312bd05020a04cf60c973e96d325a6e83e8ebb76ebaa28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/package.scala:65-69 | optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/package.scala:72-76 \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":"optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/package.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4c1727bd6d3982c2c0851155f6d4bff82dc7fb367fb800b9e0c17dc88e35f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:227-265 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:139-177 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 157 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:227\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"19275a14a7d76b01a5a3078a08714570e2b2669cc33ce501c5cc4674dd8b4142"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:258-288 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:209-239 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:170-200 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 94 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:240\u0060 calls \u0060debug\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:289\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe9f32445d8bd7d5d6120a74fcd75712760003caab034c7b9d7a7207486ec97d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:183-209 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/management/MetaToolModuleBase.java:137-163 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:183\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb93956db6b07aaa62b0f9078637fbb8fcd9861d64ed392d998773d2ab10e38d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:734-759 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:896-921 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:734\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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2dbcbb74fe7f8bf1ab3a736903d6bc091453aaecbfdb936c6b9c3b08c25924"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201325 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:233-257 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:182-205 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:145-169 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 94 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"7693c751ab57d416e4584b6a8e02dc626f6dc83db08b9bc6291b2e9cfffb7b4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java:354-378 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ManagerModeDependencyWatcher.java:246-270 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ManagerModeDependencyWatcher.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 44 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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"7613a5c45e037c35429704bd002b4695aa16b524ac979525ff7f827d488e09b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201323 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java:44-66 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Zip.java:39-58 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Zip.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 56 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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java:44\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"67551c3253cbf45fde443bc7bde97716d3af589ce5acabf4e1e770157ec5014f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:145-166 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:169-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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc344133a429cedbb9e1932cf5bc3acbe00d50be2663b97e19d233c38c4c34d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java:220-240 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java:250-270 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java:220\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"06bea3ddbf98c7b4695542f644911cf54bc38a61c865e3d8b7b01b2314ea1e87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java:90-110 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Zip.java:70-90 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Zip.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 56 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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java:90\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a7e46bbf2c1bd83ec47e3427f90ca3acd45a18e9a93f9a8ce702bc17dd8745"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:307-326 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:747-766 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc24fbda54c260d5c38923de2ee987fb8dcd307b83fc648b6a4b62917bd58a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:217-236 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:267-286 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:217\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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"022ea7d620dd16c220c7cf7461db0c384fbafc17cca9e95b927fd6a626181c4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:73-91 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:78-96 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:73\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"b03fb25c3fe70367ea9df8f1173be47ce15bb67412e1649524eee2d0c984b255"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/io/StreamUtil.java:191-209 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/io/StreamUtil.java:228-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/io/StreamUtil.java:191\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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/io/StreamUtil.java"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"808e27a091fc1aef90d1bb9222b3400f862613f6703e46432045d708b3cb5503"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:362-379 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:331-348 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:279-296 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 94 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:362\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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfa9d62ba69a29c8f34f1a5f87852798215aec67cf9f1602038d2b24db44cf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201318 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:140-155 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:212-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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:140\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"296fc373d96f1d0b60522f902c438510eebce6c49bf157f2cfe6d630a7ad8794"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:545-563 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:658-675 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:545\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae89310354f999150b045a10a14325d4074db49fc8fbec2b4cac67b9f6ac679a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201318 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaReader.java:128-143 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaWatcher.java:217-234 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaReader.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e8801aa4e012b64f70c3ba584f966b71c1a7efab5d348bfaa92ca016c8588a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:222-239 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:157-174 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 71 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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"067f39a57444991de4566e100ee62f8ff6a5b12a6f4491425b170a618c1f8cee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201317 lines \u00D7 2): optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:183-199 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java:126-136 \u2014 before extracting anything, compare \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java\u0060 and \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 54 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceaaf12d066ee1820d5a87cf3a371fe902914fc35cab7bc20436c4a9bdcff6d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java:82-98 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java:227-243 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 36 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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"a47b6451d5d2215b05cb7652bfbb08095d9ad5d5022371824514e920bf3ea8b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/fsm/IntegerToIntegerMapElement.java:40-55 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/fsm/KeyToIntegerMapElement.java:41-57 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/fsm/IntegerToIntegerMapElement.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb8780d8715a86c2177e91c967ebd76b05c61bd39ee8c27acbccf164fbf355d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:599-615 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:667-683 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:599\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"d565191cf886f6546c354e7aa67e4b46cfb61fd0f9c78f982e7b8177e8a9f584"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:331-347 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ObjectDefParser2.java:274-290 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:331\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"24a80bc21dbb2662f6a0cd3ac1946e43b3b9043a88f7155c562f1e07bf2cde25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:786-801 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:974-989 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:786\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"e20e128e1444dc2e326fda3a057417258b884b613599e6eef869937c55815835"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/deps/DynamicDependencyDiscoveryInstrumentation.java:108-123 | optimus/platform/projects/entityagent/src/main/java/optimus/deps/DynamicDependencyDiscoveryInstrumentation.java:139-154 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/deps/DynamicDependencyDiscoveryInstrumentation.java:108\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/entityagent/src/main/java/optimus/deps/DynamicDependencyDiscoveryInstrumentation.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"589e78bca0b88ad56c2d241bb413559c8ee04b56ea9bee7a555280c2d7d2f74e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/ByteArraySerDes.java:38-53 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/RawByteArraySerDes.java:39-54 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/ByteArraySerDes.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/RawByteArraySerDes.java\u0060 as WHOLE FILES: 83% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. 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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/ByteArraySerDes.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"12a3bd8e2a192796fd24560a2a63bf0de16fed6a1fcfacafc95ead2502863d9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:41-56 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:46-61 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae763708439439af7531dae813a0f42dc882d6a1d9a396d13e12fdf46c1dc56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1Digest.java:23-38 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5Digest.java:23-38 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1Digest.java\u0060 and \u0060optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5Digest.java\u0060 as WHOLE FILES: 86% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1Digest.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"29582ad76399e7d467a600a4e47de065302020803e729c9c9783aec736c4eb4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:324-339 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:244-259 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 157 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0e8800c800b1dbc2958a1d802a5d2fc3d3c729cc4c882c9ba2e0d994109788e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:598-612 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:639-653 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:666-680 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java:598\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"df69099078381c28381c0a4f0497c9fdf31a64d1865b8606211bbe5e836ac13d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/CollectionInjector.java:197-211 | optimus/platform/projects/entityagent/src/main/java/optimus/CollectionInjector.java:230-244 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/CollectionInjector.java:197\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":"optimus/platform/projects/entityagent/src/main/java/optimus/CollectionInjector.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"4192239bfc7349b5b212666f7456a3177ae3ef37f38a11c80e8e29cb01f4979a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201315 lines \u00D7 2): optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java:395-407 | optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java:419-433 \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 \u0060optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java:395\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/platform/src/main/scala/msjava/logbackutils/async/internal/AsyncDispatcherBasePatch.java"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"27df228e7cc22a3bbd921a8d462688a30c5a84782f67c80ad97d9782af794f79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:84-98 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:94-108 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d67dad641cab8e93c76843ab0ea6bbab0b30fc054465c5123bf9a378cd91a2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:211-225 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:205-219 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:211\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee009c01f25dfd24fd64e0822492a2b7331aeb72878cfac6ffebc400cec30fed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:420-434 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:394-408 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:420\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. Note first that the copies are not typed on the same thing: the declarations holding them bind \u0060key\u0060 to \u0060DHTKey\u0060 in one and \u0060int\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:435\u0060 calls \u0060of\u0060, \u0060toString\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:409\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c5d7860d115b2d83ed5cf1137956f3919c38280a3c469ab6e6e2d8173eecaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:145-158 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:174-188 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:145\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c418a50b426e696c30cede0d8ca2e4821fa8b4b220ea7c9977e1d569645fab7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 4): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:171-183 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:210-223 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:357-368 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:402-413 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:171\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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"e519ca15a11598dcfa9ec33300e4bf95cbb5a1d670af8f5400b5839f94cc555a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:114-127 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:194-207 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/management/MetaToolModuleBase.java:148-161 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:114\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"7797982b4dbb1b3ec0ee85423f299b79b1c1510a68bf14886ee4691b222c9f74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:58-71 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:63-76 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb794d9c604ad065d0f2404026fdbeeab4d94a0510e3598e2d9f87e342e2c5a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:114-127 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightsZK.java:104-117 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:114\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"6483b3401572bf05b086085f7ffa9a8935dd318b7c575011929ac1a7b029f3fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/ExclusionZKBase.java:54-67 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/SuspectZKBase.java:46-59 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/ExclusionZKBase.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"02dfa6f2ba7a77f12d4906b4c5aef6fc73899c2e2b539276ab784ddf4dc6755b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:273-286 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:227-240 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 108 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:271\u0060 calls \u0060debug\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:226\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"1729e50383b8b90a5dbabadb166c0856c31ce68d7da6b6f8aebfedfae376806b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java:53-66 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java:73-86 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit. Note first that the copies are not typed on the same thing: the declarations holding them bind \u0060a\u0060 to \u0060T[]\u0060 in one and \u0060byte[]\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"045ec2749786dc16dfb75494be89d80df4f34fcf6a4f9e04fcd49dedc8ad5d23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java:186-199 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java:206-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 \u0060optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java:186\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/ArrayUtil.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"22da12382d0f841024da55810affe18c001e8df5ecd022639bb0226b9adf6cf7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:85-97 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DebugKey.java:162-174 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java:107-119 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java:252-264 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc710c4c2a997947500bf2ef942a12ca913cbb408189fb61872675fc88b721d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:386-398 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:430-442 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:386\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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca2c2196c163246fda5b2303300945f977bed8390f0f0c22d7bae78210b8b86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveRetrievalListeners.java:205-217 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveRetrievalListeners.java:222-234 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveRetrievalListeners.java:222\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveRetrievalListeners.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b05655a0615c1e0a81ce07b2bed3d0aa07c2ad323dc2489fb490a68c548570c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java:355-367 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java:642-654 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"193828c36f2eed9900cecf8e84c1705a36d4bfcf44d06ab0088786958f7cf0dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:233-245 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:157-169 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:233\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:231\u0060 calls \u0060debug\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:155\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f95ec9764da6978773ccae3389d9f79dbce715cd5150a4ad182df8bbc048a2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java:97-109 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java:184-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java:97\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba2ddb286c7a238636eb2b97e18323277adef764be77d02e053d6650b736abb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/analysis/netstat/MultiTraceToCSV.java:58-70 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/analysis/netstat/TraceToCSV.java:52-64 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/analysis/netstat/MultiTraceToCSV.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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/analysis/netstat/MultiTraceToCSV.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"5869c1218ee1e4a8ae58be5332779ee523c152d9c9d2af3868f6c574f95b63be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/StringUtil.java:103-114 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/text/CoreStringUtil.java:142-154 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/StringUtil.java:103\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/StringUtil.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c6e5a1da3d9d3cd9a1b1d74f9ea174695005f98546548c9859a8054f8d5e3a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 8): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:112-123 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:140-151 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:167-178 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:206-217 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:301-312 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:327-338 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:353-364 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:398-409 \u2014 all 8 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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:112\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it. 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:111\u0060 calls \u0060visitLocalVariable\u0060 and \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:139\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c8a0b16d7f5bcad71dd9293a4481bee4f15af38b52191d7fe99342fe9e6505"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201312 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java:123-131 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Snappy.java:69-80 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Zip.java:103-110 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/Zip.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 56 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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java:123\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/compression/BZip2.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"baece67dde89412919b9fd39a98e40f8b148da027ff6cf860bccd136038e72eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:42-53 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:37-48 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"049e60c850a9e194bd8bd51ac390fdf96d4ba46f37926f1254cb7e2d19adafd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:137-148 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:157-168 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:149\u0060 calls \u0060info\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java:170\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1a00d25b05997c0f7e1a0811869b91e15c19e6af1441bb3f3dab5a144d92ca1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ChainedIdSerialization.java:58-69 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoSkTraceIdSerialize.java:100-111 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ChainedIdSerialization.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de61feafa12a97d5aae8a17addcbe1e18d90930f0e0bc5a4de15c8c15c8dacc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201312 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingEntry.java:460-471 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/SingleRing.java:293-300 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingEntry.java:460\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingEntry.java"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"328635e05bb7bfb3aacd8d7b334fcfb19205c47e88cb186344abf0022886eea4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightsZK.java:124-135 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightsZK.java:143-154 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightsZK.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"3575dc550e723ef872bb9032399d487ff4421ce67bfda4dffffa34b91224a1e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:346-356 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:318-328 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:266-276 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 94 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:346\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:317\u0060 calls \u0060bufferToString\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:345\u0060 does not \u2014 after which the two agree again for 4 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"982e191a543127b977a7684b8dee1963be1f8fac0aae3bbeeba1eb3961b6b3b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:109-119 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:142-152 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:171-181 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java:109\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/LightLinkedBlockingQueue.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4941aede372a3a8a799e41a2f787ce394cc1dc137577a17a43d6f27f920a0c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/replication/BatchOperationTemplate.java:329-338 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/replication/BatchOperationTemplate.java:403-413 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/replication/BatchOperationTemplate.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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/replication/BatchOperationTemplate.java"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66314278399b211601c8ebd16a97b4475d9c46020f715b1dea581de6f7aad91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/callback/InternalCallbackRegistry.java:189-199 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/callback/InternalCallbackRegistry.java:225-235 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/callback/InternalCallbackRegistry.java:189\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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/callback/InternalCallbackRegistry.java"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bbd7decfe49f2cf6f6677340a3a36cafa46010eff684348bf016252e5f30241"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/stream/KVClientEstablishedStreamHandlerV1.java:122-132 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/stream/KVClientEstablishedStreamHandlerV1.java:156-166 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/stream/KVClientEstablishedStreamHandlerV1.java:122\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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/stream/KVClientEstablishedStreamHandlerV1.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"d248d701da755c0709bdc1c0b8458d158efef6d37ee4b8c410c4d312a567e08f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201311 lines \u00D7 2): optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:167-177 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java:115-122 \u2014 before extracting anything, compare \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java\u0060 and \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 54 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bae044695af42f62503da01f48bbfd8c64277246e77820600ef5df63e39bd23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:67-77 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:62-72 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8a633d55ac73d214281db9e58c9892ffb0b40ff692538b1909ccd05792b8fd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:105-115 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:101-111 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:105\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca860e3ed6621cef0fe8a33e24ce799bc7e47f3f26be080a350644e7eea49d02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u201311 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:722-728 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:753-763 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:722\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0cc8663f73187941da12f33bd6ec82bca26062d18e7bec459283ab9a6e82160"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java:247-255 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java:1570-1580 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. 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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java:256\u0060 calls \u0060parse\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java:1580\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"903344bca1157c532c76b2dad153fb3b7993096be9e4fe913a72a3eed537a32f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:297-306 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:349-358 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:394-403 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:438-447 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:297\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a46f43bec8e2ebe2ef592b89c7b0a6c07a3d684c478728eb01882a5ea0b96d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:163-172 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:202-211 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:242-251 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:163\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc261fc2c0b0dd2a040a3d4d1cf2304a652cac269c511df96c918ae1b9a7ce72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:93-102 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:93\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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"41d32bcdc3beb56a74502932b31529e5008aed3d554d05310fb8683ccd4396fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java:166-175 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java:178-187 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee4460e2fdd0383eb193236e746bf6b74079d1c8aaa5b175842c17b001b333be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/RegionTreePruner.java:71-80 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/RegionTreePruner.java:99-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. Note first that the copies are not typed on the same thing: the declarations holding them bind \u0060node\u0060 to \u0060NonLeafChecksumNode\u0060 in one and \u0060LeafChecksumNode\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/RegionTreePruner.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcef91b51976194b1a27936c9b0407fc07ddde65a0b915d6bb30b34215727797"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:62-71 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java:50-59 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be2e0f76e61b431b94fe5df5970f417a4d91ee044024be40dc219fc16b84bd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/RingCurTargetTool.java:113-122 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/ExclusionFileMonitor.java:109-118 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/RingCurTargetTool.java:113\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/RingCurTargetTool.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"921dc435206e8cb22372275e5ed5d6473ebc1dd213a6f7f0a0482be46579d6ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ChainedIdSerialization.java:56-65 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ChainedIdSerialization.java:73-82 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ChainedIdSerialization.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"84571056ab792099d1f2441da4db89d1a94aeed1a60afa31470e3ba5b94ce53c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:193-202 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:217-226 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"677457787c788e34ae7fd2b5a949244e453d7944bf089ee9ee11d7c0324907fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 5): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:94-101 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:146-154 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:284-291 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:307-314 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:333-340 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:94\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:102\u0060 calls \u0060visitVarInsn\u0060, \u0060visitIntInsn\u0060 and \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:155\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"b52f4987b3962c68d0d66f35d9f9505200e9d7c22b30e826276877a8589b9813"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:313-321 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java:279-287 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:233-241 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/IncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 94 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:313\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"c467f00b7091329f453964119ca3306ce67a8fd45b5273466e69a54c7f16b070"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:429-437 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:578-586 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:429\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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060entries\u0060 to \u0060List\u003CKVEntry\u003CK\u003E\u003E\u0060 in one and \u0060List\u003CK\u003E\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a717fe4125a8da1d98a3ff4d76def7c6de05c353eaf95df6374c0c577b1ddaf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/message/KVRequestsGeneratorV1.java:118-126 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/message/KVRequestsGeneratorV1.java:164-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/message/KVRequestsGeneratorV1.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ebf79d50a168d948d1322861da775860b8333f069e137878926eb93a2d9fa22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:235-243 | optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorAdapter.java:191-199 \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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ab7926d0cd00e59bfee66e030342d219dd0f51548cde4b5c835d951ca5b5e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java:288-296 | optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java:357-365 \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":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3c189cf1366e600d2b539442344fdd043f059df2a4f1a50a183b88242c34352"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java:56-64 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java:54-62 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java:64\u0060 calls \u0060info\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java:66\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"e95a526ab8ebfe3c97f341845fa5a45abf67e89b85594d826da6dcb973a27e35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:248-256 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:242-250 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:248\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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"82cd9b5db6a92edbbb737d94e684093344f4d9dba307d577c3c92d8a76d70b2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:206-214 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:230-238 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java:206\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/StatSeries.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7931b1e80df3901506b0da2dbf9096cf1969796304c915c0307b909cfa7c210"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:764-771 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:848-855 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:950-957 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:764\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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060entries\u0060 to \u0060List\u003CK\u003E\u0060 in one and \u0060List\u003CKVLargeEntry\u003CK\u003E\u003E\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"314e9fb73f8d2b06c68e88c12e7d1713d3a22b39c5fc03727ba0ad1bcf335dd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:225-232 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:370-377 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"90ac3c1eb7769814f64d28c9f36019b1ebfdf55c4144721efdd13b32ea8357b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:200-207 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:194-201 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"3670878c1a516f6fb79965ac7e0654b2c4bf4dac7271f002ba30c017bcf1c8cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/management/MetaUtil.java:105-112 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/zookeeper/LocalZKImpl.java:146-153 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/management/MetaUtil.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f966ab8e255f03c194e207eded0a030117ac0168be037f5dfd5b88d28e42c76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 4): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:721-726 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:745-751 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:752-758 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:853-858 \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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:720\u0060 calls \u0060info\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java:851\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":721}}}],"partialFingerprints":{"codehealthFindingId/v1":"800688a9ef49602fbb1cf791a3b54264a92d66e9c5a0b5cb0c8a2a53b0c66912"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:185-191 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:415-421 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:185\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":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca16dee278ba533a2c9d64291f791db2bd5b92a22a038c51b31acb9c5f0adff0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java:180-186 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java:226-232 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java:180\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b7d50f921020625b517f38d6e007db38677236b453000777243ffa42ef9209"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:646-652 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java:669-675 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ClassParser.java"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1de006f172a52e759c29076a120eb2f00a6d903dad113fc9fe917389935d003"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:324-329 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:428-433 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:577-582 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:764-769 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:848-853 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java:950-955 \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. 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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060entries\u0060 to \u0060List\u003CK\u003E\u0060 in one and \u0060List\u003CKVEntry\u003CK\u003E\u003E\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/DefaultKVClient.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e4bf8fd467bbe981fcbfa79c3da80b27ba9d54e5a29dbbdd4c4782d35a83af8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:233-238 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:227-232 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:162-167 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"19105f0ad3bcd15e4a17003f1480f9fce445073f37631643fd40ef6395569a61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/ConsistentHashRing.java:57-62 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/ConsistentHashRing.java:90-95 \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 \u0060optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/ConsistentHashRing.java:57\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":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/servers/ConsistentHashRing.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"505dab1227457ecab3d8d0cffd71ad1ff3952fa965aab3e0ff1857f768a52b6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:105-110 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:160-165 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"86bedd06467c2194baccae57d71eaeb6b69aedd3157f5407917417b89f3b9c1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:294-299 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:320-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:294\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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:319\u0060 calls \u0060visitInsn\u0060 and \u0060optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:293\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"172e804a58cb796260d5f637b942039e2511438561069d6dae87549827c4d732"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java:296-301 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java:312-317 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.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. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java:308\u0060 calls \u0060parseToArray\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java:295\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"da1cb30a765412bcd708a4441b08afb330deac1c7134b42043347a0bb1783f4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:199-203 | optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java:239-243 | optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorAdapter.java:195-199 \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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/NodeTaskTransformer.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"39050c697aa8a44485b49c8d1aa0591431c8105ea6b57899b5650a9fd638db4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java:551-555 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java:574-578 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegion.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"e14bd7a8df874d1c4c7be389788f0f59cbf12a811c92d5325703d03ca1bae50d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java:107-132 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java:129-154 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 44 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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java:107\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it. 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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060p0\u0060 to \u0060PrimarySecondaryIPListPair\u0060 in one and \u0060PrimarySecondaryListPair\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5212861bd2bdfea63548c74042d50c571635c50edeb1bc54467469df5ec5a50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/message/KVValueResponse.java:28-58 | optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/message/KVValueStreamResponse.java:27-57 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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. Note first that the copies are not typed on the same thing: the declarations holding them bind \u0060responses\u0060 to \u0060List\u003CKVLargeValue\u003E\u0060 in one and \u0060List\u003CKVStreamValue\u003CS\u003E\u003E\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/kv/message/KVValueResponse.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c65aaa96a4b68dbb531057ee196055f38f2697eac89e92209b7297be15fbd5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): optimus/dht/projects/common3/src/main/java/optimus/dht/common/api/kv/KVRequestType.java:25-49 | optimus/dht/projects/common3/src/main/java/optimus/dht/common/api/kv/KVResponseType.java:22-46 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/api/kv/KVRequestType.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"f236e59f7b08bd15bfddbb47166645704a1c9c636e509e81de579e46e3e91bb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/InvalidationException.java:21-45 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/PutException.java:26-50 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/PutExceptionImpl.java:28-52 \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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/InvalidationException.java:21\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/InvalidationException.java"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"98dcdcee3cf0e228e87fc2a3a0fe106b7a1bdf4030c50703484075890ad48382"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 5): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/NamespaceCreationException.java:19-38 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/NamespaceLinkException.java:18-37 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/NamespaceModificationException.java:20-39 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/SnapshotExceptionImpl.java:17-36 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/SyncRequestExceptionImpl.java:17-36 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 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 5 times. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/NamespaceCreationException.java"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"19c43a5f9904d7e383b30139f58e867ffcb278a9b1182c8e52a949c4edf8bdb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 7): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/CorruptValueException.java:19-36 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/TimeoutException.java:15-32 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/IneligibleServerException.java:15-32 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/InvalidRingException.java:16-33 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/code/ConstraintViolationException.java:17-34 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/text/ObjectDefParseException.java:16-33 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/util/PropertyException.java:18-35 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 7 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 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/CorruptValueException.java"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"1644f7ad71a08516152f7ffbcb84f882b3f7d97ad10dcf451f398a4746d0d7b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 6): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespacePropertiesDeleteException.java:15-34 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespacePropertiesOperationException.java:15-34 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespacePropertiesPutException.java:15-34 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespacePropertiesRetrievalException.java:15-34 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/code/PanicException.java:16-35 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/util/IncomparableException.java:18-37 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 6 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 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespacePropertiesDeleteException.java"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e05344ddd7e0e07a7e3db39c6a7603bf18e7cf2fe9a58bd702e65a6d2f32d56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/transport/ByteArrayMessageStream.java:59-67 | optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/transport/ByteArraysMessageStream.java:79-87 | optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/transport/ByteBuffersMessageStream.java:76-84 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/transport/ByteArrayMessageStream.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"6342ac58841c004a5f96e0d5c229ebc6319e5532476df768be09b8687e46cf94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): optimus/platform/projects/entityagent/src/main/java/optimus/deps/OptimusDependencyDiscoveryClassVisitor.java:41-46 | optimus/platform/projects/entityagent/src/main/java/optimus/deps/OptimusDependencyDiscoveryFieldVisitor.java:40-45 | optimus/platform/projects/entityagent/src/main/java/optimus/deps/OptimusDependencyDiscoveryMethodVisitor.java:58-63 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/entityagent/src/main/java/optimus/deps/OptimusDependencyDiscoveryClassVisitor.java:41\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it. 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":"optimus/platform/projects/entityagent/src/main/java/optimus/deps/OptimusDependencyDiscoveryClassVisitor.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"977a70ad9ec0cbe11ed7be0e380f12d611daee2b19efa3369d77b74264eadc61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:69-75 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java:42-48 \u2014 before extracting anything, compare \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java\u0060 and \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 54 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:69\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"113ae57491522cfa92b064872939bdc8e50c7483eb9ba219812651235df3bde2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:149-158 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java:100-108 \u2014 before extracting anything, compare \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java\u0060 and \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 54 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:149\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"64de708d2f249de8d380478deca22413db9a8b04b8aeb2aa403ddefd586ef7df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java:238-246 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java:153-158 \u2014 before extracting anything, compare \u0060optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java\u0060 and \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 54 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. 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":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d1cde39f3e0037653cfde70aebb242e5e9e58ae4844d11b1c4983ebbc93824a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/CanEqual.java:28-32 | optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/CanEqual.java:24-28 \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":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/CanEqual.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"1713879a10a0f61b06d35c489c1d83adb56b2e5fb1ee2c7a3544668cd5ed3c06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/config/HostGroupTable.java:142-148 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVars.java:53-59 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/config/HostGroupTable.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"f41a3896f5fba56e10f594ff02247dc2280487f0b651b40b146f8a4802931e5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java:125-130 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java:122-127 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/CuckooBase.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyCuckooBase.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9bee163746d53ccb6fd0548bcddf5debb1e6c4ad864f9164e329a48796350bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyEntryBase.java:45-50 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/SimpleKey.java:72-77 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroupKeyEntry.java:66-71 \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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyEntryBase.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"c87f9f104991e98b2c30c884efd4eced88a74f27bfa392e25b00e8fb91196e0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:55-64 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:50-59 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"90a50f8c1b96b62a88452bb37fc4bac0257d79438fc0192e8ee5e8aeb7a77a90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:383-394 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:255-266 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 40 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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d798efca04ff2d99d56d5fc7ac1a735918ba2a8096c592da38dfe6a66bc36c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:137-147 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:139-149 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 60 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java:137\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntBufferDHTKeyCuckoo.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"10386c689043beee3c01c95760d20fce868850e09af7adcf650fa6309b13ebf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5Checksum.java:29-35 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1Checksum.java:31-37 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5Checksum.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1Checksum.java\u0060 as WHOLE FILES: 93% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. 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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5Checksum.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"b634a36f8aced7e78abe07d7c76004d2e82ea7fcde65b973e3006debf6516a51"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5KeyDigest.java:54-62 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1KeyDigest.java:46-54 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5KeyDigest.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"0499b8659eb526bc4283a6bdcb5c39f5e4040cb5d90ce1f77c72cfd8eeab89f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:99-104 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DebugKey.java:176-181 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java:121-126 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingIntegrityCheck.java:266-271 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf7f195b6a727510675d41ce68a7b8077afb44802ccc60571d66941c10b7d59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java:113-118 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DebugKey.java:183-188 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.java:128-133 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/RingInfo.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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/ComputeRingStats.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"7906b47d34e493c869d6b8c75224e6a500f903d2b09393d188a7fd2f89e721e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/MetaUtil.java:212-217 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/management/MetaUtil.java:45-50 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/MetaUtil.java"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d1f044f8053c3d263b55c0e0642939b3590bde5fb5966d8f26c4ed4feb02141"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTConfigurationWatcher.java:61-70 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaWatcher.java:83-92 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTConfigurationWatcher.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce73a9821805c11ba140c7595c6c9273b389cfe0e47e65746b99cf0af98953b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTConfigurationWatcher.java:107-116 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaWatcher.java:245-254 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTConfigurationWatcher.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d65949c50f73d0704d680153720e2c5437a9086e94664467a06f22b32a58072"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java:136-143 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java:89-96 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 157 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"51777a9bc73ea1d59fb3746b252f8a57db7c0ff1d610a346c42f70d430e4527e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutUpdateMessageGroup.java:61-69 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoRetrievalMessageGroup.java:157-165 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutUpdateMessageGroup.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"e046984475552510cdb55e040a1577c11771260638c6a58e677bbd92b56ff5a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java:126-134 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ManagerModeDependencyWatcher.java:148-156 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ManagerModeDependencyWatcher.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 44 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"4997c86eceaa107aa43b7eb01edfaf6588d6b21974a834b177d04038b86fa868"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java:136-145 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ManagerModeDependencyWatcher.java:158-167 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ManagerModeDependencyWatcher.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 44 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/DependencyWatcher.java"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcf611b836941fe6f147b3a2847350edbb38029140c41733cda29e9f4d0526ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java:68-77 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java:96-105 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 44 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8fcdab6dac45d2dd1f23727584070be673a028c171b97a4cd95f646534ff6c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java:221-229 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java:1530-1538 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingTreeBuilder.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c9603c1cec134ed4915132343d12353859c8d699e80383b5a42799e5082a56e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:78-91 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:98-111 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 71 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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"2717b563afbdc9d2d2947ee2d990cbd7b769c058a45d3ce1ee955779de591c56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:131-136 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:117-122 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 71 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9f4f2cf69e27601f441f08d902d843a5d8483b23d901f8279f23dc80372fdf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:273-282 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:176-185 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 71 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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a048a098fb3f026602df545e93d72c110485b5533c7c38bf0c34700f2e70d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:290-295 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:193-198 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 71 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f052d36c62ebb186c65ef0f452f5821fd1490890eef247afa2ea6c54a99184"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:359-369 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java:255-265 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntBufferCuckoo.java\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 71 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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd61c704d6ab0116cc99824c83aab4fc92a2c7414b74d5844609f6ac20fe758b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/Priority.java:43-51 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/AssignedWork.java:39-47 \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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060other\u0060 to \u0060Priority\u0060 in one and \u0060AssignedWork\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/numeric/Priority.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2b0d576256f465bc676304a9b56d1041ab2d51062a20d3d6a900a4bdfce9e0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/AbsNanosVersionProvider.java:35-46 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/RelNanosVersionProvider.java:35-46 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/AbsNanosVersionProvider.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"984f5526cd9c9520a14d4126e0b7b77620bcf0708f0a0581d908e45946a58086"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/SimpleSessionEstablishmentTimeoutController.java:102-109 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SimpleNewConnectionTimeoutController.java:102-109 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/SimpleSessionEstablishmentTimeoutController.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc27a0ce2129d1948c4a2cdee7195e438d6c63422d969e6769e5e835c9ec20d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/PutOperation.java:72-80 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/RetrievalOperation.java:51-59 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/PutOperation.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"41f77f87aa035b09f439f5c49ad8ebecec302beb474216dcb2cfc50ca77d6cc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/IntegerSerDes.java:36-44 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/LongSerDes.java:36-44 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/ShortSerDes.java:36-44 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/IntegerSerDes.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"9253c81839cec9e4451674ec12888c866eaea59ecc30a8306b28b8cd9d5f3ba0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java:184-191 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java:178-185 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/IntArrayDHTKeyCuckoo.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b961779843f9477a8951f57683bd213776e86b806b07a76c28e9df9c26a3dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5KeyDigest.java:44-51 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1KeyDigest.java:35-43 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5KeyDigest.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1786660e70f730879ce8469a82edda09fbb861a5970803bea31efc7b8528a8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/aws/MultiInstanceStarter.java:74-81 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/aws/MultiInstanceStopper.java:72-79 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/aws/MultiInstanceTerminator.java:74-82 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/management/aws/MultiInstanceStarter.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"d77002e627a4d8be708afd840a7c34f659d664ad5433d6c3085b2d910b8d3fd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoErrorResponseMessageGroup.java:31-43 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoOpResponseMessageGroup.java:31-43 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoErrorResponseMessageGroup.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoOpResponseMessageGroup.java\u0060 as WHOLE FILES: 87% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. 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 \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoErrorResponseMessageGroup.java:31\u0060 it runs out through the closing brace of the declaration holding it and carries on into the declaration that follows \u2014 the window is the tail of one member plus the head of the next, so no call can be substituted for those exact lines, and the smallest declaration that contains all of them is the type they sit in. The repeated unit is the member each site sits in: where those members\u0027 bodies are the same, move one whole member to the shared location and have the others delegate to it; where the copies are a run of near-identical overloads or wrappers that differ only in their signatures, the repetition IS the run \u2014 a one-line delegation has no helper inside it to lift \u2014 so generate the run from the set it enumerates, or accept it and keep each member\u0027s own documentation with it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoErrorResponseMessageGroup.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7c282f545fabca136ca697c1aa5d53857fa9058645b90b07e63499246f0e65c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/management/MetaTool.java:65-74 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/management/MetaTool.java:98-107 \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 first that the copies are not typed on the same thing: \u0060MetaClient\u0060 names \u0060com.ms.silverking.cloud.meta.MetaClient\u0060 in one and \u0060com.ms.silverking.cloud.toporing.meta.MetaClient\u0060 in another \u2014 different types that share a simple name, which is why the text matched. A single extracted unit cannot be given a parameter type that fits both, so unifying those types (or introducing a shared abstraction over them) is the step that has to come BEFORE the extraction above; if they are deliberately separate, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/management/MetaTool.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"744380420a7ea27c9a64bd7450bd3b292afe7545fce877ae27fba754d1fd7a02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/ExclusionSet.java:76-83 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/SuspectSet.java:76-83 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, 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. Note first that the copies are not typed on the same thing: the declarations holding them bind \u0060s1\u0060 to \u0060ExclusionSet\u0060 in one and \u0060SuspectSet\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/ExclusionSet.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd69f251397668a71413c724d4b023e20039307edc1a42e960c499fbb293239"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegionPositionComparator.java:18-26 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegionSizeComparator.java:18-26 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/ring/RingRegionPositionComparator.java"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f7a0e4d4bb547bd592ce42d3aa37583a40cbf5de0645d83dd1a18f1d65d64c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java:36-43 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java:40-47 \u2014 before extracting anything, compare \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java\u0060 and \u0060optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 44 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. 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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"739b58d221eefe841896f5efaa0f71370ae3d10b606d3aeae9f06d3a7d23fca3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java:237-245 | optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/io/FileUtil.java:123-131 \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":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/IPAndPort.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2d03339275f8a944dda53ae678d41543d443b44ae06cb355879c5d23bcbde31"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java:180-184 | optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java:696-700 \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 \u0060optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java:180\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":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomAdapter.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"67e5388d8be125024b22ec62651a7a482911119f6b297effa6b211a1e44863e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/SimpleIPDistancePrioritizer.java:68-73 | optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/SubnetAwareReplicaPrioritizer.java:127-132 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/SimpleIPDistancePrioritizer.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61a2635442f7801029af98377a78bcf0d923e48d3f71383af91db405de3b5d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (27 corresponding lines): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:234-271 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:273-303 \u2014 These two members are one piece of code written twice and then edited apart: 27 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b6c5b1d5eafaecf4d90df972e26dbf5aef845d09ea38d2a7aa51222209a362"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (26 corresponding lines): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:93-119 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:121-146 \u2014 These two members are one piece of code written twice and then edited apart: 26 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a50a7ebfc56638b4c4af08be131c6e58e48a0cc043e3a8375f2dcea516c6e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:93-108 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:110-121 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:123-136 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:138-154 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"67a23718af4c2b562659030d7717d73cc0eed4bf4ffb82b3bd947cb9bd14cdf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:245-271 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:277-303 \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 \u0060optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:245\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"1202b41b076d5ef78c6744dcf7ba2910114be96d44ce805cfb9223541ee5c794"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:157-167 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:170-180 \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. Each matched range is the entire body of the declaration above it, so the region is already a complete unit: move that whole declaration to the shared location and have each site call it, rather than lifting the lines out of their bodies. Any \u0060return\u0060 inside it is the body\u0027s own exit and keeps its meaning in the moved unit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"584a8c88822962289e2448deb3c1513fbb6f8520ede242a69336fba4d9fe7001"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:112-119 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:139-146 \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 \u0060optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:112\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"706fee9d5e85a37b3605b8a0134a2271cc313e2a218540fc48b95c2d9b2bd77f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:94-100 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:122-128 \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 \u0060optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala:94\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":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform03/relational/Data.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc70e25813dbc739c4ec59a3834cabb82cb6e9eb529f8210254574ebb55c95b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:96-100 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:113-117 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:125-129 | optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala:140-144 \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":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform/DALExample.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fb9a26073ca4a7ed6af9c9c5d496ade2f0b7c1bf12d975fc0cf01c8d0a3d034"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java:110-135 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java:152-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java:110\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"6806184c4f7dfbc93088962d41b68e1e8b72e28ec260a0cee7752ec57f4d34fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:138-157 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:174-193 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:138\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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060defaultValue\u0060 to \u0060int\u0060 in one and \u0060long\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06060c162e8a4de34f633e9dc6fd2841701e4a3afc0c9300a559dc19b4ace84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201319 lines \u00D7 3): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/internal/MSNetConnectingLock.java:175-189 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/internal/MSNetConnectingLock.java:255-270 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/internal/MSNetConnectingLock.java:288-306 \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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/internal/MSNetConnectingLock.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf6f3e9d09a41027c361e9ea23927c8c3568c98a28d2b0ed5c9b553538f6acbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:101-116 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:121-135 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:101\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060defaultValue\u0060 to \u0060int\u0060 in one and \u0060long\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"004038998c3616a69d5703461dec6664a3866dc527f020f3c4fc3e69cfc9140e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1869-1882 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1899-1912 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1869\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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 \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java"},"region":{"startLine":1869}}}],"partialFingerprints":{"codehealthFindingId/v1":"756587ef0dedf7672643fc8ac8d59263fd167ad9bed66605f570b4b9c9a2b107"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:2131-2144 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:2167-2180 \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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java"},"region":{"startLine":2131}}}],"partialFingerprints":{"codehealthFindingId/v1":"5279dd88b2d79a39d555b0edeb00b7c19b1f0690362dc2cdf495a32d2225a63f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:159-171 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:195-207 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java:159\u0060 it runs out through the closing brace of the declaration holding it \u2014 the window is that declaration\u0027s tail, not a fragment that begins part-way through something, so those exact 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 first that the copies are not typed on the same thing: the declarations holding them bind \u0060defaultValue\u0060 to \u0060int\u0060 in one and \u0060long\u0060 in another, and the duplicated lines use it. The extracted unit therefore needs a parameter type that fits BOTH \u2014 their common supertype where they have one, or a new abstraction over them where they do not \u2014 and settling that is the step that comes BEFORE the extraction above. Where the two types are deliberately unrelated, the duplication is the price of that separation and the honest resolution is to record the decision rather than to extract."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/util/internal/SystemPropertyUtils.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"f351a2ea2ec0cb7fbbf8596f09ab8f6c49d7ccc3b5be22273ff6792ee613c67f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPSocketBuffer.java:294-305 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPSocketBuffer.java:340-351 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPSocketBuffer.java:294\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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPSocketBuffer.java"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5b028109b64a414052bc31495ff264a033f7e4bf275f78aec415c6d0fb3715c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/AbstractEstablisherHandler.java:300-309 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/AbstractEstablisherHandler.java:321-330 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/AbstractEstablisherHandler.java:300\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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/AbstractEstablisherHandler.java"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"2224bc58bb6ba057814585fc02395942aea6d3398ff93e3cdd02e234c7b4e28d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1855-1864 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1886-1895 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1855\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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java"},"region":{"startLine":1855}}}],"partialFingerprints":{"codehealthFindingId/v1":"913b0ff02db29db3586042a5ae8dab127ac6ecefa1fe2524980c457c132c4ae2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/dns/AsyncNameService.java:131-139 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/dns/CachingNameService.java:77-85 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/dns/AsyncNameService.java:131\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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/dns/AsyncNameService.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d2d402c6cdd3079047651f0268e09e71bbb4dabad0d226953a1e4f8ea7b19f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1927-1933 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:2425-2431 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java:1927\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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java"},"region":{"startLine":1927}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a74875aa38fe01b019b3c740b56c60375dad99ffb35aa0cffe0e515d52461d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java:99-104 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java:144-149 \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 \u0060optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/base/scv/SecureCredentialsVault.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eaf181425fc559eb12a1add65a190b6d2750d8182abad4e82d6e7e88a322939"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/ZkaDirectoryWatcher.java:199-211 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/leader/internal/ZkaLeaderSubscriber.java:334-346 \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":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/ZkaDirectoryWatcher.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"4767e22a27fc6f93426a93cb302092333d8468d1efa79a379e4c0e5a2cd38273"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/leader/internal/ZkaLeaderSubscriber.java:157-170 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/pubsub/ZkaServiceSubscriber.java:98-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/leader/internal/ZkaLeaderSubscriber.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c2d8037ea83b67d0265b853bf0e4a4c85512f120dc7d142627bf6a912d0aa2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetLoop.java:142-152 | optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetLoopThread.java:81-91 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetLoop.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"0509db7f54d8d863c2b7ac997573beb3d3ca9e6e4536a1bd544e30b60873a53d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: OptimusSeq (LCOM4 12): OptimusSeq\u0027s methods fall into 12 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 12 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeq.scala"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec3c66197920b95bb8c0ab4d5cff3d96d85f5677e0db09a44da799cd03c987f7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: OptimusSeq (LCOM4 11): OptimusSeq\u0027s methods fall into 11 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 11 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OptimusSeq.scala"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"40bb25296dfd7023fc109586c0dbd2111f9352e7db6786a66e08db1e0a26a533"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: PropertyNode (LCOM4 11): PropertyNode\u0027s methods fall into 11 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 11 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/PropertyNode.scala"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb6b92f5d7e7c284248ef91bc38401161c0518b6758b3d10f269880d91db61b2"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: OptimusCompositeLeaderElectorClient (LCOM4 10): OptimusCompositeLeaderElectorClient\u0027s methods fall into 10 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 10 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/runtime/OptimusCompositeLeaderElectorClient.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dcad641ccf0de9ca56cc57ee82b88899c5faf88f9863cefcd48daf7b8188824"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: BitBucket (LCOM4 7): BitBucket\u0027s methods fall into 7 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 7 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/bitbucket-utils/src/main/scala/optimus/rest/bitbucket/BitBucket.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e6dcf6cc693a1d15c4aafa1da14651d910d6cafd559f55a5c527e115bf610ea"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GitLogImpl (LCOM4 6): GitLogImpl\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/utils/GitLog.scala"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"d426cb640787f6025d1de67c09e8e6b8776edc13a71fe7337223011853358315"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DependencyTrackerRoot (LCOM4 6): DependencyTrackerRoot\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerRoot.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d11acc390ffe6a30481569db7d1f4bcc8d2d4a29000fe38dde02c5e0ad4458d"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: RangeQuery (LCOM4 6): RangeQuery\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"56165c67fdf05261b5e04c7845875e24dac221f9e07c96112841c4c26e093fba"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DebugPrintFormatter (LCOM4 6): DebugPrintFormatter\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/debugPrint/DebugPrintFormatter.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"f08a5b7e05a2fef920555e9ba404057f72352ee5b4e0ff109ebc87fcb8a491df"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DALBinder (LCOM4 6): DALBinder\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"d642e650c4066ab335878e6c358bd90374ab1cfa8ca0b345e1131becb612d128"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DALFormatterBase (LCOM4 6): DALFormatterBase\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALFormatterBase.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"858766d67e24e6c135022864331e682e9cbc9d5592327104d3e4673915ca5312"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AbstractBitemporalSpace (LCOM4 5): AbstractBitemporalSpace\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f077fd5681001f0c6aec6b8314b7b11ddd673d57762a71d9e41c88c568bc29b"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: HotspotsTable (LCOM4 5): HotspotsTable\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/HotspotsTable.scala"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3d7103080e7f3eec493cf2e9dc7f99291c8bec8e637e4b81f3685391a75455"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DbQueryTreeReducerBase (LCOM4 5): DbQueryTreeReducerBase\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/DbQueryTreeReducerBase.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ee828e30581d933fc9defabacbecbd464e985dec3d17532fde4b62d1c17748"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Staging (LCOM4 5): Staging\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingComponent.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fc6ded9ad9ac1be45e31a79674479e881b68de24a9c12bd9f6cf5ed219a5e77"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ExtensionFilterFileVisitor (LCOM4 4): ExtensionFilterFileVisitor\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/files/WorkspaceSourceRoot.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"5021e551f1e6bb82299e2b9ca59f40352ce3b6c989e3a7acb00abb0e0e164b35"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: OptimusArraysSeq (LCOM4 4): OptimusArraysSeq\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusSeqArrays.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb39bc557b40f6df1915b7b2b1488384946ee5ba618f18405dcad46b9ccd91e8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DefaultQueueMonitor (LCOM4 4): DefaultQueueMonitor\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/monitoring/QueueMonitor.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe40e4d8a9df4cc03c822533ca1f547a7645c4b650e17b2b98722832c6abc561"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DALEntityFlavor (LCOM4 4): DALEntityFlavor\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/storable/EntityFlavor.scala"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"5958d99e3e0b3971e9d3f5a0ba674064dad1896bb3b82ced0e1175203f18961f"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: PubSubDsiProxy (LCOM4 4): PubSubDsiProxy\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/RemoteDSIProxy.scala"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"780cee7dabd6f9cfe49f523c4e6b3b91449df5a71a628ad6039ad7c26961d612"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TypeInfoBase (LCOM4 4): TypeInfoBase\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/TypeInfoApiBase.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"086db586c3fe6ca1f627305aebad910a34bfbfb9c08fc3e4d60a6250f76a7586"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: NodeProfiler (LCOM4 4): NodeProfiler\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"54106bd7676f6fa6660a116444bb87776c1981172899cd84f140b6da3dd913aa"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: NodeTreeTable (LCOM4 4): NodeTreeTable\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTreeTable.scala"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cba9bef0de763f94ebae010c23e518a42dec092401fa4fa5226086b72f02862"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DALAccReducer (LCOM4 4): DALAccReducer\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALAccReducer.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7aed996fc51e09385426029503fe626d3ed8c55d34a02f60fbcc3c9b5a179ce"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DALBinder (LCOM4 4): DALBinder\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/core/DALBinder.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fba9c41f9ba31d5fa25784016220a78ddd09bfddf4db95f3035b884ec5ce194"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: RewriteTypingTransformer (LCOM4 4): RewriteTypingTransformer\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/rewrite/RewriteComponent.scala"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"068a5952862e106c91d1c3231a03d1fee0c9cf5feebb60f6b27b69c79427c09a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala: optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in AbstractPersistBlock.closeAndCreateAsserts at line 538. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2025-09-25..2025-12-24, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272025-09-25 12:09:27 -05:00\u0027 --until=\u00272025-12-24 12:09:27 -05:00\u0027 --full-history --no-merges -- optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc02a8985f233521bd714c9e61ddcf8047d83bbf11b626f9c615364e84515fb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala: optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in ProtoPickleSerializer.propertiesToProto at line 59. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2025-09-25..2025-12-24, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272025-09-25 12:09:27 -05:00\u0027 --until=\u00272025-12-24 12:09:27 -05:00\u0027 --full-history --no-merges -- optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eac3e4ea2d8ee21be203fa1fd7e45a323bd720946f8f7ea1b400f7aac3c41a7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala: optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in BreadcrumbsPropertyConfigurer.implFromConfig0 at line 263. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2025-09-25..2025-12-24, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272025-09-25 12:09:27 -05:00\u0027 --until=\u00272025-12-24 12:09:27 -05:00\u0027 --full-history --no-merges -- optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eac88c7feaf8df4dcc47b9fedd0ff61d7dba241dc9d81b77af87c2bac1a7704"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala: optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in Scenario.validate at line 445. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2025-09-25..2025-12-24, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272025-09-25 12:09:27 -05:00\u0027 --until=\u00272025-12-24 12:09:27 -05:00\u0027 --full-history --no-merges -- optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Scenario.scala"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"be032c757e630f8a24418d03d581c51c8efcccb59e4007a72b331c2a39d9a831"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/ValueTreeTable.scala: optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/ValueTreeTable.scala changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in ValueViewRow.extractValues at line 127. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2025-09-25..2025-12-24, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272025-09-25 12:09:27 -05:00\u0027 --until=\u00272025-12-24 12:09:27 -05:00\u0027 --full-history --no-merges -- optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/ValueTreeTable.scala\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/ValueTreeTable.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"65916efb095b22ff0afd5af73e1a8e9175f24ccb1f6a54ebb03af336f85ad5c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-56087) rename Overlord references"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolCmdLine.scala"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"244d313706409024fc430cbf7daa4c94fb05f110094dc6b35dde28a765c440fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-56086) rename Train references"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/app/OptimusBuildToolCmdLine.scala"},"region":{"startLine":818}}}],"partialFingerprints":{"codehealthFindingId/v1":"dae9fa80a9317f1f513c1eb5b682b9a80488d5ec66ede31c6ebf45fa37b0e012"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47169): to be really efficient we could write to a custom output stream which hashes the bytes as they arrive and then throws them away"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/StructureBuilder.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e0720089d1b17fc642410e52035ae992d15ae1ca8d217751e28eeba384b1b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-61422): apply interpreter options"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BuildServerProtocolService.scala"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"40454cdff4fa198365bb73eee22013b10dd0e435f96f19a297e7bb3a5b0eb7fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-61423): Implement the classpath logic from scalacOptions() for pythonpaths"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspSyncer.scala"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"017e066e2b9afad9c4828802623ed8b040c4cda2f365cefb3912f944b9d9762f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-61422): replace Nil with interpreter options if we have any, from structure.resolvedScope"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BspSyncer.scala"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"6990bef135f0fa859a2e1fcf2f0ed4580d0f7dad0b57750916da0973f7b8c866"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-79609): make fatal"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/installer/component/TestplanInstaller.scala"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a83f2475b901e94e358079bf6d506bbdcc9710e5c95e5f8371c7ed4896da29e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-39958): this sorting by mtime fails to take reuse into account"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/installer/component/BundleRunConfsInstaller.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"89a94cfb085e725acc4d170193efcbd04c49e5273000006ea1c6e018b7d5a24d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-70267):  Rework this as part of restructuring contract testing logic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/installer/component/testplans/Changes.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"931726c854aaf100ccfa045268e6ad5f825cef5cf085d72e878b645ef91e0f0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-65156): Remove when elf parsing issues are understood."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postinstallers/apprunner/PostInstallAppRunner.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c44689f7b24ad74349d577539331c4d631d8e14cf86981f5d2971aaaab6b3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-66613) implement retry logic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/cache/dht/AsyncGraphLargeValueClient.scala"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"73aa33efa90c72a758f443246bbf1f6f10d7cb38609405fc0897f8d1d256ca39"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-42169): this probably could be made faster / less memory-intensive by running the regexen"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/RegexScanner.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a3366c6a8395826f3901f8d6fd57190b5746ed9618081b234b8aacc52f4e15a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-38945): We should use OBT\u0027s artifact hashes here."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"59fe7dac92fb9e0dc23e8aa29318b4373fba1db934d3d128de96947a507cc956"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: Convert Paths to Strings and back again, to ensure we purely have paths from the default \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincCompiler.scala"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"3417c3ba79f3201684ca02a767f999eb896030e4263716c04ce88f977e5105cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-45208): Remove this once Global.Run.compileFiles is changed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/setup/ObtProgressReporter.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f409390f18afc37090cfcbe89c8e220f053c9cae027dfeada7bc856fcca1fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-77939) read the config value for the source set name here,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/PodcastGenerator.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"41b86737628b4dd4cddd161a1399f0eec1616071d35a175c678527483601c680"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-77939): get schema from config"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/PodcastGenerator.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d49666d1bede5e6623f53de13de6aba6ad37deffdf441b4fee718707de3f117"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-79166): Remove \u0060allowEmpty = true\u0060 once we have a better solution for"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/AnyBufGenerator.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"e465bd19c8f52f8206a9ca1e906cf81a982294cf4cd3bd2875afe71386b6bd01"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-79166): Remove \u0060allowEmpty = true\u0060 once we have a better solution for"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/generators/sandboxed/SandboxedInputsImpl.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87b824019ac7aee7786e7dfd9e7302a65993b5be55b4687c890bf988db6882f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30564): sort by rough topological order?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4fe25ad8bf87b34de19e363565a1da659e4acd350bd0f8f0c175679fecf6bb0"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack for SBT putting infos in properties \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/MsIvyRepository.scala"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a289b03e60278b1f2305e30b860eb17d4f2a2aca57964fcbd8e8598a8f74b10"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack for SBT putting infos in properties \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/MsIvyRepository.scala"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbdeaa8fdebbc79357eb436cbcd1f42a41fe85c607e045018f7c16749d130d9d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-25547): Remove this distinctLast when we understand the"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/CompilationScope.scala"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4942a21bea8a60d1c5d05aca5dbd31239834f64dba79c1ef8824c93c0ff931d"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hacky - only include the first path for each scope (on the assumption that it\u0027s the linux one), to avoid \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/RunconfCompilationSources.scala"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1ada88094ff3fde894f6c69cc5d075ea68abd2420629647c5f58409ab1d829"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-37134): a test that this picks up all that is needed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/scope/sources/RunconfCompilationSources.scala"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"199f9b5f74867ed59778c8cd6b17e2bdb781647876cfe21c031612a4b0304d05"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack for spray-json which can\u0027t deal with extra non-ctor fields \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/config/RegexConfiguration.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcbdd98e2dc5ddac65123da0c5475bf0866782ce37377ce5782e3acd3b84df87"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack for spray-json which can\u0027t deal with extra non-ctor fields \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/config/RegexConfiguration.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa35c568368432330a776accb7d0bc0e375d550022a10242ecdbe00dca9b3260"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack for spray-json which can\u0027t deal with extra non-ctor fields \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/config/ForbiddenDependencyConfiguration.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0a95f049a3413f8b6f636fb3989cbe42fd400be67b1261a6438ce5e04d5a2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58921): remove this hardcoded string root once we removed duplications from optimus/artifactory-deps"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/config/NamingConventions.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"511aabd1d0b70d9e2367427df34faba665d845ba04119ade549e0982470591e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-37398): this will likely be desirous of includes/excludes and such"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/config/DependencyDefinition.scala"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"6230085c54af129777f9f2fc0abc8b348731153aea0c13fa287d2d26efc2cfb4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-35296): the install version should really come from the OBT file!"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/config/CopyFilesConfiguration.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1927a3263557ea28e01a5f4b4018f1a894f4a08b268c716b8804ee07a33a5da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58917): clean up special case that allow maven release frontier depends on mavenOnly modules"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"b26ed2c8140e82e3288825cc9ac1780265f07a4808ca04e5f545617a56a8584f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-55205): Remove webSources old name"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"17d3af00e2c4b7ca4080401f937b39c23a5ca5c77ee85240999d7538f605c1cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-32045): Stop printing to stderr when strato info is practical."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":1112}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a1f8504ecec0a66898431015aa7a48e693432800c4bb30d6b9249037935e6e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30165): Make ObtFileFormatter production ready since for now it it used in migration script"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ObtFileFormatter.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"93551ed49736c773b47db443368fd6e03d4d918e1b62cf4b327fa319def5451d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-65072): Delete legacy forbidden dependency keys"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/Keys.scala"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"143e2d98d9e5403e39ab4eeb8ad849f592bf57564e550f6a9af71b2e8ce1e584"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47169): Eventually replace other json writers in AssetUtils and Asset with this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/JsonSupport.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"bba1e3e602299029c950163f513ca471f4ff7b0619bdf0992130a0b564e06802"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43576): Use workspace structure instead of path mangling"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/InputFile.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a32f7f0f057795acd614d0e5b54664ca700d5c5b806d7e7c309585014513e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24773): We don\u0027t need this logic at all if we enable the"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/PluginData.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"191cef89dbc775f56c38d1941a2ca4859cd0ac9633fc429d4cf38b0dd54563a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24229): Remove is212 branches after upgrade to Scala 2.13.x is fully complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/OptimusPhases.scala"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"319366e98ed6c4d0e5c70dac0f69abb744ee7eb6f3f27de9637d0a653f5ac3a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-37938): move this to refchecks or somewhere so it can support @nowarn"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"b67abed75810a24657ec6ebcbcd68dd42edc5dbc097d5dc650fc334aabb5095f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30981): make this a warning0 later"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"5972c4bf8bd7d9b823932c348fa2cc73c3e1151014e5bf5ab93c8a00cadb0ead"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-31928): Delete this eventailly"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"2af322c440ea6c0a570855914ff8cd44d4c6b6c30b6d08739dfcc22bf4d6ff7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): duplicate error message in different phases, redundant check?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4e109d577bde4ea8d74131d557a1ce1a1d2ff9042c21e898e956f5f64509d78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12546): ban @handle with @xFunc"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f41247c9f252728a04387cbb860f9c6bb6302b3759fdd2b6c2e9f180be8c4c"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // lazy val XFUNC_WITH_HANDLE = error0(XXX, OptimusPhases.REF_CHECKS, \u0022@handle cannot be @xFunc\u0022) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/alarms/src/main/scala/optimus/tools/scalacplugins/entity/reporter/OptimusAlarms.scala"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"567936ceeff1ff50bebfeb86f1f510a350c9eec835a2557d2f771efcab719dbb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20756): Remove the whole object and the additional logging provided by"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d520a3a7491103afc1952ad479b1341e63f47b22aa2fd96b4b209d500e02aa0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-45858): Other Data Types to be implemented for pattern matching in Collections"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/OSeq.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"0155c822feb779d04fce096df6c6a945c092d1adb099a845cb23738cd2c95352"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-45858): Other Data Types to be implemented for pattern matching in Collections"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OSeq.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a4840f93d1cadfee03d58878475ba75f495c9a722dcd458a581e521ac064dfb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Is there a better way to do this which doesn\u0027t require iterating over the entire set?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/CovariantSet.scala"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"801412231dc1bfde7e2b4e8a26bb3e52ae5da62285a12a34adf9c616d61cf839"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Is there a better way to do this which doesn\u0027t require iterating over the entire set?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/platform/CovariantSet.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f5c323b678da4313c47ab7a2b64a9b2647f4b635dbfc6881f461559e2a11cd5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //  TODO (OPTIMUS-20898): Covariant.toSeq should not return Stream which is the default impl"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/platform/CovariantSet.scala"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"383fbd8f7d2d1158c689fa14df4cd6119223193fe3831a5d9b124fca9cea6887"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //  TODO (OPTIMUS-20898): Covariant.toSeq should not return Stream which is the default impl"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/platform/CovariantSet.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfa36fabe546fe49334096848f78fb8999e3b5e1276f6ef2f0d948ce023e684e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Could use a OptimusDoubleSeq builder optimistically assuming that that contains Doubles,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.13/optimus/collection/OptimusDoubleSeq.scala"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"896566983b4f5b63ac52d48317940729f27281f6b95763c20ba6e582c8739fd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // [SEE_DOT_PARSING] TODO (OPTIMUS-46190): parser uses dots to reference nested config sections (arguably not needed)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/OptimusConfigParser.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"7259891055b5f1a5bdd672f94812457a2b138e8141a7617ea40c8d71e65dbb19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // [SEE_DOT_PARSING] TODO (OPTIMUS-46190): parser uses dots to reference nested config sections (arguably not needed)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"9decfbe86b6f1bc76d4cea856944d88dd826e71c5d52c978f73c688c63e9100f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // [SEE_DOT_PARSING] TODO (OPTIMUS-46190): parser uses dots to reference nested config sections (arguably not needed)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/ConfigWriter.scala"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2c27c0c27bc3de9e6f61250422b81b7756bc35e75ab4c09fa9bdb782504c313"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15654): improve syntax of type safe config to support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fbcda6fce81d4dbcfb5cbd89130e9782b7aa663317dcac3c5fab10bde5379d5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15654): improve syntax of type safe config to support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"a69e720f54e3e2275f2144b9445252c380769789771d23af15f10746f0a4896c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15654): improve syntax of type safe config to support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"b16a7d026ce7a79cbf1d7b24045b4e85aec6a6733cea0adb3bda0dc30bb4b159"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15654): improve syntax of type safe config to support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":1002}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff15d0b7ccaccb9d9b2180b83d0c9c1b4f0dc0919c15069b5be4542a33552d26"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15654): improve syntax of type safe config to support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/Constants.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2fa4cd0f1c3d30f774e5bb36729b17c14d680b600319f91ec59aae9b60e9475"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-74618): scoped optconfs should properly support custom caches"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c19d56626a06dbbf5f43fe3efa5377907115c7f2902a617452436487cf0c4b"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hacky \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/config/NodeCacheConfigs.scala"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"385867caebdafcb1cf247088e3c863c5f4a5e226cfa80207c857660612f1e615"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43368): support maxConcurrency, ie throttle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/EdgeList.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c010ee4ca223d9a0ea26d08c44a9e742e699b00ce8b164750df24197f4e458d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43368): support maxConcurrency, ie throttle"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/EdgeList.java"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe68f511ca172d21d552d8f01c6f13e25cfe75836f054f83d2a09d96429aae5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-54358): JVM uptime is fine for now, but needs consideration once treadmill hosts are pre-started"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/MonitoringBreadcrumbs.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ed6ac36ffc6273e51a4fb52f8c1bec2e64be5cd24c94ca3152b095dc2506a78"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-74952): Warns when serializing XS scenario stack, once per xs owner."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/MonitoringBreadcrumbs.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"f29c6813bd2e7cc9d96daf574179dd8f791ba327daa069dfdf3a2fe16710a5bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47350): warning! not the API to use if you\u0027re looking for cached constructor PropertyInfos..."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/entity/EntityInfo.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"e680316d15ff3da5a32114936a0f4d8bc74e0117faa8104d85af5e435ebc5e8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): This should go away, but old semantics code is using it. Remove after that code is removed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/entity/EntityInfo.scala"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"473aee59d5b4a9433502d814add6610ea6c890e2daa66469390e7629ba2dfd58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15699): flip it for everyone in main"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9210b35932d8bf5df6395cf2c4e0b6bc2cacfcef1c90968a6a1d60d537677e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-77836): Enable this flag once legacy persist and hybrid entities have been"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3ff571f40cca61ac73a6846eb39ec31a1644ce32575ee99b3a0e71e2381d6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20571): This flag should always be true, and should be removed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"1442548ee3b357a4479d4c4bb8d81baf3d88f2a4397954e709357cebb35ed477"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-80221): remove after March 2026"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae847907000aea9a93c0922065937050cb96a09d1ea2a18f80c9bac8143a7a80"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-25496): set through build system"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"effa255e05121efeb5ff63806a9c167aeeb8b4a72cceed08f04fe00985865ece"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18021): should be deleted when deprecated legacy API"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee501a20b4b94daef9788b064a054b0be766b288af394f08fda8bab48132211"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18021): should be deleted when deprecated legacy API"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"a75de829d0a740bec6a58f057d52869ddb6a713680ada3546304b903f627da41"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Should probably be used only in unit tests. TODO (OPTIMUS-52498): remove this flag"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"529909d994e8302de2bd382b17161aae68d7fa7fcdf47ffd5564de86d01c9e3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-21846): switch to true when we\u0027re confident that causality"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"091ca11402076256a03b732ae870db4196a64fc81b6dac68152941357d46471f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-79168): This flag will be removed once we are sure that no apps are broken by it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Settings.java"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e5f6cc1444beebb5d50e56983a536b7ccfb31fafac18216132aa34310a8caf4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12121): Raise alert once alerter api is in place"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGSchedulerContext.java"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"25fa0f21cf157e57cddb77181ed7f15266e21bcfe5ec809927f17ee110dfb5d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12121): Raise alert once alerter api is in place"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1971}}}],"partialFingerprints":{"codehealthFindingId/v1":"325a8f929724ec078a9ebaad5d73c899290e649c5510eb74c38f149e483a982f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17080): don\u0027t hold the lock while we call the callbacks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGScheduler.java"},"region":{"startLine":1592}}}],"partialFingerprints":{"codehealthFindingId/v1":"50869ce158cb3817e18759b743cebe130dfd56753176feb1bd51174ad5b52e8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47353) this is over complicated - refactor to drop all the Options"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTaskInfo.java"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf0edf6a336568c89ff66149d494f497b42f14171f7bbc45c863e4beaaa51feb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // because getOrElse(null) causes NPE on None.. TODO (OPTIMUS-47353): refactor not to use Options"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTaskInfo.java"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"22cfb09bcb2b9a71a75d406c912a99b026fd760eec821a987345c4282d997a86"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40508): revisit dependencies from optconf"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTaskInfo.java"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff5e307c43b4994da3470bd1d96863e802958ba6a6bbda17205407562f7b299a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // don\u0027t throw it yet, though; just crumb (TODO (OPTIMUS-46038):"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTaskInfo.java"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"2699c3d94b32dd22032776b255b1ee0342fbf88c8f5de8f99cb1a1bb6854d54a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43938): integrate with file to configure how nodes are displayed in debugger"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTaskInfo.java"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd2629f735be19e917b1067aea54b571c454f8146b0d80b623b72967946197e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-44050, OPTIMUS-43938): review uses and unify behaviour in all observers. Users"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTaskInfo.java"},"region":{"startLine":1708}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffa1f18bfecf329a84301d16cac98f2cf880dea57dc1a561e1265db072e31133"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13315): review the usage! management"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeTask.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"51bb171c80c97b653ef3369ae3fb663eb46bbd340094c4b1e83740e784fa30ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57169): revisit timings"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/InstrumentationSupport.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"04e7bb4a2261cd13689e37ecbb66af16b3744e7929827c7202218ecce0228e1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-77147): We should use transformStackElemsToString directly instead in the"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GraphDebuggerExtensionsServer.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"d85495125926469a7b72f77391aca9f2d34e8d0674fed6a6efd6ea28b66e9525"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12765): enable by default when its performance is acceptable"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaeacefdba51c6f6676b2e6f58272bf104d1d54911eec41f5ef69011790834a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12766): remove this when ptools and gcnative merge"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"355626b6ecbc349da0d085611a82705ed7eb7d08fa1ffe41bad6b7d30dd4eecc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12765) once gcnative.dll is disted and battle-tested,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"75cdb3e1646b6902b18a6e03e39eb2141ff266aac0a525562568151ae6961395"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: (OPTIMUS-66467) Remove guard after some observation of gcNativeCacheClearCount to assure"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb905fd466bff3acd88f330c5370afba55a1900d8f05c586273edff1d944d7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-63323): Unsuppress when cppagent is fixed to call with CallStaticVoidMethod"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1827}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1a749ac9fc1716f5aae02ca92f83d170ad0702627c02bc53031c68c0277f33c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-78287): - See note referencing this JIRA in ReflectivePicklingImpl.unpickleFill"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/EvaluationState.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"47b6778090f3036a6b07131078118ebb930fd82beaab26951ece654056be146d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-38391): Deal with overflow (for better reuse, not correctness)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/XSFTRemapper.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"c789a15a558193de062d0a4104589ec372f411beb501d20d9f4b4fa2c88945f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40449): Remove this patch and rethink async progressReporter methods"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/SequenceNode.scala"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"e27e93cc6db3655a42db867012f514eb2bfe87bb592df5bd543880148b35a954"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-74952): We currently don\u0027t have a reliable serialization approach for recording tweakable"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/ScenarioStackMoniker.scala"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"98e70c33b68f90135d3599e128dddedf884b894cd5c94fb95e658a2614f654f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Do they really need to retain their types? If not they can be moved down to NodeTaskInfo"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/PropertyInfo.scala"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce2c53d6c74f418d28a9ec80f25ec4d10329c651abdf8cab06daa176d57ff54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): deal with this in a uniform way (e.g. flag)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/PropertyInfo.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd96c80ddb33d60e729fe2011d3638bd0f6ae8f9632acd849738fbe052ed3c8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-25314): debugging aid"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGTraceReaderEventProcessor.scala"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dd888179faadde1be7ecbdbe9a2434c93b44dd409726386695e97e07d1f2519"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-44108): rationalize blk ID"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGTraceReaderEventProcessor.scala"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"b385b6f80f2070f5b752b3633bd360484fb8a22809fc12c9a5f4e4f4ad9ac6c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): remove this indirection, but that will require a code update"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeExtendedInfo.scala"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c3e7410764457901dc0074df4e73368ab30097f3da85287c456873d1667baa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-10900): A cleaner solution is to change to use indexedSeq and just check the sizes and fail all nodes if the lengths don\u0027t match"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/NodeBatcherSchedulerPlugin.scala"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7223adaee1ec420d3ab868c40318930c16e5e5b4271510d9868741bc6c2ce8c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17918): Review auditor usage with XS re-use"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/Node.scala"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"341cc0e0817537c7407e327f01dc2ab906aa5ddbace7dece5d3203a7ab5007c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57931): Because of the cache resize bug described in setMaxSize, it is"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df5effd1aee8e9e93c08684e5f13d3e53633a08a284a6c3adb8e3f60b45bd36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57931): See comment above. In this case"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a349a72cfe93b9f2b7247ec9e82e4649b72cd9817909a82465689598aba06b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-24360): Look into merging with"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"530fa0962bc4de340dcc1da5fb77418f084b795a9ac53fe36beb5ac33fedb107"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57931):"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":683}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a7cb161ce9d0c91cd03f06d2e549816c05e9c6f41919e1d1a28e38a6bd165e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57931): This should be fatal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":974}}}],"partialFingerprints":{"codehealthFindingId/v1":"67636d016d6ca321e51e077b5ad983065f8c01bcb7a138fbdc1a558e00a16cea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57931): Any size mismatch should be fatal, but we know the resize logic is"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":1000}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d635b62f6680de4ddc6b79c8327bc9b736e149344a5f9b3c627c1e99ed4567"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18724): revisit default values"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/CacheImplementations.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"503ed1b09f5848ad8a657aaec0eaa932a3226ec0eaf4206d87ea73b684ba7c15"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57169): include timings here once we implement them"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/SingleProfiledTaskData.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"b47f31dc24199207640d6d78d28114ceb4162c8b0def6cf4abe43e997b57e2d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-28314): eager filtering could be applied here as"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/ProfilerData.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"74cbaf4033ca3d14f54cc7486d347f9fc086f55c9c0af6a9d81d2df2d534a234"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-70380): Scala 2.13\u0027s ArrayBuffer, which used to be used here,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"1433d55dfe4181ea5ef03ea037e11b9249c3c8f86ee26d3b78968f1b4696c646"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): see onGrid above"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/Profiler.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"abcf96f856c92f2addf56fbe626f1dbb6e54d6f00b7023316a70c7088f0b1996"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46192): do less work on initialisation, and don\u0027t rely on ordering and mutation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/ConfigWriter.scala"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"7efb0d7b3dae3b4c84d94800852184b799c21069d170cf049e18af313db334e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46192): do less work on init! This particular call makes debugging hard because breakpoints hit in two places"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/pgo/CacheFilterTweakUsageDecision.scala"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"46861e174ac59942c493a6d3d2a7d92016a46fceb75a028925dd0233ba727231"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43368): Generalize for any custom logic e.g. TweakNode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGEventsObserver.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4ffe0f6729d13ace9de54dbfdcdb4f34bfbd6a5a48fecf3a66fb1b1cd14d15"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-59089): This should be replaced by _cacheID"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGEventObserverUtils.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"618d818807d49baa6b0ec12d3d02657e902e11f33c5b88bf0a67ea2768251a0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-44050): enable tracing only for specified nodes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGEventsRecordingObserver.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"e953145a872f0fbf5d7e11aaf6e42f910aa7e7149325f264bdaf389a90346f32"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14037): ReportChange should be driven by the TrackingScope, or removed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerRoot.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"983d9fd4f830d348030584b2a399f33e848d4799ad9d03509dd9a144d7f93751"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-19245): provide full diagnosis and recovery from deadlock between commands"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerAction.scala"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"05de33c8bfef9836935bd092b7706680acd3c9aaac9fee0d0aa03c13ea63ddb4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-64532): This is a hotfix for failures caused by rejoining a now disposed tracker. The root"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/handler/HandlerResultEvaluator.scala"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"02c8fa93dc31b3993357253754f313ede09c796081fc0d166729a9d6796131ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-64658): TTrackRef used to extend WeakReference\u003CNodeTask\u003E but doing this creates"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/ttracks/TTrackRef.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a8df337c28434b9944f16a6810658d6bad650a206c010acf94f59f6848d076"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-65703): This reference queue is null in some tests, which can cause memory"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/ttracks/TTrack.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc88169214cd2d7b5b72a6e3c3ba72350829fb00bc26e89dca54d9d72d157ba5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-59089):"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"0562482115fec31f4677fe9db5d75e1a76cf11aae0589dc4ea894e0de03fe3ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-78287): - See note referencing this JIRA in ReflectivePicklingImpl.unpickleFill regarding the need"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/ScenarioStack.scala"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"4363960e7e5b641ba9fa7b39b839937434ddbc1bbbee169ac0ef5ea979fb3524"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-78287): - See note referencing this JIRA in ReflectivePicklingImpl.unpickleFill regarding the need"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/StatsBasedInterner.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"22156e3d8bc3ffac4bc8865299948e7eb9224f1c0d5d642d7f6a1cbb6650f8c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //  def lift: NodeFunction1[T1, OptAsync[R]] // TODO (OPTIMUS-0000): !!! - What\u0027s better here? OptAsync or Option?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/OptimusPartialFunction.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1f32a3f00dcb93fe0201f7eebba887c4a018171a8bf4807edce32b03f5a938"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Re-deprecate after fixing dependent apps"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeResult.scala"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a1bdd81de56a814f4fd5451893a1db46e9d4ec9a7d059a5f548ec78d394a810"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // allowIllegalOverrideOfInitialRuntimeEnvironment HACK!!!!! \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/NodeFunction.scala"},"region":{"startLine":1701}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4290d6951b4cf781c4c4663c81b2f9b7a72df4df2e966f6cf4da5e5d20d896"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-10707): commenting this out until we get a fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/EvaluationContext.scala"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b5a832c8c5a91c848e9fa786a12bcbcb580bcb296f5c66f338897a394758b5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Lots of optimization improvements can be done here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Async.scala"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ec34dfa4eb89fdd93f20236781490add8c26a7f0cf26a9354e146a918d4b821"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11637): we maybe could make this lazy (as it\u0027s supposed to be), but for now this will be ok"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Async.scala"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"12191e7336134fd757a404672d793dfc0eec9d573a57a3612564d70031607f1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11637): we maybe could make this lazy (as it\u0027s supposed to be), but for now this will be ok"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Async.scala"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c4a0696792115187a668475ad98e7c4e1af374ff822f990f4992d1e9a70e5ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58467): implement proper support for trimNativeFirst, to make trimming triggered by native heap much more effective:"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb27e2c19a9afeb3b278b330ff1cefc3e9b4c8896a7918c8110c23885de0aae9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58467): merge this logic with existing clearCache(level) routine, to reduce the amount of code and provide unified behaviour"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78efad2866a34a20279455a7ffa9ed1e606198f962266c7a56fb52c58f9ece1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58467): move max logic from C\u002B\u002B to java side in GCNative, and get the max directly instead of trying to replicate"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"964fade0e2bce6b2a11a8f91d794150d181904403483280ec56988468fed6099"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58467): can be -1 if undefined - handle this? Actually any prod process should have the max set, and it\u0027s unclear what can be done if it isn\u0027t"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/AdvancedUtils.scala"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"504cba301dc60e52397b446b56b64dbd6bdecf4f9b3d429ac38f1ca946648b27"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO  - make to UniqueKey, not Key \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/dal/EntityResolver.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d2e5fe5865181ace586af86622cfbbf243d91fc1f974449a775075287aaf7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Remove all xxx$newNode they are meaningless here!"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/dal/EntityResolver.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5e634bb4181e7a211f16fb6f7dc4ad38fd8f44ff81a60a907d23946602d3310"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-21169): this path can be removed when all brokers support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/dal/EntityResolver.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"20202d7d3ddd6baa79eb4a08b4f404aa4dd6764192d7a2fda40297cc7f3f7916"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-21169): this path can be removed when all brokers support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusTask.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"598e672a2c735d8da5ad8abeaad3f89b546b5fbb2c53eb006ee81f0818910bf7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-16774): move EntityReferenceHolder to core and fix the signature,and the callers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/dal/EntityResolver.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"665c37b6e1bae71a9e2d79f42bf22a7a3d4a968ff57136962d361998c46d8b72"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-55093): remove startup content option and allow only for test"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/inputs/GraphInputConfiguration.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"a28f10ffe6d748ab847dd0fec9e8dd89f5692d44f49c70aa1906b6730d73d6e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): should be converted at lower layer or DSI-specific thing"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/PropertyMapOutputStream.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"1001edd3cd33c7dff6a4e6290e823dae69533c356ef6b10dad330196cbf72b0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-78768): This is really a context for the unpickling, and not a stream. It should be renamed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/PickledInputStream.scala"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"29daf39a66eceecb7758368b964b466e32a694284340204ffc807282282d1367"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX Filter out overridden methods in nominal types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"011d1b34ffaf9a6b02c39e2ca1b63f4ff3e6d33e0d6bd7c1849cdd3a65c1525e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): if NULL or not recognized default to \u0027Standard\u0027???"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsControl.scala"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e51c67cc41764e99bd97f5affd87abb09f989dd3d4f743a22cf040e868e78a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): provide a STACK whereby an AppStats can add itself when the probeStart(...) method is"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsControl.scala"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"173a49141541630308117c7b14ff5fc833565cfb9ebd8d7b2444cc5447c9971f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): there is no standard way (that I could find as of Oct 2013, Java 1.7, Scala 2.10) to get the overall CPU"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cf454a832bdeaf9bec592a1b7cfe48b24af937b6fb4be2c724de39574c279dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): get the OS process ID for this Thread"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStats.scala"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b53e905c4b850a3cf938932b4f6db41c8710c11ed20e42f332c71b55906e31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43113): we will remove this once we have a strategic solution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/storable/SerializedKey.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dc86a7f099921f0006479ba5139777e535e175a116c7fae1f63f05d733a05d3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20613): Remove comment of toString method once typed refs is enabled in all DAL envs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/storable/References.scala"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c61c17b88aaf8de4035ba566dbf2c7b35e26731a7b4a7d2c9205cfcbb38a649"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20613): Remove comment of toString method once typed refs is enabled in all DAL envs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/storable/References.scala"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c3538f904bed388aebb371ccd301c15cc44299dcc85ddaa433a7fe5f2761fa5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO (OPTIMUS-0000): make this sealed, and move to child classes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/storable/Key.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a86e6bb50aef488d0d0fe98249227f2ab6313d4c835da5f34b82dad7298e71f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-50103): remove second parameter and reassess if it needs to be a trait"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceDataAccess.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"c323d57acd368c400c42ddb243ff596cc4a5286b824165e3a08ee4f96963bdf6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-73152): Is that not potentially race-y if the waiting on chain is obtained from another thread?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/throttle/Throttle.scala"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"348c316b8aa816b43672761dc7abafa6b7120fe8033d4e58d0f75a8330dde5df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-72542): If nodeKeys is empty, then all tweaks are cleared! That should probably be changed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/ui/Gestures.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"711b99b6350faaea1347de910fbd9536b01a5c6cc01f097eb5be2636a469b0a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13414): remove this def asap. Currently needed for edge build compile (25/03/2015)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/bitemporal/Timeline.scala"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"081bbe93def5c6e74a4ed30b672fbc4b36a3d381152003734b9d9ce75d86421f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13414): remove this def asap. Currently needed for edge build compile (25/03/2015)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/bitemporal/Timeline.scala"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"10afac3f5a625112c018880ee099bf9e883e8d6c0dc9d27e7e3d34bdc83ecae1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-71331): once stored entities within events are supported for streams we will need to revisit"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/UpsertableTransactionSerializer.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"4192db55d8cda37bd8616c24ca0bfd8b1b0bdb1045f274b5296b5b5a014f9855"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-23546): please correct the exception and message"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/RestrictedDALEntityResolver.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"029d92fa48fea25f4726e4a6a328dfee348e9b8ab0de06256f99204c8eb5f1dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11591): Only used by tests. Delete?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/PersistBlock.scala"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"432ade548bf72f9ce551538634ccb5c03183c567fb83441bd8534278c80b44ba"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX CANNOT DO THIS. JVM/CLASSLOADER-WIDE STATE CANNOT DEPEND ON RUNTIME ENVIRONMENT!!! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EventSerializer.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fac95ab5fc59fcfac761fc855c702e1c280bc9d93093037c589cba7095c5361"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13716): slot support for events, should not hard-code slot 0"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EventSerializer.scala"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"520aa4d268b1d536d3711af5770e727a9380ff01ebaaca4c0f3370241edf19bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13716): slot support for events, this will need to return MultiSlotSerializedBusinessEvent"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EventSerializer.scala"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcdc1cf013fb6571d0cc892a3b06f3c602cafe6774144c8d4a2985677a5798d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-71331): handle stored entities referenced by eref (once streams supports that)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EventSerializer.scala"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"11161be3193c5bd9090a74790ce8e0239a29a6ee0ab7c15215a9fbf7e3ca5e0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46195): Make them lazily load with LazyPickledReferences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EventSerializer.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"f420148b70d5500261af05e726dfe0cf7eafbf5f6d0fe23484155fb897cdb1c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46195): Make them lazily load with LazyPickledReferences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EventSerializer.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f9ae17abc74d12c83f89aca3545099b8d3e8f781e8a721e5bb8c52e14e60bf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-10933): We need to eliminate the assignment of dal$XXXX here, however, we\u0027re going to decommission inline entity soon"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntitySerialization.scala"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"dafed199e5d72fb6e98866e989fa5af5a62cd18560bd9d04ceb5c34a08845aaf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24843): remove PutResult.txTime dependency"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverWriteImpl.scala"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"31eafb3fd17063e2d83599064867594b263f7540ca87aac484c5afb9657bf737"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24843): remove PutResult.txTime dependency"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverWriteImpl.scala"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7a5dbe82191f45658eae5bf4bcf8d32e72a02656a33e083a2447987009df1e9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13067): HACK until we always have a temporality"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverReadImpl.scala"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd61bbd79c832c4b80ab4716619d42faad80490353ae72d36209b85346123cff"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX Revisit semantics of TemporalContext: we\u0027re explicitly overriding the vt, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverReadImpl.scala"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fe6839b3ee61519c7a67d5e44fe1c757089dc157fb9ac79701b37383cd21502"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: toSet, need to keep the result collection during the dataAccess transform result into Map \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/EntityResolverReadImpl.scala"},"region":{"startLine":1118}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea936851af03b844c60d8283c51a9b63dc331e52c63b79d74505ad812cdbee4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47658): Revisit this when service discovery logic is enabled"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DalServiceDiscoveryDsiProxy.scala"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b8087c39eae7bc304af9d8b361cbc94c5e10e83648f4d22bf38701ad9488ce4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Revisit this when service discovery logic is enabled"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DalServiceDiscoveryDsiProxy.scala"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"8be5045216d1218d58b041f05e4cd53c5e6ca06ee7de5c25499f00c960bfac5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11594): revisit name of public API"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DalAPI.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"1150be045728b798e2c72f61c43d2c52c5f198dcc835c01a751495b44bc549b0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11594): revisit name of public API"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DalAPI.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"d48ef0af968c75a1576bc8843ade004a77719661defef4bc76740f08e6d055ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11594): revisit name of public API"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DalAPI.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"96896f8dc598966c6c985ee85ffcf7b1ea252ff6b0a859c35cd8d3674152c370"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13031): Needs changing to an @transient @entity, but @async not supported on entities"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIExecutor.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"812237653414e5c92a004d9677303c7906a3357e43a6c291cbaedd336edf996e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13031): Needs changing to an @transient @entity, but @async not supported on entities"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/AsyncDALOperations.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ebf51f437cee4b80c2ec23b4101782081b8aa71036d6be35b523b471fbc6a92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13031): Needs changing to an @transient @entity, but @async not supported on entities"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/AbstractEntityResolver.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8dd8ea9ad38be429613e3bf178af1783b174ad0f8f7d9d48506d517c7660e64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13424): should be protected, however tests including shockwave massively violating encapsulation here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIClient.scala"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f00a85ef46e46c876fd8e32b29e484c2b30368d4b1c6675c4b1f34fcfa7317d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13424): used by tests including shockwave test."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DSIClient.scala"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d892a991fae3bb214b3b43708d0f2a3e8c5c2bd88047f856bad3a696480cc4e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51356): change back to exact equality of classname after migration is complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DALAccelerator.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"00799a083d8654bdce8ca532210f826d724fff5ebf7cc5cfcdb37a5f1afb3345"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51356): change back to exact equality of classname after migration is complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DALAccelerator.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"b099f46b58ba3d23789a9f35f573a824e11051b4aad76fac210efaa1418ee049"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51356): change back to exact equality of classname after migration is complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DALAccelerator.scala"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ff987d45c2b4e0776e171c2f9526c21da003188831045902166e2242ceccb2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51356): change back to exact equality of classname after migration is complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/DALAccelerator.scala"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf98579911d9b28802adbf758c8f36146dbd3f0a9d881b1e5095e35adca30a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-16909): use async delay, adaptive backoff."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/AbstractEntityResolver.scala"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a6264588212ef49f341b520016e11700dbd477d0004a27eb189a6cfd4ef4e2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-39528): remove the suppressSyncStackDetection after fixing sync stack"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/AbstractEntityResolver.scala"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41996cb117b2737f6d804646c6f0876fc0ef7bbd849a1a6e75233de546ad857"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-52127): Handle Connect Disconnect events in reactive side"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesProtoClient.scala"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ba2b01364568d7cfeae717326fac1b738c12d36f3b3a35fc68894627226995"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-52127): Handle Connect Disconnect events in reactive side"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesProtoClient.scala"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5c1e7a5dbcf079caf7720db3c00f55ea92679d18a0954212cac1dcd1f2aa95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-49663): Add client-side filter logic when notifying upstream."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesDsiProxy.scala"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d0e0a875d9d1497d517ed1ad7ff4f7fcf1597027b3b816192e083ba95f8b8f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-64719): only in memory supports this right now, redesign and implement for non-mock environments"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/messages/MessagesClient.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdad45a64cc7c2bac452001649e1b222bb4d579ab347a9fd61b997195b71ecc9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-80295): We only initialize one of the thread, because the other one gets initialized in a"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dal/pubsub/NotificationMessageHandler.scala"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b6276c3036025f8e9ac512b1a0296bb0281a82c819d69842a284ccc33b24b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14722): support server-side versioning for non-default DAL contexts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/VersioningServerManager.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f7fe5771778cba54f2fca12c677650b3235f1d436d968e86df3fd22ff0ff96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14722): support server-side versioning for non-default DAL contexts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/runtime/OptimusVersioningZkClient.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac370812b716bba2da65c30179824e6e9a1d1b0b17b2a318fb3185ef5074c78a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13380): we\u0027ll need to support scattering the request among multiple versioning servers, one for each classpath hash"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/VersioningServerManager.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c8bf7ef8582b3eb60b72b1b3b659741a4df4523f6a243237ba9ef2d2c667bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13380): we\u0027ll need to support gathering results from multiple versioning servers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/VersioningServerManager.scala"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ff47155e248d0c8ec3c69b9eb13691fa33c468ec7612298789a2a701a20c21d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13333): Privatize."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/MessageContexts.scala"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"707a38ae3fef2dd22067831b94d563c9299a8e3d2518e2a97294d7018fd1ee34"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-16988): we could also cancel the request on the server-side if it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/MessageContexts.scala"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4769d521cc70279bbdbfa6d2ab27c4d63526b9b6e1325e41e37fb178d409896"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15272): remove this"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/DalProtoClientMessageReceiver.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5615905f64fbd3c1be48773666b1426110d828c113560443ce08c33bad5d3ef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11205): Waiting on msnet feature addition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/DALProtoClient.scala"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"84be6c5c7a50d23fa3d01d32ae79f15c4ee1627d82d476de0192232b7b9b5d8c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-78287):  When this JIRA ir resolved, we can remove the logic to disablePicklingInterning. We"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/ReflectivePicklingImpl.scala"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7627f3697bc68dded0047849c9a028460f9a30a8578411a9046206a76368794"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-22294): Asyncing the closure triggers sync stack detection.  Apparently sync stacks are ok."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/ReflectivePicklingImpl.scala"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbaa60f46e0a06dcb44dbcc64e28aac893ce06c45345da56d0133c0912de1bcb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24163): This can, should, and will be a compile error with this number."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/ReflectivePicklingImpl.scala"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"2665aae06d8821c1a75daa150fe8ac62c324e124ca827069d8fd4b5111a68cf6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-63850): Investigate the bug in scala reflection library and remove this workaround"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/EmbeddablePicklers.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3417472bbf834139acd32fcc381fe07092da2e0c25fab0288380dc3345958fa"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK? What if the outer pickling stream has an Entity -\u003E EntityRef context? \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/DefaultPicklers.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c11c451fa4b1664f842041fd3379b22b7162802c8419af524ece6e355a552100"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13429): Use adaptive compression."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/Compression.scala"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4112e4032a346a2523bfcda8c5653df8315b651aac5bdfbd2731ba19bfa8200"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13429): Magic numbers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/pickling/Compression.scala"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"062f84af308535ef2ba9985e1287effe9d556564f9ad6a43cca52041be1fb965"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13429): 20130919 we can remove this when we no longer have to support multiple entitlements mode. It will be great!"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/security/EntitlementsMode.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eca2c970d20019d2a3314e04133cade4675e688cb8f86b1cb0da775039914a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13429): is defaulting to old-mode the right thing to do?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/security/EntitlementsMode.scala"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"706600a4170e4a0abcb0338fe98209f81465d964e7a8ef8e64f27602cafce145"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15608) Support Priql Based TemporalSurfaceMatcher to match the value of entity not just the class of entity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/advanced/TemporalContextUtils.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"81a35ea855966061f573e09aea68183df823f3287283be7664f6c6f6e3b562df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24012) this is not yet true, but should become inexpressible due to class hierarchy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceOperations.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f47867edc6d07fca0fff8555d9683f5cc7ac1032165c18c779c05d38a6febc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13439): async(..."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceOperations.scala"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e2da30ba364182c9b3eb395f6faff4517f69fe1da605d97d215109176c3ae94"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-56981): code refactoring for tracing feature"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"14f2e8f7b39e0eb61e5c65e3b1e3f3a155a707216c97af8bd660fb747d74f157"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13108): We shouldn\u0027t pass"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ad4a44b805d554f89ec2c51a78ea82a7809c95ee0199067ed16ec6f009442db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13108): We shouldn\u0027t pass"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"a86d1af316ee5942d30722440d9102973578a38fed7f35419ced9bdeab475193"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18562): Fix className in TemporalContextTrace when enabling scala 2.12"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"1466714cfc982dff2fc487c9ba877f782205f2a561303a92b4c18dfa24a59b16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18562): Fix className in TemporalContextTrace when enabling scala 2.12"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdcf1e5b5ba114390c80db9f1af1eac9e6695ce1df1ab417672e7007d6db2aeb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20656): add new syntax block for permitting temporal context creation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b65660b8d9a70493038c5ad4aa26d62bb445c68054166384972cbd2e2f04317"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13434): @si?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"75bef64f5458bf9aaeb01eb5eeadfbfae79f6c8c0dd537fa9ec62cd783790a96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13434): do we need to generate DSIStorageInfo here?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7500ff8ea2d48dc0820b556502d96414659d1dd14530adecc097220e3b81754"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13434): consider a check for no data before we throw"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd2149bd8f12b4a6beb92ff9043e87c6064cb766e84186fc400ffb989a48819b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-17205): Clean the type cast"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c084a51a6dca9820661f18b8b369fc6447cb1f30ee308d28446c9abdae976bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15821): graph team SMEs to review reactive memory usage. For now, to prevent every entity received"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"ede6ce3c1c2249230c7632c441b6a5732025fd2b0f7db94afa61835fa757f4ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13434): review the correct way to do this"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"71a55a52b9105231f1075771e76de781936369234ace23ce64e9c329a7658ca7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13434): fix me"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c6f769615cb3821413f1a113ee9c04d03bbcb390bde41c57c5aa02c294af0e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-48032): investigate why we don\u0027t search children"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/AbstractTemporalSurfaces.scala"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"534a441e35138fa17cce6349ec1c40dd83a4293bb502d88de7479a58d689aa2d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30238): Replace these ZkPath and the parsing impls below with Silverking\u0027s internal MetaClient impl (skVersion is actually not needed)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/SilverkingPlantConfig.scala"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"729d87a4c9e25fe42269a09795c3ff043a360f3b9f764ae976dfcc7a16e0b922"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license might be needed in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/Observer.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"0387cbfea462b8bddea15eed854c88a54d1a73fbaca0c6ee7c327bee026e6af7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license might be needed in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/DateUtils.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"720034a3d7eb47a48aaf3f01a57cb905162aa251b540e9d37434dfb16f8536f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-36520): make \u0027maybeKey\u0027 and \u0027maybeKeyHash\u0027 non-optional."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/ObliterateAction.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"17dd013a9a5450ebb93977f8515c8f6e3741257e518161bbd7f03929e8df94db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11412): do RCA for this JIRA, should be removed once resolved"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f200492564a34adb6c3ade9545a8a3d7e3f9541ed94d25b9af12b4b62ddd425"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13289): Remove. This is needed by DSITxnWorkManager.getReplicatePutApplicationEvent to correlate effects to actions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"786be75f85cb87ce406a25045c137133d864ab8b891aa388fd8d21287e1563ad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14903): remove ttInterval"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"0589c282f865b885eb127227a61988d5ebea75a8fc60c6d7569a099cc9bed37c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-36520): Change the txn actions to use concrete type rather than Option for fields added after initial implementation."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffe739765e51a77c43a2c1e67ec76a58b48b66938103df1e69ab6fffa61718a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-36520): Remove Option from typeNameOpt as"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"90c99755e0fef35eab298a3c49f2b0d0a35b241c1f8d021e0300bfc4ec1e0e90"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-36520): Remove Option from childType as the field is always populated"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e8cc6504e5d15e4bba07ba5da1cd601f150ac18319d45e726da81872557e38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24842): remove PutObliterateEffect"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"54d104d07db5bac79f9f50b98d319a0f77d1c9fee516e6e7a2e200e5d05631c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-15391): remove AddWriteSlots"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":701}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbbbffc1165ac045fc5f450f062feabc2b43ae80e63b8163651a4b718f1bb768"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14677): Remove this blob action when it cannot be generated from worklog and tombstonedBlob collection."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DSIActions.scala"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c15363134fee5b17309486456ef6d5a0aed80a87e546de9242c747c84bda86a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-34635): pass correct shard key and remove the default"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/base/actions/DBRawOperation.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"255451ff91128aaa2fac7da28977770de03782fa62a3d8445cbea9e16d9a8ae0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-64332): could support multiple keys here (see StreamKafkaConsumerListener.notifyMessages)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/messages/source/kafka/StreamEventKey.scala"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"99bb76d538c0ab86720d2741ed201920784e12092bacde5d5b19bddd0c59766f"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX: collect all use case of ResetState \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/notification/NotificationEntry.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1ce729d599665277fccf7c56ef62469620e5778f61007c2eadf374a1b1178f4"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX: If we expand txTime to [txTime, Inf), the following fields contains all fields of a PersistentEntity. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/notification/NotificationEntry.scala"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"70b1c33fc2c353b3113451181169613776bf0e804e89c58e0a836ca8d55ebdb8"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX: Assumption: entity references are only used for client side cache removal, and types are only used for \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/notification/NotificationEntry.scala"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f830d53525273ead0e565224a2fc4f7bc96ea76e9d8bf7aebece254a847841"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14952): Revert this patch once we solve the ordering issue while"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/AbstractTypeTransformer.scala"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f942378c1e1264ab8791f76b9762de5353c689d1d69df1923a751d076773fe4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license needs reformatting in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/ThriftyStringBuffer.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"df2996684641a69ffdfd4bdfb4de68065c2503962b0811ab519e24851c2e7e9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license needs reformatting in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/ThriftyOutputBuffer.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"932d6b8bc209a3d492a94fd95fff6519f7d933bb0076fb0d129adc308d0d254f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license needs reformatting in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/CallbackObjectId.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"820b3bda2e08c7f7e6a4f03fbe184f36e8a3d4fee9144deb074711cc0b1cfad3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license needs reformatting in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/Bits.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"882e1600daf8cee83e8ad7216c477e60ffbf7c671c5af32ff5c51b3e811d615d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license needs reformatting in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/BSONTypeIds.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab3963eb37482c2b9790e0b1a299626a425404efc863c901b42a0dfd7075c3fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57177): license might need reformatting in order to publish this code as open-source"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/BSONCallback.scala"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cef03bd93b05269c595c5f4375590fa9cf7c2c18fd1e9125a63a51cc8865804"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-22471): move to using only a non-temporal token"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/session/EntitlementsToken.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d307c3e4e065a57adee59e44f740086fb7c941cd3e3229fe5ef52ed06a9d20"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX use unsorted timeseries \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1458cc0a13108a40a7457f21c0b86490b3eac45407f15eca72f851701118c9"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX \u0027actions\u0027 can ever be empty? if so, the assert in the ctor of UpdateResult will fail \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"20b0f8d90ff63f1d0f81ea1bb678ce1518ceb95099009135cb59002f4a444225"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-41200): remove the following case after we fixed all overlaps in unique index"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpaceImpl.scala"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4f9f4e07b222e54b0ecb43854790597e0a473e96eecbd15a283ece1543c719"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-80295): The two methods below should not be necessary. See comment in DALPSStreamManager about it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dal/NotificationStream.scala"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46a3972db02408cfcbcf97e86e39210c8ed3d6ef6ff874e3998e42cd60eebbc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-49663): Support client-side priql filter when subscribing to an @event(contained=true)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dal/messages/MessagesSubscription.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"f266d68865d8de35937725b2df7425ec60d3567badf620ef702545b483e173df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-18417): use the feature"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/Feature.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"a805885e31fe2631123fb09817d6a30c0c569a673669caf32db1d0bc25cb61d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11744): remove this method once all brokers support connection-level sessions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/Feature.scala"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"31dbfc7ab5a42567142b7483d9ac439b4106d78a399e6b0aa6843f3234a5082c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51356): Change back to full platform classname for AcceleratedInfoE entity after migration is complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/accelerated/AcceleratedInfo.scala"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"30e95e5402d5827026e0f29063292b0616b2f18ab4395e13f04b312c8060097e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14649): Investigate how obliterate works with slots"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/TombstoneBlobEntry.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"80e2021c675e7b634097aab2aa3dbd85e7207991ae9d33a960afef704beec6c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20203): Handle this.."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/DSI.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a104ca2031b693205668e9b906fd09eccf545536ba46af1bf2a26e6eb6373a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-58124): change key signature to accomodate keys of a different data type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala"},"region":{"startLine":2001}}}],"partialFingerprints":{"codehealthFindingId/v1":"093643036d854d227abb3594d43e476e912ffd752da4546e4efa62c031113233"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-20990): This should directly take FinalTypedReference."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/Command.scala"},"region":{"startLine":2037}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb3f9645ec21d9ee1698edbe1b9a7a28807f38d21396e2ad81098943361fdd9c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14120): Remove the option to use the legacy behavior and remove excludePrevBusEvents flag"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/UnitOfWorkSerialization.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a531faaafab4d511de21cf778757e11655d427b1d23fac018be038790baebb3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11744): this should be removed in favour of SupportedFeatures once all brokers support it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/ProtoFileProperties.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"d082a908d74924fdbc467f5cfb2f694d884597de9dc1bd17a616360e7e4b74d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13435): When we serialize map values, we serialize the associated key, too."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"c21d97dd1c9427a598f2998dbb2f91a94ddd3835298cde8be4cbbb9e734fda0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13435): When we serialize map values, we serialize the associated key, too."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"27fd70151f79acd1fe9dbb74946a49de7b96dea607c4f34afb1f7e31abda673d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13436): string value is used for filtering on CPS, when all clients have"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd6a641422e3596229fdd4d787b3e131b10f6809e65778ed12f9e547ac5fe31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13436): string representation is used for filtering on CPS in DAL notification"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/PropertyMapProtoSerialization.scala"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cb33b64fbf25a81eab622d13bfe14fcb4558fe0930a6f7559b9e903bec74167"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-28487): Revert commit 2208323463741454f4109e1fd72c811069389272"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/NotificationProtoSerialization.scala"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"18661e1567213ba5bce8fcfd94b0adcf9a0b034d2e74cd77af671583a532c1b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): This code is copy-pasted from other places"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cb17452342d6dbea72653c98c604267f797591b138cc30ba7ef1ea15ced288e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): once the multiple roles change has propagated to all environments"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1010}}}],"partialFingerprints":{"codehealthFindingId/v1":"acdcd1b40c19a3ed9e8dc9236212c37a33635458c7ca5ca77e955fc3363c7267"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): once the multiple roles change has propagated to all environments"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"0169df83d2a7a87c52df2d1e1f1d6a9dc821f9e25324fa253f273a657a03815e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): duplicate from toProto(req: EnumerateKeys)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1716}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac5c8cb33f1b1ff40506f194cfd85559f67aa9404bb476c5bc3031615704d71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): duplicate from toProto(req: EnumerateKeys)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfba109a0194f609ec55ba96c5c11c70c9f0b4472408de133a8a790c9dc3972d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): this needs refactoring out (copied and pasted)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/GetCommandProtoSerialization.scala"},"region":{"startLine":1873}}}],"partialFingerprints":{"codehealthFindingId/v1":"692e267c0dfc6f76ee64ceebe2e2560e20381cb3d4ffc0e392937ce900a2c14e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): This code is copy-pasted other places :("},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ba155805930330b258e8abfacaf6cde97e410b9dcde2f81ed07d0488610bc21"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): duplicate from fromProto(proto: EnumerateIndicesProto)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"aca457e7f26749f298f82dc6fcf595647c19d330d51e2481274917eaca6dbc04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): duplicate from fromProto(proto: EnumerateKeysResultProto)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"49c570770920e1582c71dc1be5312e586f3c319f5f297eddadbdcafe36e4af77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13040): duplicate from toProto(res: EnumerateKeysResult)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/EnumerateCommandProtoSerialization.scala"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"60b35ee04f28bf02356da9f7484eeaed32db3ddd22701d8e89abfdedf1665f1a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-20204): Add the serialization logic for PubSubExceptions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/CommandProtoSerialization.scala"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"83741fa11c6d8ca46a16322592df90212ed6c9136075a266142bcb1e1281ff41"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // must not get here.  XXX Better hierarchy: SerializableCommand \u003C: Command \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/CommandProtoSerialization.scala"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f72c8ebd0ba9b2fc35a8026a8b343ff5a0ad147f861bae5620c8bc772569b1b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14411): magic number -\u003E value derived from DEFAULT_ESTABLISH_PRIORITY"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/connection/ProtocolVersionEstablisher.scala"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ace5620e8ffc52adc0c3aaeca3a58a299a2c4b0326aac3e8c85dd1d63c9eb10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57173): rewrite versioning server storage/selection"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/runtime/OptimusVersioningZkClient.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"e59d5ba4c8a7bdbd2ca3649dc4a5a7363216ab57e0bece0a0977a628f5ababe8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13179): Remove IgnoreExhaustedBrokers property once we are comfortable"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/runtime/OptimusCompositeLeaderElectorClient.scala"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"e452b29a33afbebecad3b0af487fa9a1a9ea7c7e17efb17b8541a7849ef48b40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13443): rename these to conform to naming standards"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/storable/SerializedBusinessEvent.scala"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"140f3c09ac23d81e77a158fe1e96c304867efb38d07281a8b1b9e7ed72d14856"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-16209): We could refactor this and encapsulate the override behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_environment/src/main/scala/optimus/platform/runtime/ConfigOverrider.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ede81d100b05c1271fc1e22b15962c20f5320b61387342371e44dc78764960"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo : Unit? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/FieldInjector.java"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"6195eadd98530f60be691fefbc90baf48eb2cefcba1611ce14b724174a2434c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-76886): This should call the setter provided by FieldInjector instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorMethodVisitor.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"6485926713dfedb6f5a7e5a86d4cc1e27d11770a9e98731c48071dc4986c90e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-76886): This should call the getter provided by FieldInjector instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/InstrumentationInjectorMethodVisitor.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c810fe318c7a521a1f60217d86330d9bc5f588a1a9c9dd27441a10dd42191bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-76886): This should call the getter provided by FieldInjector."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/debug/CommonAdapter.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"b613bf605b2662ef23e7f72e3659a6a3f335766215822fd1469e5ad1b5cf2205"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-76886): Use FieldInjector?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/cleaner/CleanerInjectorAdapter.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"393ef1387fde56c02e75a99265ab6402b81e69db8277edd94aa22be9e01a108b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-76886): Use FieldInjector?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/rtverifier/CallWithArgsGenerator.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c3b9be6b28ca6ce004771a589a50150b2694b624a1134d122238235a6e45c9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-66991): revisit once we are on Scala 2.13 only"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/LoomConfig.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"a817e2ea1fe614e2e41d69ab41cc8f226c36a50b225d68b8e553038da6f930be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-66991): Revisit - can we use the revert rpo order here?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Regenerator.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf3ab21f89d7223a49066be1c5407a7d5f150aaeb47b1a1368568b6325ecd1a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-66991): Revisit the -1, ideally we want to only flag non-primitive args..."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/graph/loom/compiler/Parser.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2ca4fba0e2429c20bb295515a7e1165a2f6e1e53ef16706567bfdcce4583550"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30207): use StackWalker instead of this"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/systemexit/SystemExitGetOsInfo.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a6c0511d0be9335ea2c6f20fe29ea211893cd7eb8702938f09fe1bf04b4f844"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): make it recursive"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/UntypedUtils.scala"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e363e48f006235ef17bdbb29e7001c706436c8573a0842e67120effe26b2d40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-10006):"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f755bf1551dfc2236ee8d211d4dd87c474f648302f977b3d2806b1ab0b10a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): use attachments rather than tag annos"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedUtils.scala"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f7bc8d4fa57fd539df56883ddc70f1c17e5bac176876b90516ea71a7d5c4121"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): investigate NOT rewriting to member vals and instead generate member defs that point to the captured member vals."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9eee6879797a4d74e2b65540fa72f661d382df689c4737528a8a248c5054a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): update property info to actually avoid caching for byName arguments"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21436d1b053b7ad7c7551c2ed6665013df1e94e6cd6de13dc84034b863256bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): fix other functions such as args() and argsCopy()"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"76b1daadbd234b4460e0df52ee636f54757500213702921668bef6eed3bbb19f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): If we have by-name args then this gets screwed up.  We should really just disallow that as it makes very little sense."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TypedNodeClassGenerator.scala"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaf63d9fe53292ad026fc6029b01322725b76c53f5b6d764655bb24d42c0b482"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX: file bug report with TypeSafe to either remove duplicator (it\u0027s not used in stock scalac) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/TreeDuplicator.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9e00e855863a4cb9e8577d6fd72760d9452b7e1166d61cc920684e36723264"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Can we just reuse genStoredPropertyLoad(..) here?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/RedirectAccessorsComponent.scala"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f1d6142d861447d5d88cc5e72de1ec301a8ddfcf96175a96b8674577cc37295"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-56313): Remove the if-statement so that we extend our iterator check to all compilation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb0c7305eaef353da7aea002cdf28639f610d627ae50e3da3b21d8fa2a272c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13372): remove old check which is less powerful than the checkValidParent one when we can"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e6d9386a383d1bebcd7a15ef6b17ab61a7d29d0493b43c3b00acd391890e584"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12546): ban @handle @xFunc"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"263276406d7379b2257012375508d961f8dd16343885def3b017fcdbaa7caff2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13336): Move the type check inside the isEntity method, so Nothing is not Entity (currently it will return true)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusRefchecks.scala"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"898b7df328f3751cb11ca45c8ee0f93df349200bcd036db214b2173e8d5fc69e"}},{"ruleId":"D17","level":"warning","message":{"text":"XxxComment: // XXX Get rid of after PickledInputStream API is rationalized not to have temporalContext for events \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusNames.scala"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab18d78a26f7878c0d4bc6fd8fe5bb064c47a8eff45beb318e3cb83b176a5d5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): The check for BusinessEventImpl is a temporal fix so that we won\u0027t do the transform for it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/OptimusConstructorsComponent.scala"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"0feaff57172118b2fb12eba53ac778ca844fe17137b33c8b9ece5bb992d2babf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-26094): Can we delete this, since these should be stripped out by valaccessors?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/GenerateNodeMethodsComponent.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"11d84df1db21fdf31b0d6841b3f527d20f180e85ca8bdf9299a95eb93db022b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): XASYNC Should we defer this until later in the pipeline? The hard constraint will be that"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityPlugin.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"75f9aa0d2b00c5a2c72ea1cea814308bc7d5aa6be828606a0750c5f92e6d5758"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24229): Remove reflective re-ordering after upgrade to Scala 2.13.x is fully complete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityPlugin.scala"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"d63c1e50f1994e9760668d3def360d120cbb9ca262ca2bbb2aa005669af6f95a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13297): if we move the BusinessEventImpl class to core project, we can remove the type check here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"96683a58ef0e74764b0b96e9e12dd7ef2273e85877d70c1733a3022c8c4323ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24864): removing this causes breakage, but why?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"94f46020e57895e569bde7bcbb52cdb1ba7446f01a7d3abc9a0a619dafa86806"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-24864): removing this causes breakage, but why?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be07bdb160b8b9bf3eb3351f5d3930251c5563795605f491f24e6e9089e8c25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47219): check to exclude names.keyInfo should be temporary"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"51bd02bd293ab8da3861ea04561ce406c2d93fa294057ccddfa91633c6c7744d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-57047): The current behaviour is that only the direct overrides are considered when building"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityInfoComponent.scala"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"013c08638932afc479ab50073ded300c10696c771085b609e046b5be43af0a80"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-31928): should be true"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EmbeddableComponent.scala"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f22c139a85af624e5f450710bcfbc6a8cefd8495a091af5b54f4e6e693cc334"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-31928): should be deleted. We should always use optimus semantics"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EmbeddableComponent.scala"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"589b149860e80472f7c383827198c94f9e863af235de04a9c5f49be4adb7dbad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-25674): this special dispensation for events is a workaround"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/ClassifierComponent.scala"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8f33292aa80f12bc2dc0cd5eccc2447153f5b0a839f72b7783a03f78ec823f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-26094): We should just have one Stored annotation (rather than StoredGetter and StoredBackingVal),"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/ClassifierComponent.scala"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d49f8e23fe37194857fe4edea10eefa0acd956f986bd55eda411d91087462d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: (OPTIMUS-13386): assume constructors to be RT?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e0cda1a5e70b2de594d114e4ba350814b0b0dd229f350655d6956a4716d42f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-11637) Properly auto-async withFilter someday."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba8f7cf66675557c3611dc542d4a0b50d58f64955d34da113b54cb1bd82f89e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-26094): keep track of this with something better than @node/@async"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AutoAsyncComponent.scala"},"region":{"startLine":1655}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f27e84549616feebc527e9220e705309341cc92e5926288edea1a1a864f381"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-34257): The following is used only in auto-async; if"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncTransformers.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd3d38500eed827b556b142c7337155ca8b39b6db2b94f847a9d986193fe0e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): there are too many branches based on isByName in this method. consider refactoring"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4df0814771ff853a34ae8916e1bf2a185b25f84194ba9909fec022cf2b900ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-69938): Remove the workaround once we pick up the upstream Scala 2.13 fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AsyncGraphComponent.scala"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"6285f277a5592299af04f92b281bdf4f0c08856c43bf01e1a06b9757caecce9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51110): Remove this once we\u0027re done with package migration"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"d171c6a28680acddb1174a534a834f92f10bc914659bdd202890ef0a96a9763f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51110): Remove this once we\u0027re done with package migration"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"974817063a2011128ae44481c7a28def6eab3d019d62bae8e83b8375aebe6743"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13294): can still have issues if import done inside template body"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"939f102d8e39b734a02cfdf496022abace4252437baeb0cde335cd3add8113fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13295): there should a better way to generate: Tweaks( stored$sth := Some(x) )"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b21859786242645bbb3ec3d39ac4db8f67e9129f9f2cbf34a5b95770ce78989"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13291): ValDef and DefDef probably should be more similar (e.g. syncNode added see also RedirectAccessors)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/AdjustASTComponent.scala"},"region":{"startLine":897}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ae76ab8ef93121f0a9731a3810f611760904dff0fefb0c2349bb51b8c2ce5c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-26258): Don\u0027t retain all namers during property info generation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/provider/PropertyInfoProvider.scala"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"358c8bf6bc02c8655327b369600cf748f216165bd705db2fcb922f2a01a3e4a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Support: @node val y: Int"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/examples_platform/src/main/scala/optimus/examples/platform01/data/11_EntitiesAndTraits.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a1e38512f9828072eaba8b1e062073ad340591b3c9078b24faa86421183f4d0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-55070): Remove with _savedAwaitStacks race condition is fixed in profiler.cpp"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/AwaitStackManagement.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4173e624bd05d5c9154f3b7bf126209d4835602f5d17fc6a0179ab70df4a492"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-62591): Add kafka breadcrumbs producer to sampling profiling"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/KafkaSPProducer.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d78998dfb63e06f4383305ca0a3ef0903899e21f82ad2080e5c24524040988b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-65664): Optimize non-property-based indexes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/graph/PluginSupport.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"0302aba90d3acd738e2be94c0f3f2860c5ed199ac4138af3976ab66c0516df25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-71657): remove this compat stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/package.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c560eaa65a06f0cd530214d2116656ceb63d13dfbd499358a4945ff04dad9161"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Workaround for ArrayStack grow not working when size zero"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/ReplDsl.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fb150cf0a1e52ff43b98559b0930024b0b77726a12ef50d3734d9867f2b40c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-29499): should be final"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusApp.scala"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"79b66297a1c133103c523df987d915efcff57bbbe9fbb73ead9f09eb8308a86d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-29499): should be final"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusApp.scala"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6441dd854913f109766b689fedf56ca4efa99846a1ef2fe9f2822b8a1a23f7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-29499): should be final"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusApp.scala"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"35b60aa3426c5aabd78f43db3c5ac2e485142cf69f06e611675dfb57024f5a83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-7364): can be public once removal of SelectBusinessEventResult reaches all envs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/DAL.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de15689d07aae9128a8e9ef9d35e23df23ccdd043191eaed337a16542cb487a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-7364): can be public once removal of SelectBusinessEventResult reaches all envs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/DAL.scala"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"b150f5b8a45ea385b0a902cf7b21e2a275c8b6649a6c5d17ab6204435f0334d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46212): cleanup usages of it and remove it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/DAL.scala"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f4116614a66f520092091a2977944be9b4996e5e117fda955e71932c3ed311e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46212): cleanup usages of it and remove it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/DAL.scala"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"c127231ea7f5c8c6ea00ba5cd89931b351e9db7528b359cc78ea839980088a1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-21937): find the proper way to get classNameStore for AWS env"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dal/EntityResolverFactory.scala"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e5aa4c613012a0dc18c6aab8509bb2dc837b08a2ff9e730e31d59b48c267598"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17589): Change this when getEntityReference returns the correct type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dal/DalNoReadEmptyChecks.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fff78233731d09dc027269647db98cb3dd2ffa2622066ebf9ae690c66539141"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17589): Change this when getEntityReference returns the correct type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dal/DalNoReadEmptyChecks.scala"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dfad8bba9ed356566d056399d84acfe4d23456decb0590873464e6310ea045c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17589): Change this when getEntityReference returns the correct type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dal/DalNoReadEmptyChecks.scala"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"5845b84cca6405e2b011e9cb9e3e438f9ae3b31463ac5c273408d0ba82ecbab4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14123): at the moment we can only support default context. To"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/dal/versioning/worker/VersioningWorkerExecutionPool.scala"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"66cfe0c309d7d6c9c280877c54e5dec6c69a790173e940b0abc8aed8b9de2cd4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): we need find user modify @key vals during compile time! Now, the @key is rewritten by previous phase, so we can\u0027t find it here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/internal/CopyMethodMacros.scala"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"0170fa3a452b0606e29a2f69bcebb5596a5cec40d0abc69a413c16e17eeb7cbd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-75668): Add other events of interests here, if needed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/reactive/handlers/HandlerEvents.scala"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcf3df1b6bcbff7fb4cc5abfa8bec79835d7fd80d94ead074c8ee379070ee15f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-65703): Will remove the now unused parameter in a later PR."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/reactive/handlers/HandlerEvents.scala"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"c69b1b524124d2c5f5780ac891fa07acd51fff4cc43691887a1cca0c5fd24f25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17009): using Try here would cause several sync stacks, need to switch to"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"15f7dd3e26ea32d60355140ec4296e3b77fcc397bb8c930318347ca0d6e2dbbc"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack around for type parameter that historical API needed \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c7f8a008e398dfa4286ec326c94242646f34c8ccf563e273caa3c121c816e57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (https://issues.scala-lang.org/browse/SI-6255): pending typesafe fix recursive Manifest stack-overflow bug"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df543519f6e1646642bc84a2c8d9ddf1a73b3cef52d5d662e1c36c4e0508146"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12675): Currently, there\u0027re two exactly same copy for each of"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"06292fb369384830ffd04426b17ac3a882c994e3878add5f9772d379b1fad15c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18021): decommission of recoverWithManualRangeDiff, legacy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"c499fa05184e6494437bbdf0c725a8984b7fbb36a8478ae316934f1a7ed274bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-18021): decommission of recoverWithManualRangeDiff, legacy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b6d4115cef328922924c355c1ff9ce74de9b1721e407394c485b1d66879f7d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-12675): Currently, there are two identical copies"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"31c4d2d93e60f08e0c218b6405dff0af8c53500b6e4f806c2e5ef0bec84de6fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-17009): revisit this logic and performance"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/relational/reactive/RangeQuery.scala"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"54dcb1d1913d878578c70c4c93865e6c0318db9e25eb99509824e55ee8ef321b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-21803): enable breadcrumbs for the AWS environment as well"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/runtime/RuntimeComponents.scala"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ff9ba4717a5254ab78873864c1ab38f49e10332be8e3be54716479397cf30c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-36426): remove once all logback configs are updated to new package names"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/util/LoggingHelper.scala"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"b913b0d222279672a6ddd2ee8a6014b7744a57df23210d30793c0e1e936f5429"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-14927): Also include type comparison to make canonical decision for embeddable type"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/TypeInfoApiBase.scala"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b83691cd253dbae6cd73aed69fddf137183eb45d5f3a8bebf5701e124e64f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-13077): we should fix this not to rely on the synthetic flag"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/TypeInfoApiBase.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"789611b3104c7f8ba226baaeed333ca889510b1b0da38044b1ff7c03d5053239"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-19349): If you can figure out why, feel free to fix this code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/versioning/TypeInfoApiBase.scala"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea8f5da94d4476a6f8c746b399f9d8556547a608628da5fb24fc16148069e08"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-54356): add classloading time"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/UIBenchmarkReporting.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a768cb3bc824894b702e2e3a1af78f598f441237cfce38c7982e8234890c841"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30376): extend offline capabilities"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/TraceReloaded.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d57663165fb510ea7e9f222c9a0b51efd1edf03e4d2fdf5cd746380b287e6c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43990): Refactor to PNodeTask"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/DebuggerUI.scala"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"fae1c013cb722c6e2fecdf960b19bdce97571393d88dfd10ec6e3d1c5e3cfe83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-29498): fix stack overflow in Next Diff and reinstate the button"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/ValueInspector.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"52419aa24c61451981f70a50cc5766111b62c168c89b989bc9aa814885730061"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43368): come back to divider location"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLineView.scala"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"06cceab26887202eb0f17f74004a8953326c3747a003bd915c596ae89b31c1d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43368): Revisit this to check mode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLineView.scala"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"204f5f83ed8f8e40386e3a99600598e3ca3d2ab5d47193d2f8a5ed209811ab01"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-55942): revisit NodeStacks (delete Blocking Waits since it\u0027s in timeline?)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0ee8eba140f566a5735b0ff2276efdd71b05cb767b317a740c5eb7cf81e2c7a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-30376): load pntis into browser too and display that tab"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"2974e43316a4be8c8cd38614a46cac9b6a1416b2204a995ddf7d751152a6aa19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-65137): Initialize PgoModuleMap using pgo_modules.json in environment repo"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeProfiler.scala"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d6ec311db844c4541a27d1b19b24401d498eed7464c90a9b94d0743c31404eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43990): add offline mode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeMenu.scala"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"f644421aa08866bc42a69de90dd404534d2cbcf9e69f33cfd7e54c397bc5400e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43990): refactor to use PNodeTask, and disable menu item if not in live mode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeMenu.scala"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa2b7102b1ec21239d692aaba340310a69940df67e27b886e7b28dcf2c6ee52f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): make it a proper filtered aggregate view instead of using rowsC as the unfiltered rowset and rows as filtered"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/MemoryTable.scala"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"216b0329347044ff707031311a723c3f4a7a22b863c9c120a3c0cf8d0a439950"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): recalculate counts when building subrows in case not every instance of some cached node has this particular contributor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/MemoryTable.scala"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"28aa0ed27d22b35f9b7ab1bd5df8aadc97eb04f3bb6f86c0a9633e1e7c983df8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Too much repainting here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/HotspotsTable.scala"},"region":{"startLine":853}}}],"partialFingerprints":{"codehealthFindingId/v1":"db9bef02359f1f8b40d1f804c2bbaf72a97212502e04d467fba46fddf86ea714"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // [SEE_PARTIAL_TRACE] // TODO (OPTIMUS-43938): config file to control this"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/HotspotsTable.scala"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed5f6cc737d9980f85248743dcbbbae8e9a1f0652a789aeb72b4df344ecea4ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43995): add a callback to refresh caches tab whenever someone clears cache"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GraphDebuggerUI.scala"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa616e4b75c41bb730b5299287cb192eafd53f017b2e84679ba32a960cfcb099"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-55942): revisit NodeStacks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/BlockingNodesTable.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e552cc11ab7349e3618d49055e4108042ea9d2de7051c60265aecac9f9d845"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-26009): Rename this to \u0022equalInstant\u0022."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/package.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4b11d3f8493ab7be33adf6cb4b6e122dd6800c1f5ad791bc5b9e8fa5c895b09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-72490): rewrite TupleElement equals conditions in flattened BOOLAND conditions to better pushdown"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/PredicatePushdownOptimizer.scala"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e15dd5fe59e1c2b4cc7350ea516d0421ed376ea055eab14fd3b58500347492c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-26009): Update following code/comments accordingly."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql_dal/src/main/scala/optimus/platform/relational/dal/accelerated/DALBinder.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ffceb8e545c20265ac0e751779ae468e68470f4720d37737634a95cd6db0b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-48501) Remove and simplify calling code when dropping 2.12 support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/package.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a0608d55e6eda04d74c1154521acd3e541d5bd0f932e780bb2096f073520a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-48501) Remove and simplify calling code when dropping 2.12 support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/package.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"508261cf689e0ae019b0daa53e9288a2eca12f90d0b5ef6d15af8628e023f96b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-48501) Remove and simplify calling code when dropping 2.12 support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/package.scala"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"48aa3402b6418408d019dcf79ae31312a2df30366161d2c660921597d4844e40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-48501) Remove and simplify calling code when dropping 2.12 support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/package.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"27b26773c4828d5bcdf33c278417c197c1f867a36c97f80dc54e4aebc3192d54"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Stable, OptimusCollections, things that we patch a hashcode into etc"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/CanEqual.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba9072b297ad238b4b8b635c871417199621a06137f00cf572bc1cf99aba95a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-63036): finalizers are deprecated by Java 18 for removal in a future version."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/java/optimus/utils/SystemFinalization.java"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"a94d2247065b813a8b55b9d5a78cad959ff1264cf87b7025917f0d1b446e16fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-46358): maybe we should flush in the loop above every N packets/bytes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/java/org/apache/zookeeper/OptimusClientCnxnSocketNetty.java"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e89ef72775f3e56d98cffc6a436a31ad4a5c2aac38f916a5b4c96d5bccf843a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-33822): Delete all this when we know that \u003E ms precision in Instant will not"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/java/patch/MilliInstant.java"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff66609175b2ef3eed299555a932da4458f04bb84a0cfdaecf57b94afc02226a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-47224): This should really return Option[Long], but we need to ensure it doesn\u0027t break"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/logging/LoggingInfo.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef6c85aa3e12a3856b777dc6792788ffdddc74dcd8c31c35bd45c76a2287a627"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-51948): Consider making extracted info part of DTC key"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/logging/LoggingInfo.scala"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f62b1777031294dc729e155e270f34035b073ea953b7562997719fb7191e37"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO (OPTIMUS-48905): merge KerberosSupport with this implementation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/platform/utils/KerberosAuthentication.scala"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e4b5226c3fb348648958128f3c0c163dc7ee1f4b0642ca049df9165eeea3da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (https://issues.scala-lang.org/browse/SI-1980): Enable after laziness properly implemented for"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/utils/MiscUtils.scala"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7dd140f16120f7aedc6c46c413dc31ba9f125f57b65cdf6d88708aa78fbc4d6"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack against scala/bug#10418 (fixed in 2.13 only) \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/utils/CollectionUtils.scala"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"a07a0f3c5c86082a111979eb8736da4d9f8adb3a25568e5ad5e6456a4ae21ad6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-48501) Just use Option.zip once 2.12 support is not needed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/utils/CollectionUtils.scala"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee9f71c768bff092eeb776fd24d7246a556ea103743e52e3512b3d6c45efc5b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40255): remove this LegacyChainedIdSerializer once we have migrated to using new"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/LegacyChainedIdSerializer.java"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e9ede0c14eee5372adb4fe24150dc395637c2d4687838f693c5ac6956f4306f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO (OPTIMUS-0000): this is C\u002B\u002B only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/WaitOptions.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f11db39c4de887b6493695a15168ac2cc00cab0c1aa9e150f92cc57d20d1141"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO (OPTIMUS-0000): this is C\u002B\u002B only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/RetrievalOptions.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"201bcaeef5be9a55dddab2315207085e4c8624faf07469ce874240f5fe39514d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO (OPTIMUS-0000): this is C\u002B\u002B only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/GetOptions.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b2b7756bb4c16934c82c218bdab3bac7193d1dcabed0339953a828e381d66e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): oldest used internally, think about whether the support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/VersionConstraint.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"7502ea0f83ce55e9a7f19337e6a1a2ef79528bbed0da6eacec8059f192755c44"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): temp until legacy instances have current defs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/InvalidationOptions.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16522ebee35c606081d5769f77ec0a1510ae7018c4959eeab520725d33380dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): internal retries should be specified in ms"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/WaitForTimeoutController.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"b745bad26372d43bbe5c0e3b4d83c899825751171423338f14414c21b3e40710"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/MetaData.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab0603bdb7bb170f98081f1c8b0beae47ca84311a3f4c4ce7e661b87f1535df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/SimpleMetaData.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"13201c64ba6d6b24fd53f9d46cf69be3d1d959bc41878277084ed9fe14ca1c70"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/RetrievalResultBase.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a08224281d56ffdcbaf5f3b23ad4b0b33ecd9434f2a7f0aa09933127851cbb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RawRetrievalResult.java"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b683957d18bc0599c22ea4c94fa66ef4e26386806ba46be0099c6c9b3526fdd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"02ab0968c8cce6a3e56482687ca210c28e4121d8c2ff0e1841a58697c1e4b7a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"9593a1e1ffec9e72bcc7794e359f45d866bd6bffa4eec00259a412f6464ef658"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fbcfb85c3834c1c6d7a2cf7e40ce0b40c9eb73dc289796c945bc81b110ca93a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0d6a57afbc7aa083eaa5df00c1c615f555d017bf6ee1263bff9298ed9e9238e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata. It should be part of value rather than metadata"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41f4118a6238ff579203f4f4351fd811b125aaa8efa348880e9bfe38f7ea32f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): checksum the index data"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/SegmentationUtil.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f7cab856ff59e765e86cebb272d822e63b5a38d74282c09f6e948ee404859c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO (OPTIMUS-0000): complete user data"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/MetaDataTextUtil.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"8624151af76d433e9ce6933e1352c91a40815265c2d34c982c0b2d83ec12bb0c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO (OPTIMUS-0000): complete user data"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/MetaDataTextUtil.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccd41421c57528f7401af35330ad1ad9ab0f2fb576329248843c5807799657c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): to be completed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/FragmentedValue.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c4024a23c0f7047456df6b0ec304072631627263ee20ddf30469f2a9fde0cef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): to be completed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RetrievalGroup.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b206bf9ac02ab92d164d802fa5f85a3a9271b52b2c5b728aaa54c67b126c11"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): to be completed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/fsm/KeyToIntegerMapElement.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"40ea18d71b69a73affce072eca9d2ce48199334a73623bce5d9d426129392080"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): for now treat sequential as nanos"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ClientNamespace.java"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"331853073b8600d496e76b468bdc8ae04c8e7b70c67bf28d5e8f3fc7545850ae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): don\u0027t group"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ClientNamespace.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"336b42a8eabb762baf5ede7d5ea467fe791ceb075dfbf418eaa006495179197c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): for now we just disallow the modification from cloned namespace"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ClientNamespace.java"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"a07f9304f56274f1847e60cedb97e73dff605ba6378993998ba6ef0ac485abab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Snapshot is not supported in a server who enables traceID feature"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/BaseNamespacePerspectiveImpl.java"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ba865c65a8f9387dcbe02392db0f1ce3d952a54efa809cdd52ffb06eb08fab"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): SyncRequest is not supported in a server who enables traceID feature"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/BaseNamespacePerspectiveImpl.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b6a5988b03c51bfa4aba81076636855797ed1b2159aac9640779473a8a3c634"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): call continue? how to handle the opUUIDs.add() below?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncPutOperationImpl.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b70f1b3f5ff76dda14f1f43fa26eecfe929df0344dc75b53df059fe5f90918"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): rather than retrying on any exclusion, we ought to retry only if the"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/ActiveClientOperationTable.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"39d6dc6d8de2127f744dedca6128450195e1022180db2ae402f8837ddc2871e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): optimize this with running position"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/serialization/internal/SerializedKeyValueBuffers.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47ea8197b5b838e70e6f0361657476951327d9b281c279b9ed7400b5522923b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): THINK ABOUT CONCURRENCY IN THIS CLASS"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RetrievalGroup.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"367d9067e3557ff008d4cbc141e2c90509b2d143d7b8a4d7e83d219a5dc4f2d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): PROBABLY ONLY LOOK TO COMBINE OPERATIONS IF THE VERSION MATCH IS"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RetrievalGroup.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c77ffa7ed974244ae47623697e50ae3b23426988fbb505755fd6084d535f4b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): this is a placeholder implementation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RetrievalGroup.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"591f235b6c328d5db16afce0430e08893b4b22df989cdebf6741cae8adbf6a08"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): need to look at metadata to see if this matches"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RetrievalGroup.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a74464db6ef6e552727cac126c7d2ad4512caeee8c87e657c6c135ee0bc5cd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO (OPTIMUS-43326): Remove userdata. we don\u0027t want to store userdata on disk, because if"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"839bfb41a89c9a129b0a6937bdec632e4ddb70e8a6d430b98f175a50362bbe77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): this is ignoring user data"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MetaDataUtil.java"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ba8b6e56a1a172c9a8d47a61b95b33b2a077eca78a316b381264deb3c870262"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy put and put_trace"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MessageType.java"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cc523c402b4a00b6fb5b6bfe9dc3ab7abeb4ea116ac39520241f6568ba199f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy put and put_trace"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MessageType.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6ebfc42c1e0b4d5733730ca57441681ef4c5c1f306477f89ecac8de0302e6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy put and put_trace"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroup.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b698f3d3a091d13bff6ca5fc6f09f42b5e97b3c7944a6fdb13bfe4a347fbbdf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40641): remove the deprecated REAP MessageType and adjust deserialization logic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/MessageType.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"178d85ebbdd656eac946105f44f3ced66d71ca9c7bb6c704c526a0817b3a8171"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/StorageFormat.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18db21bb43aacce814789d10ec0013f3521a0c03406fba03b4c2ef153752041"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/StorageFormat.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"45897de82970d5cc8fcfeea97a3f25d5888d02df1caa89d653769722b2753bdc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43326): Remove userdata."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/StorageFormat.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d202459c34df311df640d36e57733df4f03a7f571bb75f4bfa7a3f88a392477"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): TEMP DEBUG"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/AbstractSegment.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"af8886f794c89d3675eedf70cc2cb1c010bffdea77cb21958444e8e34663dd9a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6abff887e48f89bbbe40f09509e77af18f6f8f48ade89e90dca9fac9a2843e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8bba28713d0af6732fbb2556b69d78226b897f1b8e9a9d5eb6beb8e0ac4b0a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"56da00f24974303a2a75220a9175bf0abd306a0ab1a6b16567b7c58a4eadd012"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61e255e8eb375cc7abceac728a3094e0027603ad1b1d39f6fc82b152d1d7703"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f0bf2f9dac8e423f1a1652e23d517b0ce53e43423b9461620ceb958cc4c2706"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"904cca524d53f5c9027aef56535bcc206b1043d1ccfe207de81377931b011fcf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"4afb31a57a9fd4c0ab4ac83724796a867dc918001e21bb86c2595d53256bbf9d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"56425e9241fec606b7fc3d38416d3759cc4cd2fd77b27b6eb9fa97e8619f44f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"64516343cd84ecc8f78c4fae21e81cc6c741bd91b96a998adc41beaba2d4fb8f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"a578469844e4539925824c6a017177c846782701050b42585783be5e0b91d204"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/SimpleHashMap.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cef23111a83cd08760bfa7ad6cd00d2a9edac1674a72e286cb80f21a98ae78d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fa0ee65e0d0ad716958cdbaafc94ebcad7385323c09e31d9a5c9f1cf481aa1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"073994f86aa29788cf3c2d2eb689d9f73b2c4d655f8942a184565203053bcb42"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"33c47f2fa1734c16e15061dd025d90c8e4684b838f3c4ef60cf0e5cc00846196"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c743e53f4a05e43014b57febddc29b8d0630fa8528f51e45639bde97c590515b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c53b174aaa8cdeb1d09a2c3a29299815eb195e5aaf72ed43eeeb0c01bf2ef66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93ecfb1eba0549cf31053f900bcd1f81e11cdc1d570501c2f4057f455b714c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed684df1f826e31e7bdf1011053936cd4e1ec88266402769d3be8722ccc695a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"5550aa583adcde61ec9fb0ff6d29b44ab508060e29cd3e655457255af6059b0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"455e7125fdc0ea2a0139b4169068cb326a59a85a09bd718f4b331a3899411073"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): Auto-generated method stub"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/test/IntHashMap.java"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"be811f82fc67863d5e2e28bb4f454d3e905c557ee15f6d8fe77a295131bab227"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): verify -1"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/fsm/KeyToIntegerMapElement.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"099b8e875760b846f51b4a4582df70ed09a9638c042b9aff10637af05487ebe4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): make configurable"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/StorageEntryState.java"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"036db2a12914b765c01079cb3f158dd1b1c4aeba3a7d5b8e4491654a05546eef"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): reduce or eliminate locking here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/protocol/LooseConsistencyWrite.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a03492ab64d919659789089e475aedf7b1e83701196c2aee2e7c858a4e9ff1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): however versioning in readRing needs to be considered"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaWatcher.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"6836e46b9d2bff8d26dbe6f7c396ec099cb93ad63800bd5c5b50e8b03f4deb69"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): think about zkidLimit"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTMetaWatcher.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"babc6fbdc0ab302a3b7af56089b11aa3c85ae36cf24d6ff61c78a71ef17d31fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): below is temporary to allow interaction with old instances"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DHTConfiguration.java"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c9b54ccd0dc2f8e9fd4db7d51a2104510e7e4cac4a366723783bf5e3b268711"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): valueBufferSize should be computed based on some external information"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoValueMessageGroupBase.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"a12c761432a9f5950284541eb2509dc76e961022640efd2b3e12db1a8a0a870b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): the orginal is unused since it\u0027s the same and stored as"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutUpdateMessageGroup.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"4415b8b56cde7b1731dc7a5732914bd5cc5f246b0e081de70c5d1dd7ccf1e47d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): NEED TO MAKE CONSISTENT WHETHER WE USE THE PROTO CLASSES OR THE FORMAT"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutUpdateMessageGroup.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6dab2c18420fdf05bc8fb7a6578cca59d53ad3cd50658918cbfdf946e0716e0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): This is a temp workaround to preserve parent\u0027s base offset put in"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutResponseMessageGroup.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8bb036e96f69cd1efafe757a973033d591ec8fc54b20cb45ae1566ef4a83719"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove comment once legacy put and put_trace is removed Handling"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"87a7ee6a495dce1a09f546f9824c7f847f0747483037eb673704a35e828e4bc4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-42516): Replace with code below"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"08fc98a0a20d881679eef0eccb70f1f62acf301d3d8db17740b33f275156dabd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-42516): Enable when servers have been updated to parse new and legacy code"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"89ecb37a24be06977b91161a76d417a91f4498ff2a9dd9c5d39becf14da1af2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-42516): Enable when adding authUser"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"f668d72e5b5141baa80dc576fa6f3ebc8d1d37a4ac791c5deb6c1321afa11bf0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43325)- a zoneId field needs to be added to puts."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"a72d099f61463a6d4f42b9c69a5218f2a772fc899795883b63d2324d1f0c77ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy check once client side is using new puts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"07bf4e3d5a0fe1e2210ae6af6e74cd860a274e2e9dcfb09d1c1b957ea2f48123"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy check once client side is using new puts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c62681437c0b963ff6598a6f4b4390580dbd91f8ee453b1ea65869ee39c756"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy check once client is using new puts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cae36a167e8823735ace1d1404bae65310643d0edae5646c2084aae76ed5037"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): think about removing the need for size since strictly speaking it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutForwardMessageGroup.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ad5caf94f4d9203ff7bc587a8a4ac79532e1676e08a7db43bd57cfbb6bd84e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40255): switch to new serialization logic once all servers support new format"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoKeyedMessageGroup.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"a650c9de4eee9c2ad98d89c19c52129bd10ecea23aa5d928dc9cd7cb0bc41e81"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): delete"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroupPutEntry.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c34e3549c5c53b953b8537abdcc5269e85562a832107e68885aac49625ceea1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): CHECK ABOVE LINE"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroupPutEntry.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ea1e81a59c15072537c98bdcea5183c8d605b464c1840fb4c3b2b5f8bb2816d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): probably eliminate the locally stored key since MessageGroupKeyEntry"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroupKeyOrdinalEntry.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4482aea27b8abf665678fd64e2f6b35775bdc3fe6ae191b60e7adcec93fd20bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): NEED TO LOOK INTO USAGE OF NATIVE BUFFERS"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroupKVEntry.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"28ff7cf7de7f9ca3d889982133bac3965d17e3f84ca37a1a4f4241cf6291878d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40461): Consider adding a safe msgType deserialization, and server"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6ed0d4768152348ec2d1e164132388ed5c983b03b9884bfe79d809f53e4acfb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): ADD FALLTHROUGH FOR THIS CASE"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"e44cbdbaba88b91b40c17ca890c5c21dae5e4661b470f8fa91e800d838cc82ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): ADD FALLTHROUGH FOR THIS CASE"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"92a5602cf4849dfba0f3efeb5c61e6f4619d6e12824740384d4085b7cc8440f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): MERGE THESE READS EVENTUALLY"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/IncomingMessageGroup.java"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55b5ac7227ff9f8fa56f4b83b81399c9f56c7db76bcaf24a8347568c7685287"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): MERGE THESE READS EVENTUALLY"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/NewIncomingBufferedData.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a8aab8f0cae5986cb74856dc1c33f6eb9e73f61ca7926909d3153263cff13da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove this legacy comment once client side is using new puts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/protocol/PutMessageFormat.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"63145c7e3f310c38d60ac2b48255def6cd9e5debb4ca2f973e9f8ebfbfcb31d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Add authorizationUser into calculations"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/protocol/PutMessageFormat.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"261d8132c37233ab91e47ac55e0929e477b19ac15d72832d2988a92ca15c70af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Add 1 when we change the format and add authorizationUser into"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/protocol/PutMessageFormat.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"648e3f2424230673f29a1812adee617e0e2ff1fefdb6ac4824b7a7488af7316f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): consider distinguish if result is sent from proxy or final replica"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/trace/Tracer.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"59bec03bce5891a1e43dbf4261a1270d380a2349aab3185463ee4259db53094a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-43373): Remove legacy put_trace"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/trace/TraceIDProvider.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"264ee59c78c20cd525b3a8ac2bfdd1f4bbcce8c27dd4b1574f7d7bf91050d41e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // zk.close(); // TODO (OPTIMUS-0000): to be completed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/meta/MetaClientCore.java"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec7ccad95d963d0fcfe6d66dc8536dc6a785e9db0ebf73281b9b5b975f3b4900"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): use of getLatestVersion (not getVersionPriorTo_floored) as it is"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/management/MetaUtil.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"509b83c9c06f64d7fb8b37efc8365f31deb314f9bc96e8fffaba5c78b22de8b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): do I need below to handle dhtVersionUnspecified or is it automatic?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/skfs/management/MetaUtil.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2717371572654ce92441149fd89dde22568c694501a6d2f8c28eb233147203f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): deprecate the rootClassAndName"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/storagepolicy/StoragePolicyGroup.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"f36417318961ffc74be8973f0f4c6ea9b525923979118c336e9da209938597c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): think about whether re-allocator will use this code"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/SingleRingZK.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2fabf4cadb17320fb3dbacf86b07d6c16bdeeee276056b126bb8c5ba8576b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): version in single ring is unused"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/SingleRingZK.java"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"15da9bad5094cb260360fc130b68c41620daeeeab3ee0ed9c0c2dc70653e6b75"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): temporarily hardcoded until minPrimaryUnderFailure"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab6189bff51a86a73694bcd1e3ed11d0db791be486f88affcc2ad4c8e74ff85"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): version of zero here"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/ProtoRegionList.java"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"658c301e1dccdd711f8c1ef6f3b7078be3b8c45e457d09dea52bb764f3869c88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): we need to be able to specify weights by groups of some sort"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightSpecifications.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"97d2cb17b23cbbc8bf5803d96d6a2050fb9bde85b2c481bd8d5b4c3497c4579e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): version never changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/NamedRingConfigurationUtil.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"3170a258a22f84e2acb05569220944159e230e9adcbfdaa0c194425c5c3df598"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): various other classes consume this at present in order to share ZK"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/zookeeper/SilverKingZooKeeperClient.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6f7950da011637eff3c187f3411dc5fdd77475fb510a73e99c83ae6717b578d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): ultimately this shouldn\u0027t hard-code the 1st attempt as"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fd76d0fb34e3d2d4a68bf4fd6841404e2a89c2d5e002727ac06d3c77887e872"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): ultimately this shouldn\u0027t hard-code the 1st attempt as the"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"787ef05183301dbc6312d4076ede25e1cebb6d06b40bc082624c7b0bd6a68080"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): ultimately this shouldn\u0027t hard-code the 1st attempt as the"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/PersistentAsyncServer.java"},"region":{"startLine":671}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb9eeff1581dd323316ebe93bb4472ac127b7d9e34f644f7ff154686c68c419"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // if (true || locked) {  // TODO (OPTIMUS-0000): determine why we must always enable"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/Connection.java"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"abf1e6ea26f8414474ff09829d63b86cfecdb8f54ca370f61db0f546d47af12a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-0000): we may need to remove this hardcode \u0022/tmp/silverking/\u0022"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncBase.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f8ec2ad843706b81c70b95d27d1159e34e91a702771eb37a220287b30940e32"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // removeThread(activeThreads.size() - 1); // TODO (OPTIMUS-0000): to be completed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/LWTPoolImpl.java"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f876f5414f66f2248467a5b4248a75a4675bbbe2e36a4daf7b5ba5a8597dc5b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(OPTIMUS-46970): Avoid hopping a thread boundary here if possible when handling local"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/BaseWorker.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb1e5603ad899266ed3802f71a12e00a5a88978ce3b16559bbe0d4f12a2422b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40255): remove this object once changes from using byte[Array] to SkTraceId has been initiated"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/scala/optimus/legacy/DoNotUseLegacySerializer.scala"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"994d1d8a49a691f738864e00c129b2fa866c8c36d733f47922b96a6da9d1c043"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-40540): revisit System.exit as this isn\u0027t the correct thing to do either on"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/process/SafeThread.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd829fccde2b70278c6553d1648e0e7a26c193276200cbf985d70610b853c2ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-75599): fix this"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/common/CommonDirectoryStructure.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf819bf77fd7bb0ca8598ad6cb43a9a339fdae67620b2a67b0607f0742a6b4ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-79430): Remove line below when hocon plugin updated"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/config/TypeSafeOptions.scala"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db14bc2f94874d21478283a31688c548892bbd0c8e39b408d3fbf083c504a20"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (OPTIMUS-76817): Remove feature flag when implementation is end-user ready"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/config/TypeSafeOptions.scala"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ece34db7be60d54d8d183c33515fe8e43013e98de55b97fedf75ad4a3f864a"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no project overview: The root README begins with a welcome banner and links to contributing guidelines but does not state what Optimus Cirrus is or what it does (e.g. whether it is the OBT tool, an infrastructure set, or something else). State the project\u0027s purpose in one sentence above the welcome banner so readers can find it without scanning."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a9d216b750a64033eec23b43e4ae3f6218f655fc8291ccd2f6c5eac103c488cc"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no installation or build instructions: The root README links to CONTRIBUTING.md but provides no installation/build/dependency instructions for the repository. Add a short install section (e.g. \u0027Clone, add the OBT dependency, and run\u0027) under the welcome banner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"aed36f6f26e4835ecbbe30a13a5c068df9f4e071e11fa3cf82da5d5760cb3828"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no usage examples: The root README describes what the project does but contains no shell or command-line example showing how to run it. Add a one-command usage block (e.g. \u0027cargo build \u0026\u0026 cargo run\u0027) under the welcome banner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6fa82b86a4135cbeb7659830c85ef83a9b697ba534565ba2dfb3cb5bf9c67074"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no contributor guidance: The README links to CONTRIBUTING.md but does not state what the repository expects of contributors or how to get started. Add a short contributing section (e.g. \u0027How to run tests, add a new module, and submit a PR\u0027) under the welcome banner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"de79da8901451d38dca0bef8c036e9d71897098dc8f0f8543f3747bb015b4aa9"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 1 of 1 project(s) overshoot their size bounds, lowering Project Cohesion to 0.0/10. The most over is \u0060(repository root)\u0060 (529281 LoC, 11599 module-visible types across 705 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"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":"4a9ca8decba6bb0c3635e6883874e484e42622db057ea593549ad0f37c3fdf4c"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"4c330e697d54f4b85a38bb46845efc046eada31256bf1d8ea912a35366e6a283"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"9bf53fca88a00dd40d51a314440d718edb2680d280b3c6d8267189ac3d165fb6"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"53f4fe7f430b832d69394ae7314dcf47b0007bb1ff86160f54d3bd1d8273a14f"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"782a3e1a59a9ef56c165d746417b7de861cbd99f0b77cebdca5eb7b5e70b9a34"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"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":"a4729722178addb6175162f43bba79ccb9d314bd7a0ad7a0467346c2cc877acb"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A08:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"6c61b4f6ea60fb301e5770f615967c827a2898d17ce4f9d9a5fa06e70e859121"},"taxa":[{"id":"CWE-611","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A02:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"7abe78e4495b77a6018b0af1f09270b5f156c9ffccc34009a3f18094d4370169"},"taxa":[{"id":"CWE-330","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"d360d02dfce912d7e4fffd5c98dacfb86768461fa081a39ec526700964f8b594"},"taxa":[{"id":"CWE-330","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"354e4fcdcfad95e028ff411939d1bc8667945fb78af6fb828bb599a8a3283857"},"taxa":[{"id":"CWE-330","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"2145cb414497f61aec3062bb8111907846edb0e5e4b401a4e4b86b1e89e7f532"},"taxa":[{"id":"CWE-611","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A02:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"943c703c956f11f074bc1144f28e5ce4dd01cfacea3f48cb577177e6917d2333"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"8aa11e13f4bf5341478a7c71e0823de174270c0e8e36119d13aace6e28e8343b"},"taxa":[{"id":"CWE-328","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"eaa48dbfd5488300f95e439694c82e838de482460dcbe0763fd715f7bec4e99c"},"taxa":[{"id":"CWE-328","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"6e052139fc4db0a0bab2df02f1034ef25b71c16da46ad6fa3e8f2aeb72784a13"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"c2515be81f8c4e1268c3caa58b9a5f188e79f3a2ae9d6ee38bac1890f3cd6eb8"},"taxa":[{"id":"CWE-319","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"D29","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":"695d2ee3c34b61f8380d5320f214850445073fcd5930fdef03ba3632ccfd0b89"},"taxa":[{"id":"CWE-328","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"A04:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}}]},{"ruleId":"AC3","level":"error","message":{"text":"\u003Chtml\u003E without a lang: The page declares no language, so assistive tech can\u0027t pick the right pronunciation. Add lang (e.g. lang=\u0022en\u0022)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/html/gridprofiler.html"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b457687fec2f3903ccb084b311682f71a850b427e869b9fef344a076b6eb77b"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/html/gridprofiler.html"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d509776d260be98fca66176c79a74fef811511b17da6746e3ce62bce16462a5"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060.toggleBtn\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/css/gridprofiler.css"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"f94f7c3b86de613b627d557ddea64baf69347466f16078fb26e6dacf97e0c9e3"}},{"ruleId":"AC6","level":"warning","message":{"text":"Focus outline removed in CSS without a :focus replacement: \u0060ul.tabLinks a\u0060 sets the outline to none/0 and no visible :focus / :focus-visible style for that element replaces it in this stylesheet, so a keyboard user cannot see where focus is. Draw a focus ring (outline, box-shadow or border) under :focus-visible."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/htmlreport/src/main/resources/org/gradle/reporting/base-style.css"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4ef786f5953f28229999e9494f272609ea7bd9edf2440de4256b6263a2b3f9b"}},{"ruleId":"AC7","level":"warning","message":{"text":"Accessibility enforcement below the top rung: No accessibility enforcement found \u2014 no accessibility linting at author time and no automated accessibility check in tests or CI. Add your UI toolkit\u0027s own accessibility assertion to the test suite (Flutter \u0060meetsGuideline\u0060, Espresso \u0060AccessibilityChecks\u0060, XCTest \u0060performAccessibilityAudit\u0060), then gate that test in the pipeline. What was searched, so you can tell an absence from a miss: the 4 markup file(s) this pass actually assessed, the linter configuration checked in beside them, and this repository\u0027s test and CI files \u2014 matched by name against the accessibility checkers this dimension carries. An audit run outside the repository, a hosted scanner, or a check whose name is not one of those, is not seen here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d46019b86eff5ddad9db289e6802ac158899e980df54c34f67722442787ead62"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: KVClient\u003CK\u003E (16 abstract methods): \u0060KVClient\u003CK\u003E\u0060 declares 16 abstract methods under just 12 distinct name(s): \u0060batchContains\u0060, \u0060batchGet\u0060, \u0060batchPut\u0060, \u0060batchRemove\u0060, \u0060contains\u0060, \u0060contains\u0060, \u0060get\u0060, \u0060get\u0060, \u0060getLargeValue\u0060, \u0060put\u0060, \u0060put\u0060, \u0060putLargeValue\u0060, \u0060remove\u0060, \u0060remove\u0060, \u0060removeTransientKeyspace\u0060, \u0060streamingGet\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. That is an OVERLOAD SET, not 16 separate responsibilities: a caller binds to 12 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 16 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/api/kv/KVClient.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f4d59632fc4de48b288554d3987e784796750c6f9aac1e63d446909e98015d0"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MSNetAdminManagerImpl (24 abstract methods): \u0060MSNetAdminManagerImpl\u0060 declares 24 abstract methods: \u0060addAdminCommand\u0060, \u0060addAdminCommand\u0060, \u0060addAlias\u0060, \u0060addListener\u0060, \u0060getAddressInfo\u0060, \u0060getAdminCommand\u0060, \u0060getAdminCommandStore\u0060, \u0060getConnectionCount\u0060, \u0060getEntity\u0060, \u0060getInterceptListener\u0060, \u0060handleSubscribeRequest\u0060, \u0060handleTapRequest\u0060, \u0060handleUnsubscribeRequest\u0060, \u0060isEntityRegistered\u0060, \u0060isServerListening\u0060, \u0060listEntities\u0060, \u0060registerEntity\u0060, \u0060removeAdminCommand\u0060, \u0060removeAdminCommands\u0060, \u0060removeListener\u0060, \u0060serverShutdown\u0060, \u0060setAccessDecisionManager\u0060, \u0060setInterceptListener\u0060, \u0060unregisterEntity\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. Those 24 declarations carry 23 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 23 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/admin/MSNetAdminManagerImpl.java"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4529ba3afac00e4e1d77857454f617e45ae3c92c48e967360917385062f5883"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MSNetProtocolConnectionConfiguration (62 abstract methods): \u0060MSNetProtocolConnectionConfiguration\u0060 declares 62 abstract methods: \u0060afterPropertiesSet\u0060, \u0060getAnonymousAuthentication\u0060, \u0060getAsyncReading\u0060, \u0060getBackupAddresses\u0060, \u0060getBindAddress\u0060, \u0060getCallbackExecutor\u0060, \u0060getConnectionId\u0060, \u0060getConnectionName\u0060, \u0060getEstablishers\u0060, \u0060getHostPort\u0060, \u0060getKeepAlive\u0060, \u0060getKerberos\u0060, \u0060getKerberosEncryption\u0060, \u0060getLoop\u0060, \u0060getMaxDisconnects\u0060, \u0060getMaxRetries\u0060, \u0060getMaxRetryTime\u0060, \u0060getPlainConnectionConfiguration\u0060, \u0060getProtocol\u0060, \u0060getReceiveBufferSize\u0060, \u0060getRetryFlag\u0060, \u0060getRetryTime\u0060, \u0060getSendBufferSize\u0060, \u0060getSocketFactory\u0060, \u0060getStreamBufferSizeLimit\u0060, \u0060getStreamCallbackExecutor\u0060, \u0060getStreamListenerQueuesize\u0060, \u0060getTapping\u0060, \u0060getTcpNoDelay\u0060, \u0060getWriteListThreshold\u0060, \u0060init\u0060, \u0060isInitialized\u0060, \u0060isSkipHostPortValidation\u0060, \u0060setAnonymousAuthentication\u0060, \u0060setAsyncReading\u0060, \u0060setBackupAddresses\u0060, \u0060setBindAddress\u0060, \u0060setCallbackExecutor\u0060, \u0060setConnectionName\u0060, \u0060setEstablishers\u0060, and 22 more. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/internal/MSNetProtocolConnectionConfiguration.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e41a9b07e429b6246b04d54e394f5b59e50f7b34ffe8fc14dcbbaf3409340a"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MSNetConnection (46 abstract methods): \u0060MSNetConnection\u0060 declares 46 abstract methods: \u0060addListener\u0060, \u0060asyncSend\u0060, \u0060asyncSend\u0060, \u0060close\u0060, \u0060connect\u0060, \u0060connect\u0060, \u0060connectTime\u0060, \u0060disableReading\u0060, \u0060enableReading\u0060, \u0060getAddress\u0060, \u0060getAuthContext\u0060, \u0060getBackupAddress\u0060, \u0060getInfoMessage\u0060, \u0060getLocalAddress\u0060, \u0060getMaxDisconnects\u0060, \u0060getMaxRetries\u0060, \u0060getMaxRetryTime\u0060, \u0060getName\u0060, \u0060getNetLoop\u0060, \u0060getPrimaryAddress\u0060, \u0060getRetryFlag\u0060, \u0060getRetryTime\u0060, \u0060getState\u0060, \u0060getTapping\u0060, \u0060isConnected\u0060, \u0060isEstablished\u0060, \u0060isReadingEnabled\u0060, \u0060removeListener\u0060, \u0060reparent\u0060, \u0060send\u0060, \u0060send\u0060, \u0060setAddress\u0060, \u0060setBackupAddress\u0060, \u0060setMaxDisconnects\u0060, \u0060setMaxRetries\u0060, \u0060setMaxRetryTime\u0060, \u0060setName\u0060, \u0060setPrimaryAddress\u0060, \u0060setRetryFlag\u0060, \u0060setRetryTime\u0060, and 6 more. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. Those 46 declarations carry 41 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 41 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetConnection.java"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9551d49d1b9bbffc77182e75ac54b4e869204e7892fcfe41c1f9dd54b9fe745"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MSNetLoopImpl (20 abstract methods): \u0060MSNetLoopImpl\u0060 declares 20 abstract methods: \u0060addLoopListener\u0060, \u0060callbackAfterDelay\u0060, \u0060callbackAfterDelay\u0060, \u0060callbackAt\u0060, \u0060callbackAt\u0060, \u0060callbackPeriodically\u0060, \u0060callbackPeriodically\u0060, \u0060cancelCallback\u0060, \u0060getContinueLoop\u0060, \u0060getLoopErrorHandler\u0060, \u0060isLooping\u0060, \u0060loop\u0060, \u0060quit\u0060, \u0060registerChannel\u0060, \u0060removeLoopListener\u0060, \u0060setCallbackTag\u0060, \u0060setContinueLoop\u0060, \u0060setLoopErrorHandler\u0060, \u0060unregisterChannel\u0060, \u0060wakeup\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. Those 20 declarations carry 17 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 17 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetLoopImpl.java"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5c0870df3eb7b0b57de326baf5835dcbc18ce03024e729f14c3855da05c856"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MSNetTCPServer (26 abstract methods): \u0060MSNetTCPServer\u0060 declares 26 abstract methods: \u0060addEstablisherFactory\u0060, \u0060addListener\u0060, \u0060establisherFactoryIterator\u0060, \u0060getAddress\u0060, \u0060getConnection\u0060, \u0060getName\u0060, \u0060getStateListeners\u0060, \u0060getUserContext\u0060, \u0060getUserContexts\u0060, \u0060hasConnection\u0060, \u0060isListening\u0060, \u0060manageConnection\u0060, \u0060openConnection\u0060, \u0060removeConnection\u0060, \u0060removeEstablisherFactory\u0060, \u0060removeStateListener\u0060, \u0060reparentConnection\u0060, \u0060setAddress\u0060, \u0060setAdminManager\u0060, \u0060setMessageHandler\u0060, \u0060setName\u0060, \u0060setStartupFailurePolicy\u0060, \u0060setStreamHandler\u0060, \u0060start\u0060, \u0060start\u0060, \u0060stop\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. Those 26 declarations carry 25 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 25 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPServer.java"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"01982f2d7e234f4672eb2416decf2682f53b95cd9d7d4000056379131ec9437f"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: LeaderElector (18 abstract methods): \u0060LeaderElector\u0060 declares 18 abstract methods under just 15 distinct name(s): \u0060abdicate\u0060, \u0060close\u0060, \u0060getCandidates\u0060, \u0060getData\u0060, \u0060getLeaderId\u0060, \u0060getLeaders\u0060, \u0060getListener\u0060, \u0060getMaxLeaders\u0060, \u0060isLeader\u0060, \u0060setData\u0060, \u0060setListener\u0060, \u0060start\u0060, \u0060waitForInitialization\u0060, \u0060waitForInitialization\u0060, \u0060waitForLeaderLoss\u0060, \u0060waitForLeaderLoss\u0060, \u0060waitForLeadership\u0060, \u0060waitForLeadership\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. That is an OVERLOAD SET, not 18 separate responsibilities: a caller binds to 15 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 18 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/leader/LeaderElector.java"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"8681bd56dc4b74e7ddc88491c7860263e63a87480b90110cae568b532b8f55c9"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: DHTSession (19 abstract methods): \u0060DHTSession\u0060 declares 19 abstract methods under just 14 distinct name(s): \u0060close\u0060, \u0060createNamespace\u0060, \u0060createNamespace\u0060, \u0060deleteNamespace\u0060, \u0060getDefaultGetOptions\u0060, \u0060getDefaultNamespaceOptions\u0060, \u0060getDefaultPutOptions\u0060, \u0060getDefaultWaitOptions\u0060, \u0060getNamespace\u0060, \u0060getNamespaceCreationOptions\u0060, \u0060getServer\u0060, \u0060isServerTraceEnabled\u0060, \u0060openAsyncNamespacePerspective\u0060, \u0060openAsyncNamespacePerspective\u0060, \u0060openAsyncNamespacePerspective\u0060, \u0060openSyncNamespacePerspective\u0060, \u0060openSyncNamespacePerspective\u0060, \u0060openSyncNamespacePerspective\u0060, \u0060recoverNamespace\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. That is an OVERLOAD SET, not 19 separate responsibilities: a caller binds to 14 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 19 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/DHTSession.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"68dfe0daa14e744587eb2545d2993cc9ce77e992bd7e1b1a4a5d75fb1be2458b"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Tracer (21 abstract methods): \u0060Tracer\u0060 declares 21 abstract methods: \u0060getStringTraceId\u0060, \u0060issueForwardTraceID\u0060, \u0060onAuthorizationFailure\u0060, \u0060onBothDequeueAndAsyncSendRetrievalResult\u0060, \u0060onBothHandleRetrievalRequest\u0060, \u0060onBothReceiveRequest\u0060, \u0060onForceReap\u0060, \u0060onInternalRetry\u0060, \u0060onKeysReap\u0060, \u0060onLocalEnqueueRetrievalResult\u0060, \u0060onLocalHandleRetrievalRequest\u0060, \u0060onLocalReap\u0060, \u0060onPreambleMismatch\u0060, \u0060onProxyHandleRetrievalResponse\u0060, \u0060onProxyHandleRetrievalResultComplete\u0060, \u0060onProxyHandleRetrievalResultFailed\u0060, \u0060onProxyHandleRetrievalResultIncomplete\u0060, \u0060onQueueLengthInterval\u0060, \u0060onSegmentReap\u0060, \u0060onSegmentRollover\u0060, \u0060setAliasMap\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/trace/Tracer.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"d731d50615eb9fd875d4d2f89fe5e1bc73633c165551e804c7ed601c8353ad63"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: TopologyRing (20 abstract methods): \u0060TopologyRing\u0060 declares 20 abstract methods: \u0060clone\u0060, \u0060cloneEmpty\u0060, \u0060containsNode\u0060, \u0060freeze\u0060, \u0060getMemberNodes\u0060, \u0060getNodeByID\u0060, \u0060getNodeClass\u0060, \u0060getNodeRegions\u0060, \u0060getNodeRegionsFiltered\u0060, \u0060getNodeRegionsSorted\u0060, \u0060getOwnedFraction\u0060, \u0060getOwnedRingspace\u0060, \u0060getStoragePolicyName\u0060, \u0060getTotalWeight\u0060, \u0060getWeight\u0060, \u0060numMemberNodes\u0060, \u0060pointOwnedByNode\u0060, \u0060releaseToNode\u0060, \u0060removeEntry\u0060, \u0060simplify\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRing.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"df28ab1fb890ce71731a2283f95221efe00e39be32dac6f4bc205359e842bc96"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Stopwatch (19 abstract methods): \u0060Stopwatch\u0060 declares 19 abstract methods: \u0060getElapsedMillis\u0060, \u0060getElapsedMillisLong\u0060, \u0060getElapsedNanos\u0060, \u0060getElapsedSeconds\u0060, \u0060getElapsedSecondsBD\u0060, \u0060getName\u0060, \u0060getSplitMillis\u0060, \u0060getSplitMillisLong\u0060, \u0060getSplitNanos\u0060, \u0060getSplitSeconds\u0060, \u0060getSplitSecondsBD\u0060, \u0060getState\u0060, \u0060isRunning\u0060, \u0060isStopped\u0060, \u0060reset\u0060, \u0060start\u0060, \u0060stop\u0060, \u0060toStringElapsed\u0060, \u0060toStringSplit\u0060. Counted over its ABSTRACT methods, once per signature; \u0060default\u0060, \u0060static\u0060 and \u0060private\u0060 methods and constants are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/time/Stopwatch.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"33311adb837d9f2c0864f31ef48ac4eda6c9ecf07a9bc6ee66cd2838264c5374"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: GraphMBean (40 abstract members): \u0060GraphMBean\u0060 declares 40 abstract members: \u0060getConsoleFlag\u0060, \u0060clearCache\u0060, \u0060go\u0060, \u0060profilerResetAll\u0060, \u0060setFlag\u0060, \u0060resetWaits\u0060, \u0060getNativeAllocation\u0060, \u0060getNativeWatermark\u0060, \u0060setNativeWatermark\u0060, \u0060clearAllCaches\u0060, \u0060clearAllCachesWithLocal\u0060, \u0060getSSRoots\u0060, \u0060resetProfileData\u0060, \u0060getProfileData\u0060, \u0060getLiveReaderTaskInfo\u0060, \u0060collectProfile\u0060, \u0060getCache\u0060, \u0060profileCacheMemory\u0060, \u0060profileCacheMemory\u0060, \u0060getSchedulerProfileEntry\u0060, \u0060getStallTimes\u0060, \u0060getMemory\u0060, \u0060saveProfile\u0060, \u0060getInvalidates\u0060, \u0060getTrackingScenarioInfo\u0060, \u0060getWaits\u0060, \u0060showGraphConsole\u0060, \u0060setTraceMode\u0060, \u0060getTraceMode\u0060, \u0060getTrace\u0060, \u0060getSummaryTable\u0060, \u0060gc\u0060, \u0060clearCacheAndTracking\u0060, \u0060resetSStackRoots\u0060, \u0060getFullSchedulerState\u0060, \u0060infoDump\u0060, \u0060asyncProfilerCommand\u0060, \u0060asyncProfilerStart\u0060, \u0060asyncProfilerStop\u0060, \u0060asyncProfilerStatus\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. Those 40 declarations carry 39 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 39 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GraphMBean.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"579f31a986ec6a759408b670770a2025e28780afbdb59c95f9be94301a209c2a"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: EntityResolver (23 abstract members): \u0060EntityResolver\u0060 declares 23 abstract members: \u0060findEntity\u0060, \u0060findEntity$queued\u0060, \u0060findEntity$newNode\u0060, \u0060findEntityOption\u0060, \u0060findEntityOption$queued\u0060, \u0060findEntityOption$newNode\u0060, \u0060findByReference\u0060, \u0060findByReference$queued\u0060, \u0060findByReference$newNode\u0060, \u0060findByIndex\u0060, \u0060findByIndex$queued\u0060, \u0060findByIndex$newNode\u0060, \u0060findByIndexInRange\u0060, \u0060findByIndexInRange$queued\u0060, \u0060findByIndexInRange$newNode\u0060, \u0060findByIndexWithEref\u0060, \u0060findByIndexWithEref$queued\u0060, \u0060findByIndexWithEref$newNode\u0060, \u0060enumerateKeysWithRtt\u0060, \u0060enumerateKeysWithRtt$queued\u0060, \u0060enumerateKeysWithRtt$newNode\u0060, \u0060translateMarkers\u0060, \u0060equivalentTo\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/dal/EntityResolver.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"7981cc61d4d4e4757fa6de1860918ea9f1da5f1860c53ede2c9ffffe57b45297"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: PickledPropertiesApi[R] (22 abstract members): \u0060PickledPropertiesApi[R]\u0060 declares 22 abstract members: \u0060isEmpty\u0060, \u0060hashCode\u0060, \u0060knownSize\u0060, \u0060size\u0060, \u0060contains\u0060, \u0060keys\u0060, \u0060values\u0060, \u0060iterator\u0060, \u0060get\u0060, \u0060apply\u0060, \u0060mapProps\u0060, \u0060map\u0060, \u0060removeAll\u0060, \u0060\u002B\u002B\u0060, \u0060remove\u0060, \u0060\u002B\u0060, \u0060\u002B\u0060, \u0060getOrElse\u0060, \u0060isDefinedAt\u0060, \u0060matches\u0060, \u0060keySet\u0060, \u0060asMap\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. Those 22 declarations carry 21 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 21 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/pickling/PickledProperties.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe754fac44b228e60f8c6feac37fc22b0b56bee34253d242071eed139c6bdb0"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: RuntimeConfiguration (18 abstract members): \u0060RuntimeConfiguration\u0060 declares 18 abstract members: \u0060env\u0060, \u0060rootID\u0060, \u0060mode\u0060, \u0060instance\u0060, \u0060specificPropertyMap\u0060, \u0060getProperties\u0060, \u0060getAllProperties\u0060, \u0060getString\u0060, \u0060getInt\u0060, \u0060getBoolean\u0060, \u0060getInstant\u0060, \u0060getStringList\u0060, \u0060getByteVector\u0060, \u0060get\u0060, \u0060getAttributes\u0060, \u0060getStringListWithAttributes\u0060, \u0060withOverride\u0060, \u0060withOverrides\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core_config/src/main/scala/optimus/config/RuntimeConfiguration.scala"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"5032c2e24e6aaade9a5af1dac21fb3d75d4af65a5ccd69d34d9f6ed158466ead"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: TraceableAsyncOp[K, V] (17 abstract members): \u0060TraceableAsyncOp[K, V]\u0060 declares 17 abstract members under just 5 distinct name(s): \u0060retrieveWithTrace\u0060, \u0060getWithTrace\u0060, \u0060getWithTrace\u0060, \u0060getWithTrace\u0060, \u0060getWithTrace\u0060, \u0060putWithTrace\u0060, \u0060putWithTrace\u0060, \u0060putWithTrace\u0060, \u0060putWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060waitForWithTrace\u0060, \u0060waitForWithTrace\u0060, \u0060waitForWithTrace\u0060, \u0060waitForWithTrace\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. That is an OVERLOAD SET, not 17 separate responsibilities: a caller binds to 5 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 17 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/client/TraceableNamespacePerspective.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad4ccf27986196de2cd98558a103d6fc9155a120cfa8d895d2e67935d8e9bf6c"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: TraceableSyncOp[K, V] (19 abstract members): \u0060TraceableSyncOp[K, V]\u0060 declares 19 abstract members under just 5 distinct name(s): \u0060retrieveWithTrace\u0060, \u0060retrieveWithTrace\u0060, \u0060retrieveWithTrace\u0060, \u0060getWithTrace\u0060, \u0060getWithTrace\u0060, \u0060getWithTrace\u0060, \u0060getWithTrace\u0060, \u0060putWithTrace\u0060, \u0060putWithTrace\u0060, \u0060putWithTrace\u0060, \u0060putWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060invalidateWithTrace\u0060, \u0060waitForWithTrace\u0060, \u0060waitForWithTrace\u0060, \u0060waitForWithTrace\u0060, \u0060waitForWithTrace\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. That is an OVERLOAD SET, not 19 separate responsibilities: a caller binds to 5 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 19 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dal/silverking/client/TraceableNamespacePerspective.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f55086894a8cb437f10ba37e6229514e1597cd801dc0471b5b9e1d06d31e33c"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: BitemporalSpace[T] (20 abstract members): \u0060BitemporalSpace[T]\u0060 declares 20 abstract members: \u0060latestTxTime\u0060, \u0060all\u0060, \u0060onTxTime\u0060, \u0060beforeTxTime\u0060, \u0060onValidTime\u0060, \u0060onValidInterval\u0060, \u0060adjacentToValidTime\u0060, \u0060at\u0060, \u0060updateInterval\u0060, \u0060insertPoint\u0060, \u0060correctPoint\u0060, \u0060invalidatePoint\u0060, \u0060revertPoint\u0060, \u0060filterCurrentTS\u0060, \u0060map\u0060, \u0060updateMultiple\u0060, \u0060updateIntervals\u0060, \u0060performRawActions\u0060, \u0060execute\u0060, \u0060maxTimeSliceCount\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/bitemporal/BitemporalSpace.scala"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3b7944746d52d9364e550f3f4c9ba9594319e1d67c923c3509dc59572a61a0"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: ZkUtilsProvider (22 abstract members): \u0060ZkUtilsProvider\u0060 declares 22 abstract members: \u0060getZkEnv\u0060, \u0060getRootContext\u0060, \u0060getRootContext\u0060, \u0060getRootContext\u0060, \u0060getRootContext\u0060, \u0060getRootContextAndEnv\u0060, \u0060getRootContextAndEnv\u0060, \u0060getRootContextForUriAuthority\u0060, \u0060getContextForConfig\u0060, \u0060devContext\u0060, \u0060devContextNoKerberos\u0060, \u0060qaContext\u0060, \u0060qaContextNoKerberos\u0060, \u0060prodContext\u0060, \u0060prodContextNoKerberos\u0060, \u0060prodContextWithoutGuard\u0060, \u0060qaContextWithoutGuard\u0060, \u0060parseInstant\u0060, \u0060parseKnownZkEnv\u0060, \u0060isCloud\u0060, \u0060isEnv\u0060, \u0060isTestMode\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. Those 22 declarations carry 18 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 18 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_environment/src/main/scala/optimus/platform/runtime/ZkUtilsProvider.scala"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f367a5de1a4bf0422e9d3a0457e7d49321a87b10c3a668f7656b2a08ab0ad2"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: ClassInfo (26 abstract members): \u0060ClassInfo\u0060 declares 26 abstract members: \u0060isTrait\u0060, \u0060isAbstract\u0060, \u0060isObject\u0060, \u0060isEvent\u0060, \u0060isEmbeddable\u0060, \u0060isEntity\u0060, \u0060isMeta\u0060, \u0060isEnumeration\u0060, \u0060isJavaEnumeration\u0060, \u0060isOption\u0060, \u0060isKnowable\u0060, \u0060isCollection\u0060, \u0060isMap\u0060, \u0060isKnownNonStorable\u0060, \u0060localName\u0060, \u0060directParents\u0060, \u0060parents\u0060, \u0060selfAndParents\u0060, \u0060children\u0060, \u0060directChildren\u0060, \u0060fields\u0060, \u0060fullName\u0060, \u0060className\u0060, \u0060typeArgs\u0060, \u0060classSymbol\u0060, \u0060piiElements\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/util/dalschema/ClassInfo.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c1ed23a4fdcb1b6538a78c5b2dd806176b5d64f50c5880a766268fd93b4f507"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: QueryProvider (62 abstract members): \u0060QueryProvider\u0060 declares 62 abstract members: \u0060permitTableScan\u0060, \u0060entitledOnly\u0060, \u0060map\u0060, \u0060flatMap\u0060, \u0060filter\u0060, \u0060groupBy\u0060, \u0060groupBy\u0060, \u0060aggregateBy\u0060, \u0060aggregateBy\u0060, \u0060aggregateByUntyped\u0060, \u0060mapValues\u0060, \u0060innerJoin\u0060, \u0060leftOuterJoin\u0060, \u0060rightOuterJoin\u0060, \u0060fullOuterJoin\u0060, \u0060on\u0060, \u0060on\u0060, \u0060onNatural\u0060, \u0060withLeftDefault\u0060, \u0060withRightDefault\u0060, \u0060withLeftDefaultNatural\u0060, \u0060withRightDefaultNatural\u0060, \u0060union\u0060, \u0060merge\u0060, \u0060difference\u0060, \u0060untype\u0060, \u0060extend\u0060, \u0060shapeTo\u0060, \u0060extendTyped\u0060, \u0060extendTypedValue\u0060, \u0060replace\u0060, \u0060replaceValue\u0060, \u0060extendTypedOrReplaceValue\u0060, \u0060sortBy\u0060, \u0060arrange\u0060, \u0060distinct\u0060, \u0060reduce\u0060, \u0060foldLeft\u0060, \u0060aggregate\u0060, \u0060aggregate\u0060, and 22 more. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. Those 62 declarations carry 51 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 51 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/QueryProvider.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4b85b32fe9e43199213de0e004c9a0b82d4404a1df94598db354edd8a542da7"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Operator[T] (17 abstract members): \u0060Operator[T]\u0060 declares 17 abstract members: \u0060ltArray\u0060, \u0060ltSingle\u0060, \u0060gtArray\u0060, \u0060gtSingle\u0060, \u0060eqArray\u0060, \u0060eqSingle\u0060, \u0060plusArray\u0060, \u0060plusSingle\u0060, \u0060minusArray\u0060, \u0060minusSingle\u0060, \u0060mulArray\u0060, \u0060mulSingle\u0060, \u0060divArray\u0060, \u0060divSingle\u0060, \u0060moduloArray\u0060, \u0060moduloSingle\u0060, \u0060generateNewColumnValues\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/RelationColumnType.scala"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"feaea97976283bf17dc32ae4e424e4ac084eaab6fff4fa586c2d6c930c0270b8"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: FieldReader (22 abstract members): \u0060FieldReader\u0060 declares 22 abstract members: \u0060readValue\u0060, \u0060readOptionValue\u0060, \u0060readBoolean\u0060, \u0060readOptionBoolean\u0060, \u0060readByte\u0060, \u0060readOptionByte\u0060, \u0060readChar\u0060, \u0060readOptionChar\u0060, \u0060readShort\u0060, \u0060readOptionShort\u0060, \u0060readInt\u0060, \u0060readOptionInt\u0060, \u0060readLong\u0060, \u0060readOptionLong\u0060, \u0060readFloat\u0060, \u0060readOptionFloat\u0060, \u0060readDouble\u0060, \u0060readOptionDouble\u0060, \u0060readString\u0060, \u0060readOptionString\u0060, \u0060isNone\u0060, \u0060pickledInputStream\u0060. Counted over its ABSTRACT members \u2014 a \u0060def\u0060 with no body or a \u0060val\u0060/\u0060var\u0060 with no initializer, once per signature; concrete members, private and protected members, and members of a companion \u0060object\u0060 are not counted, because no implementer is forced to write them. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/data/FieldReader.scala"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eeb4039186f67e5703b432833bf8f9568d9b29f3cf0c51ffc23edca14fa9f87"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060contentHash\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b77e92802b2aa23b0c40d39f994bb1efaaa58867ae63bd853a952ad1dc74019a"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060input\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d59efabccd734216c31a4a509a3d5b27ab48586c91ddcae33f89557fd0548a6"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060contentHash\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"442faf72a6cdb798eb4462ab8540b2c5a56a05fc61b706fe935470a8087422b6"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060pluginShouldHaveReplacedThis\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/CoreSupport.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c2ae9314a2fe29c698a386aadcd466a2756a65f3b463c4e3f4c101c21af0247"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060await\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/NodeFutureSystem.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"9641e0c80680a6e05c50ced9afc8ed11e8c269e3563cc115228dc032be76c58a"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is NotImplementedError: \u0060mapperNode\u0060 is a shipped member whose whole body is still NotImplementedError, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/AsyncPipeline.scala"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"100081031bc7c51bf46fb1eba866a7a02aa3aecccc749b147bf7c96668da436f"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060of\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/RelationKeys.scala"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"98af3b723e8150a002d6285d7fb4fc83b6da435015f89aa35f10bd43bc30808c"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060extractSignature\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/talks/src/main/scala/scala/days/live/ScalaDaysDemo.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"f64a6348a0a550c366db999bf062d3c7357d9e9f17d8a96dc8f2a0dbd244e739"}},{"ruleId":"GD1","level":"warning","message":{"text":"Unfinished stub \u2014 body is \u0060???\u0060: \u0060doCompile\u0060 is a shipped member whose whole body is still \u0060???\u0060, and nothing in the repository overrides it \u2014 generated scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/talks/src/main/scala/scala/days/live/ScalaDaysDemo.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"a259705b3fe13f77d9898e0a5dd2a23f64de9dbbe01662757f1a0dc839b6f427"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060contentHash\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"17647c9bbcf309ad63306e2679d2fa1aaa77929604e58d793f73113d6f472173"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060input\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15a47752a215b7eebe73f77c32a80dfdfd5dbfc424940225af86322825ad1cf"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060contentHash\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincVirtualFiles.scala"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"d589804a82148994bd0623b6c488abaa9152ed374deaabb902146ea47e9dc2fb"}},{"ruleId":"IC1","level":"warning","message":{"text":"Empty method body \u2014 does nothing with its inputs: \u0060initAuth\u0060 takes parameters but its body is empty \u2014 it accepts inputs and does nothing. Either implement it or remove it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/auth/CrumbsAuthProvider.scala"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"94abd070334a539b9d3dd07fffdfc9772fef60e96ea561d36aa1669790691769"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060pluginShouldHaveReplacedThis\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/CoreSupport.scala"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"481cc74eaac8d9e0c0e08dc4f507be43b113e984bcf2015a81efff62cb4688f7"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060await\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/core/NodeFutureSystem.scala"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3a5f6ab0ea70f56ef2f956b49fd49cb92f2323bdb70e79f81791c5a5f8c33a"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060mapperNode\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/AsyncPipeline.scala"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3dd374a7d020a2ff750b5b4652f59490f16e0642dd1877d5f1052b8ddddd320"}},{"ruleId":"IC1","level":"warning","message":{"text":"Empty method body \u2014 does nothing with its inputs: \u0060report\u0060 takes parameters but its body is empty \u2014 it accepts inputs and does nothing. Either implement it or remove it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/GraphDiagnostics.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"7691ecf39181cc62db1153c9cdd9682257df7a925cb311073af6aa853a89de5c"}},{"ruleId":"IC1","level":"warning","message":{"text":"Hollow method \u2014 returns a constant without doing the work: \u0060apply\u0060 looks like it should compute a result but its body just returns a constant \u2014 a placeholder return that was never filled in."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/Tweak.scala"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"b68fd2a9de39d3c1c1583b7b8c73fc67dcbce50ef9692f031ad36ae534e2f960"}},{"ruleId":"IC1","level":"warning","message":{"text":"Empty method body \u2014 does nothing with its inputs: \u0060push\u0060 takes parameters but its body is empty \u2014 it accepts inputs and does nothing. Either implement it or remove it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/ReplDsl.scala"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe11cfe62452fffa01c560800e25baa9e729270c90b386a60aabd50a17237015"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060of\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/RelationKeys.scala"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e859b0f63882348e291e56d579805aa9e3a27f387a606e5deb817bde9cf3742"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060extractSignature\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/talks/src/main/scala/scala/days/live/ScalaDaysDemo.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d1db43fc7592f361191b433f6924045edda92703850ff5a438e34303c7f533a"}},{"ruleId":"IC1","level":"warning","message":{"text":"Unfinished stub \u2014 body is ??? / NotImplementedError: \u0060doCompile\u0060 is a shipped method whose whole body is \u0060???\u0060 (or throws NotImplementedError), and nothing in the repository overrides it \u2014 scaffolding that was never completed. Implement it or remove the dead surface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/talks/src/main/scala/scala/days/live/ScalaDaysDemo.scala"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"007c9de5365230dd17d69cb2c772581528ed3f8f8940f3a465e432f209ae2029"}},{"ruleId":"IC1","level":"note","message":{"text":"Empty method body: \u0060await\u0060 has an empty body \u2014 confirm it\u0027s an intentional no-op and not an unfinished method."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/GraphDiagnostics.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"6225ee13a0957c5382f6917d41233cc7f1bd00fd0cb033cfcc2a044edd418e1d"}},{"ruleId":"IC1","level":"note","message":{"text":"Empty method body: \u0060ensureLoadedIfEnabled\u0060 has an empty body \u2014 confirm it\u0027s an intentional no-op and not an unfinished method."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":590}}}],"partialFingerprints":{"codehealthFindingId/v1":"db87654573fce72e0e40986d469b4d04f0c3529c22d8eaadc7d2491d53392b43"}},{"ruleId":"IC1","level":"note","message":{"text":"Empty method body: \u0060setup\u0060 has an empty body \u2014 confirm it\u0027s an intentional no-op and not an unfinished method."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/OptimusApp.scala"},"region":{"startLine":683}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbb04e9024b237104dbb0c67aa63d2822dd71cd295d75143f7a7aea75778e797"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"M2","level":"note","message":{"text":"No architecture diagram/doc: No C4/Structurizr/PlantUML/Mermaid/Graphviz/D2 diagram, no drawn diagram named for the architecture, no file named \u0060architecture\u0060 or \u0060design\u0060 in any markup this check reads, and nothing in the README, docs or contributor guides that announces the shape \u2014 no \u0060## Architecture\u0060 heading, no \u0022architecture overview\u0022/\u0022high-level design\u0022 phrasing, no \u0022the architecture is \u2026\u0022 introduction, no guided code tour. A shape laid out in prose that never names itself as the architecture is not visible to this check, and neither is one kept outside the repository, so this row reports the absence of a re-findable shape document \u2014 not evidence that nobody wrote the shape down."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0c190e7c159d1850ee706c3ac4486e151e8a4fe169de4bf61436b9f399654f06"}},{"ruleId":"M3","level":"note","message":{"text":"No src/ separation: Production code isn\u0027t grouped under a src/ folder \u2014 it all sits under optimus/, so the conventional src/ boundary between the product and its tooling isn\u0027t drawn."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fdf7f5b24e313364d10170a5c2542959902fe0d26ed70edef3eaa10ec5bcdb1d"}},{"ruleId":"P1","level":"warning","message":{"text":"No CI pipeline: No CI workflow found (.github/workflows, azure-pipelines.yml, .gitlab-ci.yml, \u2026) \u2014 changes aren\u0027t gated by an automated build/test."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"44f01af96e50474fba2df84d95ddf4f7e1d34c29c307830b9efc9057daa6b670"}},{"ruleId":"P3","level":"note","message":{"text":"No SAST: No static application security testing detected. For this repository\u0027s stack, add scalafix or scapegoat (or \u0060semgrep --config=auto\u0060, which runs on any language) \u2014 this repository has no CI pipeline yet, so run it locally to clear the existing findings, then make it a step of the first workflow you add so a regression fails the build. What was searched, so you can tell an absence from a miss: the 0 CI workflow file(s) in this repository, and the scanner and linter configuration checked in beside them. A scan that runs outside CI, one configured in your forge\u0027s web UI rather than in a committed file, or a tool whose name is none of those this check carries, is not seen \u2014 if that is your case the row is wrong, and saying so is more useful than adding a second scanner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e54424179c892f03ef2fd003130ac4bd43f39bbf3b1ca0a0143e25acb80ec87"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/msjava/MSUuidGenerator.scala"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"214314350491d6e600f49b39600b3c7554988edd5c2c39b4b1b8b2b892043c02"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/session/utils/ClientEnvironment.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e7d072d8e7a0fc9e25afef8a51373d5f8d3ab91f6f67d68e55605be8dd08206"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMDynamicObjectGenerator.scala"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ee98d2d72173082fdd87da335f7d59b9bc418c71895f9f07ff8297a5c1185f2"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMKeyGenerator.scala"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"79d1fd13682e62a991e5e1664fb6a448d2dc99938f734de8e93ba81bdb7722cf"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/asm/ASMProxyGenerator.scala"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"be42d6ba3460c6bc3e9085246d4f3ae7376c19b54474b8b26e5117420d47bac8"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/utils/HashUtil.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d21937811bcdf5dd88b9de131cc0cea407d31846c8342447c1752c503c16f8"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/SimpleNamespaceCreator.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd5fc5709a6b6151e03a4bfd0a00408742aba8e368385ebad37c12570412ed8"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/crypto/SHA1Digest.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"13b0f639a889b1b460ddfa2933f336af350f932a71dfc3752ee51ef1179488c8"}},{"ruleId":"S1","level":"warning","message":{"text":"Weak hash algorithm: MD5/SHA1 is computed here, and both are collision-broken. If this digest protects anything \u2014 a signature, an integrity or tamper check, a credential, or any value an attacker can influence \u2014 that is a real weakness: use SHA-256\u002B (\u0060MessageDigest.getInstance(\u0022SHA-256\u0022)\u0060) for content integrity, or a KDF (bcrypt/Argon2/scrypt) for password storage. If it only derives a non-security identifier (a cache key, an avatar URL, an ETag), collision resistance carries no security consequence here; make that intent explicit instead \u2014 a non-cryptographic hash such as xxhash or murmurhash says it in code \u2014 since the algorithm alone cannot distinguish the two uses. Where a protocol this code does not own fixes the digest (a k-anonymity range query, a legacy signature format), the protocol decides; say so beside the call."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/cloud/dht/crypto/MD5Digest.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bd6dca61efff13b327a002dffc0915148a61c73fca1c6a47013eadaaf7fa28e"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060!primaryOwners.contains(node) \u0026\u0026 !secondaryOwners.contains(node)\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"245f65d9e66960623b90a86da7ff222244312a3e03f68f6ba0b8afa2cf814b82"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060AsyncGlobals.debug \u0026\u0026 debug \u0026\u0026 log.isDebugEnabled()\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/Connection.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SelectorController.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/Connection.java"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"fab3d376f74ce2e4bdc14bee55a9c055fc865ae47eca79a05cdce736ffda0499"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060AsyncGlobals.debug \u0026\u0026 log.isDebugEnabled()\u0060 appears character-identically in 3 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/OutgoingMessageGroup.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/OutgoingBufferedData.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/OutgoingByteBuffer.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/OutgoingMessageGroup.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"5146b2b03a950f39b36b57eb8fec621f8086018a0ecf1c4815d5e26b257e6e42"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060LWTConstants.enableLogging \u0026\u0026 log.isDebugEnabled()\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/BaseWorker.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/LWTPoolImpl.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/thread/lwt/BaseWorker.java"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e0a66e4b3be51ef94f4ec67e5c65a2d95e808edcd3c1e44bad41d35a18711c2"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060Objects.nonNull(cloudKe) \u0026\u0026 Objects.nonNull(serverConfigKe)\u0060 appears character-identically in 3 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/management/MetaToolModuleBase.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/WeightsZK.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/ClassVarsZK.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"17384a752812a5ea521caae94cabedaa270d3b7cc229a297df484cdf1e93314f"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060creationTime \u003C 0 \u0026\u0026 attemptIndex \u003C zkReadAttempts\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/meta/RingConfigWatcher.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/daemon/storage/convergence/management/DHTRingManager.java"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce6d223a721ec7bc625c8937757623a793133d1527803105cbaf7726b5caa701"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060curEntry.getRegion().isContiguousWith(nextEntry.getRegion()) \u0026\u0026 curEntry.getPrimaryOwnersSet().equals(nextEntry.getPrimaryOwnersSet()) \u0026\u0026 cu\u2026\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingEntry.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/SingleRing.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/RingEntry.java"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7528665bdafd644673ce344e89918abb0c5ac7517a536c51ec3434f446b69bd"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060failedState || loader == null || skipName(className)\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/entityagent/src/main/java/optimus/junit/CachingJunitRunnerInjector.java, optimus/platform/projects/entityagent/src/main/java/optimus/junit/OptimusTestWorkerClientInjector.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/junit/CachingJunitRunnerInjector.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1cf55779efb62f849159fc2795a69eb84beb247ce56601298204581a200c10"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060ke.getCause() != null \u0026\u0026 NoNodeException.class.isAssignableFrom(ke.getCause().getClass())\u0060 appears character-identically in 3 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DaemonStateZK.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/RingHealthZK.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/RingStateZK.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/meta/DaemonStateZK.java"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbb94383c5053b38f172011640a83524716a386819a3c352a453872cd1537ebe"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060lsl == oKey.getLSL() \u0026\u0026 msl == oKey.getMSL()\u0060 appears character-identically in 3 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyEntryBase.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/SimpleKey.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/MessageGroupKeyEntry.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/DHTKeyEntryBase.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"86be97aeb51210c9bf8e63e91ffb47d0edca33302c4160f5997b80311f4b707c"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060maxAttempts == o.maxAttempts \u0026\u0026 attemptRelativeTimeoutMillis == o.attemptRelativeTimeoutMillis \u0026\u0026 maxRelativeTimeoutMillis == o.maxRelativeT\u2026\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/SimpleSessionEstablishmentTimeoutController.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SimpleNewConnectionTimeoutController.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/SimpleSessionEstablishmentTimeoutController.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"44808d2fcec548ce48d43bb1cfec299cf5994e8cbe24853504366424c13dc7f9"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060mode == other.mode \u0026\u0026 minVersions == other.minVersions \u0026\u0026 timeSpanSeconds == other.timeSpanSeconds\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/TimeAndVersionRetentionPolicy.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/ValidOrTimeAndVersionRetentionPolicy.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/TimeAndVersionRetentionPolicy.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ecb96bd6efdbd8721c046736ea8cbd2ed3f7e61b17b6e6fc8886c76d6da7bf7"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060noPreviousMessage \u0026\u0026 rawBuffer.size() != 0\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java, optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"8287c9185f28a699f65183163a2eb1ab8a8857d96f06b0914b671f2ec0db4f14"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060obj == null || getClass() != obj.getClass()\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NCPolicyComposite.java, optimus/platform/projects/inputs/src/main/java/optimus/platform/inputs/loaders/JavaNodeInputStorage.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NCPolicyComposite.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"f980ea0ea2d6defa18a0b6627f6bb18b7161cc24169b3ab0e92850d3924db2ef"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060opSize == 1 || compressedValueSize \u003E= dedicatedBufferSizeThreshold\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutForwardMessageGroup.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoValueMessageGroup.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutForwardMessageGroup.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d15eead6a23d3afc2965ab3a946486df1eec11320120d93668e5c3d470cb29"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060p1.length() == p2.length() \u0026\u0026 p1.hashCode() == p2.hashCode()\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/CanEqual.java, optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/CanEqual.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/CanEqual.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f81a95332e2838bf7ac5107ce67e7a99eb89c78ca3fbff7626dd32d9f6f7a94"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060primaryOwners.contains(node) || secondaryOwners.contains(node)\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryListPair.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/PrimarySecondaryIPListPair.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"7896584be29548e3da5463a79b55e8c3eb7ad6880ed5e43d970f11490c012bc1"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060size1 == -1 || size2 == -1 || size1 == size2\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/CanEqual.java, optimus/platform/projects/scala_compat/src/main/scala-2.13/optimus/scalacompat/collection/CanEqual.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/scala_compat/src/main/scala-2.12/optimus/scalacompat/collection/CanEqual.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaa2d9c3ee7c237982bae6fb1647e5fa69b3103ff148e10209af313a914edc27"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060socketState == SSLSocketState.HANDSHAKE_COMPLETED \u0026\u0026 write.getNumBytesInMessage() == write.getNumBytesProcessed()\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java, optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"a136d41bfd43dc471184f2cbcb66d7932c3ac7e526429d67670fb908d5abfed2"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060socketState == SSLSocketState.READY_FOR_ENCRYPTING \u0026\u0026 buf.size() != 0\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java, optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetSSLSocket.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"937d4407975f3b028b2b27537958672a5f807d116675db90a93bdae2373b564f"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060this.buffer != null \u0026\u0026 this.buffer.length == Spec.block_bytes\u0060 appears character-identically in 2 files \u2014 optimus/dht/projects/digest/src/main/java/appmw/dht/digest/Blake2bSafe.java, optimus/dht/projects/digest/src/main/java/appmw/dht/digest/Blake2bUnsafe.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/digest/src/main/java/appmw/dht/digest/Blake2bSafe.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cda44869691bfb74873fcca68f889d8fccd41f19cc1fef81ec5ed7c2ffce2d5"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060this.dhtKey != null \u0026\u0026 KeyUtil.equal(this.dhtKey, (DHTKey) dhtKey)\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/SingleDHTKeyToKeyMap.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/SingleKeyToDHTKeyMap.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/SingleDHTKeyToKeyMap.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"3563a0625beac4a19d5cc3f8d4b0cd0f92a0066a437cedb73ad6ba3dc9993644"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060this.h != null \u0026\u0026 this.h.length == 8 \u0026\u0026 this.t != null \u0026\u0026 this.t.length == 2 \u0026\u0026 this.f != null \u0026\u0026 this.f.length == 2 \u0026\u0026 this.m != null \u0026\u0026 th\u2026\u0060 appears character-identically in 2 files \u2014 optimus/dht/projects/digest/src/main/java/appmw/dht/digest/Blake2bSafe.java, optimus/dht/projects/digest/src/main/java/appmw/dht/digest/Blake2bUnsafe.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/digest/src/main/java/appmw/dht/digest/Blake2bSafe.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cb6b54ce9ffcb48fa3ab570b292781b1a43506774e0fc68dfffed9c05ffdfe9"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060this.key != null \u0026\u0026 key.equals(this.key)\u0060 appears character-identically in 2 files \u2014 optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/SingleDHTKeyToKeyMap.java, optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/SingleKeyToDHTKeyMap.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/collection/SingleDHTKeyToKeyMap.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6710e8453e1722e3c2b3844b00e27e52e3d7d2aaedd84915830e517cfb7b1a1"}},{"ruleId":"X10","level":"note","message":{"text":"Duplicated predicate: \u0060timeoutScheduler != null \u0026\u0026 timeoutScheduler.isTimeoutSet()\u0060 appears character-identically in 2 files \u2014 optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetProtocolTCPConnection.java, optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetTCPConnection.java. It is one line, so the duplication detector\u0027s token window never sees it; the copies drift when only one is corrected. Give the condition a name and one home."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/msnet/MSNetProtocolTCPConnection.java"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"b11d10d9cfaaed3cac787d78a9ac126b1082bf1818c2d854243b59d6ba43fba6"}},{"ruleId":"X15","level":"warning","message":{"text":"Length read from the parsed input is spent without ever being bounded: \u0060entryLength\u0060 is read from the bytes being parsed at line 378 (\u0060readInt\u0060), then used to size an \u0060Array.ofDim\u0060 at line 379 \u2014 and nowhere in its scope is \u0060entryLength\u0060 bounded from above \u2014 compared to a limit, clamped, or checked against the input that remains (a zero or sign test, or the loop that counts up to it, bounds nothing). Whoever wrote those bytes therefore chooses the allocation directly: a 32-bit length asks for up to 2 GiB before a single byte of the payload is known to exist, which either exhausts the heap with an \u0060OutOfMemoryError\u0060 or, negative, throws \u0060NegativeArraySizeException\u0060 out of a parser whose failure path was written for malformed input, not for hostile input. Bound \u0060entryLength\u0060 against the bytes actually remaining and a maximum the format allows before allocating."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dal/DALCache.scala"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23833fb46bb87486465b0170a92174011c21ce992e1a87f4e990ff65bbc4850"}},{"ruleId":"X15","level":"warning","message":{"text":"Length read from the parsed input is spent without ever being bounded: \u0060length\u0060 is read from the bytes being parsed at line 306 (\u0060getInt\u0060), then used to size a \u0060new byte[]\u0060 at line 311 \u2014 and nowhere in its scope is \u0060length\u0060 bounded from above \u2014 compared to a limit, clamped, or checked against the input that remains (a zero or sign test, or the loop that counts up to it, bounds nothing). Whoever wrote those bytes therefore chooses the allocation directly: a 32-bit length asks for up to 2 GiB before a single byte of the payload is known to exist, which either exhausts the heap with an \u0060OutOfMemoryError\u0060 or, negative, throws \u0060NegativeArraySizeException\u0060 out of a parser whose failure path was written for malformed input, not for hostile input. Bound \u0060length\u0060 against the bytes actually remaining and a maximum the format allows before allocating."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoPutMessageGroup.java"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f8064e4f6b4907b389d5235176b1a974b94ddbf3819cee69e492143f29499f"}},{"ruleId":"X17","level":"warning","message":{"text":"Recursive walk over a caller-supplied document has no depth cap: \u0060EventCauseJsonProtocol.read\u0060 is public and takes \u0060value: JsValue\u0060 from its caller, and it calls itself at line 422 with a piece of \u0060value\u0060, not as a tail call the compiler turns into a loop \u2014 and nowhere in \u0060EventCauseJsonProtocol.read\u0060 is there a depth parameter, a descent counter, or any other cap. The walk therefore spends one stack frame per LEVEL of the value it is handed, so the nesting of the caller\u0027s document \u2014 not this code \u2014 decides how deep the stack goes. On the JVM\u0027s default 1 MB thread stack a walk like this one throws \u0060StackOverflowError\u0060 from about 500\u20132,000 levels on a cold first call and 6,000\u201317,000 once warmed up (OpenJDK 21 and 25), while \u0060ujson.read\u0060, Jackson\u0027s \u0060readTree\u0060 before 2.15 and circe before 0.14.16 accept any nesting (2,000,000 levels from 4 MB) and circe 0.14.16 accepts 4,096 \u2014 on a cold JVM even play-json\u0027s cap of 1,000 is past the point the walk fails. \u0060StackOverflowError\u0060 is not \u0060NonFatal\u0060: \u0060Try\u0060, \u0060case NonFatal(e)\u0060 and \u0060recover\u0060 do not stop it, and in a \u0060Future\u0060 on the global execution context it leaves the future forever incomplete. Thread a depth argument through \u0060EventCauseJsonProtocol.read\u0060 and reject the value past a fixed maximum, or rewrite the descent with an explicit stack."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/crumbs/Properties.scala"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61f247795acff6baf6c11bc25859f6eadafc9360acb519a7b2851990c3dce48"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.list(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.list(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/builders/postbuilders/installer/component/fingerprintdiffing/BuildArtifactComparatorApp.scala"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d3535b4298345fc5019d16776c47d6b0e5176f1864651a666da2624f68cfd5a"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.list(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.list(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilder.scala"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1fdfdd4ad856c8134c9164330219783698a5d52afcb3671824e52e8429c9202"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.walk(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.walk(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/rubbish/RubbishTidyer.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"00afcac7d2dfea66c9f6168274231b0d09514f2af4b36c5114e6370caa133942"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.list(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.list(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/rubbish/ArtifactRecency.scala"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"69c2f08da36070afb45f83383f151046a38d83019b7aaabdf25561cf0aaafa20"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.find(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.find(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/files/InstallPathBuilder.scala"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"df4588d242b451f0582e949f2c5a3121fc66b6e54ec41130254d5e71d9413124"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.list(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.list(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/utils/OsUtils.scala"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"303164c2fbe55c9ef1d80f4e79a36a3efd9915103bcfc7923251752690dbe3ab"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.walk(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.walk(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/heartbeat/WatcherProcess.scala"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"4af88b08c8dc25987028f69aee5adb5b32e4d3c4d4663d54d1b4d47269e525da"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.walk(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and it is held in \u0060stream\u0060, and every later use of \u0060stream\u0060 in its block reads a member through it \u2014 it is never returned, passed, stored, captured by a lambda, reassigned or released, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.walk(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/PlexCleaner.scala"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f76417ed77d270bc270093397499f8d01955fc01f03a6bc2805d3f71b97ca33"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.list(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.list(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/ChildProcessSampling.scala"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"903890f4680f17abb3b60199acf50f85a547c1a553d54ae36ac7e393d2e982dc"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.list(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.list(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/BaseSamplers.scala"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"85518e03c30af17b6908ac7574348b2ab34baab26ac8ec660f368cfb75fa20a5"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060new JarFile(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and it is held in \u0060jar\u0060, and every later use of \u0060jar\u0060 in its block reads a member through it \u2014 it is never returned, passed, stored, captured by a lambda, reassigned or released, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(new JarFile(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/platform/utils/ClassPathUtils.scala"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"db66dbab7ff6dadd8719f9686793f230d54ab148e80d75a41b4c233d269f8d04"}},{"ruleId":"X18","level":"warning","message":{"text":"Disposable created and abandoned in the function that made it: \u0060Files.walk(\u2026)\u0060 opens something that has to be given back \u2014 a file descriptor, a socket, a directory handle \u2014 and its only use reads \u0060.iterator\u0060 through it and drops it, so this expression both creates the value and is the last place that can release it, and does not. Every call leaks one more open handle until the collector happens to reach it: \u0060Too many open files\u0060 under load, and on Windows a file that cannot be replaced or deleted while it is held. Open it with \u0060scala.util.Using.resource(Files.walk(\u2026)) { r =\u003E \u2026 }\u0060, which releases it on every path including a throw, or hold it and call \u0060.close()\u0060 in a \u0060finally\u0060."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/utils/FileUtils.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"a62d7abfe170299c53037986042ea0ffc6e38e0be913c62b383c87e9341f050d"}},{"ruleId":"X23","level":"note","message":{"text":"Diagnostic log message is built whether or not it is wanted: \u0060debug\u0060 at line 410 is called with an argument built by \u0060parts.map(_.toString).mkString(\u0022\u2026\u0022)\u0060 (line 410), whose cost grows with the collection it walks. Scala evaluates a call\u0027s arguments BEFORE entering the method, so that join/projection runs in full every time this line is reached \u2014 and then the level check inside the logger discards the string it produced, because debug is a level a shipped configuration normally leaves off. Nothing here decides beforehand whether the message is wanted: the logger takes a built \u0060String\u0060 (SLF4J, Akka/Pekko \u0060LoggingAdapter\u0060, \u0060context.log\u0060), and there is no \u0060isDebugEnabled\u0060/\u0060isTraceEnabled\u0060 test and no debug flag."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/files/InstallPathBuilder.scala"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37d252ab3fbafde5d67f3993ebb04912e4cab14af7431963683833fe2e968ce"}},{"ruleId":"X23","level":"note","message":{"text":"Diagnostic log message is built whether or not it is wanted: \u0060debug\u0060 at line 419 is called with an argument built by \u0060parts.mkString(\u0022\u2026\u0022)\u0060 (line 420), whose cost grows with the collection it walks. Scala evaluates a call\u0027s arguments BEFORE entering the method, so that join/projection runs in full every time this line is reached \u2014 and then the level check inside the logger discards the string it produced, because debug is a level a shipped configuration normally leaves off. Nothing here decides beforehand whether the message is wanted: the logger takes a built \u0060String\u0060 (SLF4J, Akka/Pekko \u0060LoggingAdapter\u0060, \u0060context.log\u0060), and there is no \u0060isDebugEnabled\u0060/\u0060isTraceEnabled\u0060 test and no debug flag."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/files/InstallPathBuilder.scala"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"ada528e23ccb4b60371b5d4cef0e92dd612c32bcab974d7913b51e14d6169016"}},{"ruleId":"X23","level":"note","message":{"text":"Diagnostic log message is built whether or not it is wanted: \u0060debug\u0060 at line 610 is called with an argument built by \u0060Thread.currentThread.getStackTrace.toSeq.mkString(\u0022\u2026\u0022)\u0060 (line 610), whose cost grows with the collection it walks. Scala evaluates a call\u0027s arguments BEFORE entering the method, so that join/projection runs in full every time this line is reached \u2014 and then the level check inside the logger discards the string it produced, because debug is a level a shipped configuration normally leaves off. Nothing here decides beforehand whether the message is wanted: the logger takes a built \u0060String\u0060 (SLF4J, Akka/Pekko \u0060LoggingAdapter\u0060, \u0060context.log\u0060), and there is no \u0060isDebugEnabled\u0060/\u0060isTraceEnabled\u0060 test and no debug flag."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"36bd7aa82cce8b3e1c07bad1a98fffb0ff51f690d63527e55f77889a0181850e"}},{"ruleId":"X23","level":"note","message":{"text":"Diagnostic log message is built whether or not it is wanted: \u0060debug\u0060 at line 503 is called with an argument built by \u0060destinations.mkString(\u0022\u2026\u0022)\u0060 (line 503), whose cost grows with the collection it walks. Scala evaluates a call\u0027s arguments BEFORE entering the method, so that join/projection runs in full every time this line is reached \u2014 and then the level check inside the logger discards the string it produced, because debug is a level a shipped configuration normally leaves off. Nothing here decides beforehand whether the message is wanted: the logger takes a built \u0060String\u0060 (SLF4J, Akka/Pekko \u0060LoggingAdapter\u0060, \u0060context.log\u0060), and there is no \u0060isDebugEnabled\u0060/\u0060isTraceEnabled\u0060 test and no debug flag."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e8207d71a405ae468ea4ec2e409d01b2e6aa5ab964c305cc8d554201448f92"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060g.title\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"898ccf707cb923c4350a48cd1761c05514b9e3dd7dd6bf901fcb87a8be3adf12"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060html\u0060 is text this program did not author, and it is written into the text of an element through \u0060innerHTML\u0060 with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"e338fcf907cd96988e8a7bd74e9fb9076116a2649253248ef4b375ca07afa2e3"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060title\u0060 is text this program did not author, and it is written into an unquoted attribute through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. HTML text encoding does not help in an unquoted attribute \u2014 whitespace ends it; quote the attribute and encode the value."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"50eaef64ecdb6b7b11bcd5a2554137872d3b1a61c3fa57858c50d07a9c1eb622"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060btnId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c4fdeea3dc1171757375a830a7c0dcf6671ee4e2e24eafa40ec0584c5cabc4"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060rowId\u0060 is text this program did not author, and it is written into a script or style context through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. A script or style context needs its own escaping (or a JSON serialiser that escapes \u0060\u003C\u0060); better, pass the value through a data attribute."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"81f7ea9f08ff4049c039d40e3e749c314995e0f84e22aa9d19b0fbb38e5a6717"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060linkId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ca3d3f27d1a4c2906f9e528297813601ca6c84071d676a5acb1d298eaeefd07"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060e.module\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"a03008890ca015855e6e01c318c6c1b175930d573ab287167598eec9bf8ca2d9"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060topDisplayFrame\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"55043d1db49372ee30b3ff25acf7766f3cfc48842e684cdda5cba8e1e755e657"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060rowId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad37d429bf93c7762dd3b8fb1a6a6ff9b3de39a8d0b1f9c69ba9641a9bdabf71"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060desc[idx]\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"0acd8d51868c86f0265b334559735fc417dc491bb7aa630f144415e3e49d17ab"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060title\u0060 is text this program did not author, and it is written into an unquoted attribute through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. HTML text encoding does not help in an unquoted attribute \u2014 whitespace ends it; quote the attribute and encode the value."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e2241ccdeb70799b472d45b7f0a142baeb19d71e8bc1f6c7e2c8c29cb85ce07"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060btnId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"673c39ee2c29c9ad357b02ed124727308778386a6bf2b69375d41e8fcf3c7b26"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060rowId\u0060 is text this program did not author, and it is written into a script or style context through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. A script or style context needs its own escaping (or a JSON serialiser that escapes \u0060\u003C\u0060); better, pass the value through a data attribute."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ef349b804c998682bd06aacd01ba51d23adef36c401a6ead2a85d7703ae83a"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060violation.owner\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe29ec8b436751ec38c0ac6b34e3bf0e94d57813ec5a34f10f75ab4e841b1de"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060violation.frame\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"3715c466b2c12c00e155104027cc5413db5a041f30b6708b795a6d85854e53e1"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060rowId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"876ca979aa9d5caff7dea142c2815279c4cd1dafda4893c519f60c6d49b5c92f"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060inner_tbodyId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb674497c7255afd5ccbf9d70b923a8fa9203dbcecae2d61e04d3dccdd83a99"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060title\u0060 is text this program did not author, and it is written into an unquoted attribute through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. HTML text encoding does not help in an unquoted attribute \u2014 whitespace ends it; quote the attribute and encode the value."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad169515e393b47613b220a8b4000f1346b53945b736a527e4bd8b26fe1df088"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060btnId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"2569af97b793cb722e45f5331da435f319b443f1d05e82dbc6dae82be5f62357"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060rowId\u0060 is text this program did not author, and it is written into a script or style context through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. A script or style context needs its own escaping (or a JSON serialiser that escapes \u0060\u003C\u0060); better, pass the value through a data attribute."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"7160803ec4e2d601d01e4d7a3e35ec0a2b62de295c482df2b6a98fd41cae2e77"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060violation.owner\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c7e8d247ab8c1af46d8c7b820539a00a73cc3a2ab31927266132d8d791cbc8"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060violation.frame\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fb796e5595f03ad767c94a9c9e0d50d071f0668942b4e548b8d2488f943269a"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060rowId\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c6906be693b8c75e3f48ecea409b2691db3686b34da5ae9afb1b944f6a7b015"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060desc[idx]\u0060 is text this program did not author, and it is written into the text of an element through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"a05004e1da20f7ef27f6bc6094a0483ada24827691876e7f6d11af45a967eac0"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060owner\u0060 is text this program did not author, and it is written into a quoted attribute value through markup built here with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5203cbf19e06de40b6dd7163b43cb56e73367406aa673ca28caf6782dc89447"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060html\u0060 is text this program did not author, and it is written into the text of an element through \u0060innerHTML\u0060 with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"476045e33b0cf4d6cfa13417368ec7e787a73a4f62cfaa9c01b45943b5d560bd"}},{"ruleId":"X24","level":"warning","message":{"text":"Untrusted text written into markup unescaped: \u0060html\u0060 is text this program did not author, and it is written into the text of an element through \u0060innerHTML\u0060 with nothing encoding it for that place. Whoever controls the value controls the markup: it can close the element or attribute it sits in and open a script of its own. Encode it for HTML at this site, render it through the framework\u0027s escaping output, or sanitise it if it must stay markup."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/resources/js/gridprofiler.js"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"f267732f4a45da71f32206d11ae818e8351e2ba4e188f53f85144b5cea6f532a"}},{"ruleId":"X27","level":"warning","message":{"text":"Collection is structurally changed while it is being enumerated: \u0060this.threads\u0060 is enumerated directly, and line 542 calls \u0060this.threads.add(\u2026)\u0060 inside the loop body \u2014 a structural change to a \u0060ArrayList\u0060. The loop\u0027s hidden iterator is fail-fast, so its next \u0060next()\u0060 throws \u0060ConcurrentModificationException\u0060: every pass that reaches this call ends the loop by exception instead of by running out of elements, and the remaining elements are never seen."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGTraceReader.java"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3f95a681f153a5779e0985495cea4ed1f984d30f1852f4a251b16eb3994da06"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BSPTraceListener.scala"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cb359ccd15ae4ce3312756fb8651db6efb1811c17c2988269ac144b70d94f79"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincCompilerFactory.scala"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf9762caadf9c44bfaf12be60e46a11cb7f66cbce3d086cb5253dff757245667"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(e)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ResolverDefinition.scala"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"35063117ed109ad56753e9b6e0369b1dc59c525e453bef7b974f969fe5af600d"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/compile/ExternalCache.scala"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"f10e4de05bea581fc4bc31fff6d1c29897cd71157d26b05e52f83cecf86e101f"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/crumbs/Properties.scala"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"f51ca894fa15ea8221e96b7b4c05a38d883d3c0fae7c42bc7f7bf2cd353355dc"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/platform/util/Version.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"db0c18824ea88eabc9c4fd4bbf79966fa7079b107d743906cfe150bf32e1d7e9"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGSchedulerContext.java"},"region":{"startLine":900}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e215cfb7f4749dfa5b6166f51539f97b4a69cdfb9615caf7d9212887934545"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/TweakTargetImpl.scala"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6ba11c11ddd0d45b915300e4743042204a2fdca64e4497c507e6d927194c4ab"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/TweakTargetImpl.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ff1cf23e0e1e32adeaf183a42940ef4222ef990524bd63833c8e2bc38bfeea1"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/ScenarioStackShared.scala"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55528df2d6d2b15f12833f825126d2c0774db4be848168a57c386538509be29"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GraphEvents.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc9d09f7afb6fa8725f2a9d6b063a2618ae01bd4452b6e87769e5deae033deff"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/TypeInfo.scala"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd9930c245eacc0102ef0507be3837d2b07541695c5757959e2aaeaee3eb3472"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/relational/tree/MethodPosition.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"a81bddb85b28872fc929c2f801f4b1c11c8a52cd6ec996cece5a272021884f09"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case ex: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f8d34f54fe1052544bca3b6150480ceac1b2b0dfbe968aa2ab70f9d0c52bf1"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case ex: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/Utils.scala"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"66306a017579c7aa5683016e6ed8ae35fb988b38689b9710b40ffc507df156bd"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsControl.scala"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"08b730369ef859890abcbbc3aa7adad91ec9e716052529dc81f2ff4d31045036"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/stats/AppStatsAllocationCounts.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3920d9c4e486a598babce50ccd4a2142d7dd5f5243f42eac08f09f23f2d389a2"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/util/DiagnosticUtil.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce0a27dc290b78dbaa203ddb43b0b09d3045e312ef442d52c2337afe8743106"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/platform/util/DiagnosticUtil.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"545591d07332a48e28d7aa518d1e2c57528b729f440c337be2b44e2ceee2ff57"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(ex)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/dsi/protobufutils/DALProtoClient.scala"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d91a5196d1ced348e42a4b6d4ad99d17b2382a64c95f4dc097487200afd6e9f"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/dsi/serialization/bson/CallbackObjectId.java"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"97be4f450f9f7cdb8a37d853299cdcef878c8a73798c1cbd5e6e48a4f070d7f7"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/ProtoFileProperties.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fd8a5c14ada1facb4cee7fdc2ad8ac7a7045beed588258919ca7800ef291973"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dsi/bitemporal/proto/ProtoFileProperties.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbb391758c271f3e53f5fb77463e2d3704a5f3ec9f08284a0a0022da623cdc55"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060catch (Throwable)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityagent/src/main/java/optimus/ClassMonitorInjector.java"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3a170fdf47e82eaea5599ca60968636208231870fdceea1725ae7293f6f2914"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case t: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/entityplugin/src/main/scala/optimus/tools/scalacplugins/entity/EntityPlugin.scala"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"f69419c41842b462f2cdcdf7e44b50157ac780ffe6fd3a4840f8cadd73b354bb"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"56ff75fd39c0d3e1b94c919a7ce4817090b3176b360d204e2216bece34e8c00e"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6a803eb5af6ae000078985070b970364aedaff261cc27fd125d55c14c6a0ce5"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case t: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bb8bf0c6607c5e3ea64c2f7e5ab7c4d963b0fc40811635d37d89fd2ca8c869d"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"410c2ac24576d64fca456764a274e2cd5f9dd38e22eaf947e9b36969a748bdd3"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case t: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/AsyncProfilerIntegration.scala"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"f53ec012d2684383745898f518539b87b3345013e37bc592b2b7ae710d52589c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/heartbeat/WatcherProcess.scala"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ffb092f65f7dc9fa81194fe3efc938d2a6be63eb4d55e31a8d03ae536f1a35c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"b897b46bb0bde4ddcdfc11c7c9a46b49331ac6ee45f2ef91da36629efd0789dc"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/platform/util/JExecute.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae23d1bbe341b87fe4d4719b50959b0506c7ca6f9e197d71ffd28a76d6e54743"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/platform/util/InfoDump.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b529d5b11614cfee5ed5f9425a67c764a747bdb992edffa0a08747575cbf70"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case NonFatal(_)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/util/EmailSender.scala"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a5d89dc745a2e26370670d32fd203466e3d1079a089b5f6d018b53d71570fcf"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/DebuggerUI.scala"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"bad1d34d5fceb5f3112070d9debd79f756d86c20cace165071498a5146c9ae70"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ae01274460b3d857ef434e4a71ed6185d8f8d0c645a33d0ed1c38b061e50a6"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c1cf2b9d04fe282c7fbb10a2408094a08a2b0a1f746bc8429b66b1ba8434e2c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5673085f5560dc86a58b0b5bcfd2b73f82ba0b5d28d3d6fd51147afc86fceec"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/TableColumns.scala"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5da529237c688f39710460f7b210623e6bd1cb56a46994da940100298c579a8"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeUI.scala"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"6210ac2120d9ebf9bc1a5ceb4870e64c81295792cfdfe481adec249172465605"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLineView.scala"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6ed47e5e6028fcc5f0b9641393031ea71de902c20d718f845304537bf8285be"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case _: Throwable\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/GraphConsole.scala"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e27668ce4eb0c112faee1fd6f3c2f201ab2d9a405862dca5c4565a1794edb7c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case ex: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/priql/src/main/scala/optimus/platform/relational/persistence/protocol/InstanceFactory.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"007790e842af18f34d39acf0dd6a612a7246907b966cb47f19739408a1e6ca44"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060case ex: Exception\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/stagingplugin/src/main/scala/optimus/tools/scalacplugins/entity/StagingComponent.scala"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"8660ceec4459ab1c25639a328bb9c9d1bad8bb586f11632e5f8f6e546439a61f"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/platform/IO.scala"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"71b3aa087eee2bb07754e749597a3abc1199d296bddbaea20134f69e11af9842"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060catch (Exception)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/os/linux/redhat/RedHat.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b3b78bbc4f4597bf27898da0e2e1356a1d8d83a247a21e8ed03639702f0a775"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/process/LogOnlyUncaughtExceptionHandler.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"27b17c990870a6f3429d190e98757d6b8b96984d09b2f8a71e0335eb34910160"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/process/LogAndExitUncaughtExceptionHandler.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"702e4467745529193b79f2b7c9b19cbc91caba9dbeb71f135b4beafc768757e3"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060catch (Exception)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/net/IPAddrUtil.java"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db1c3edf57d918ec94e245cef916b2d74d60724737139332bd1d00a8c1e74ce"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060catch (Exception)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking_utils/src/main/java/com/ms/silverking/os/linux/proc/ProcReader.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"96fa8c821420cf8aabc07434956edfd86164334ae16d79e5b74fef15a5d8f22c"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (caught, then discarded): \u0060catch (Exception)\u0060 takes every exception and records none of it \u2014 the body neither logs it, rethrows it, nor even names it, so the failure is discarded as completely as by an empty catch and only the substituted value survives. Log it through whatever this codebase already uses to report problems, narrow the catch to the exception this call can actually raise, or say in a comment on the catch why the failure genuinely cannot matter."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/bootstrap/src/main/java/optimus/stratosphere/bootstrap/config/StratosphereConfig.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55f58365fa72c236c193e3dc0a3bb8072ce38ffcaab1f84813ee794a4f1bf9f"}},{"ruleId":"X3","level":"warning","message":{"text":"Swallowed exception (empty catch): An empty catch block silently discards the error \u2014 failures vanish with no log and no rethrow. Log it, handle it, or don\u0027t catch it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/common/src/main/scala/optimus/stratosphere/utils/ProcessUtils.scala"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6115b5c8dad2d1bab32ca44d2ad1bcf397d3435828e49244c906a52cb730741b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 64 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/oci/ImageBuilderDelegate.scala"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"086216c6817f28bfce4fc6d22abcf0ee6d635868c6652178bb6b216d938fbd38"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 89 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/resolvers/WebDependencyResolver.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"1296f1676e3ff81ddd5b065dccdf94e240290d8691daa0990529011c69c11f94"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 339 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/format/src/main/scala/optimus/buildtool/format/ScopeDefinitionCompiler.scala"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"0020fe814bebe22261b359ebff60b380f385537e1a3e4fcb3a92e1b49c8a096a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 27 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/DiagnosticApp.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e33178fdea50dec28b8243869dee39b308cf50bf0df159f8e3d9d4d1ade78b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 39 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/runconf/src/main/scala/optimus/buildtool/runconf/DiagnosticApp.scala"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee99ff6f417c5dc7acd75cf9bc7b415768e855bf0f5b38376c89c5fd413a34df"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 135 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/ChainedID.scala"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"5017eb8c66913bdedb8f728c38759d7a1cbec0cad7a9d189de5696d138eba5c6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 138 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"742ec5140b53aaf68bf66a6b4d3c55fb2182fad35769d87611b48d5110177bab"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 166 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9be07e76d36b3013888bae6013d408f96692931787f75bb59f0329c0258556"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 247 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"4716eab3fb8939a28cb83c5d89b4b1379497307e9275176bc5af0f0fb80dbd0b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 269 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2fb09771e7a19d4df78e747b88287d585ec2c9a2bb048b51cc16947cdab1450"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 317 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"268e807e3e24a41a75a0197d050884294752007456e40e82cab8d84e771fad20"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 332 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5bab3b30f110b66cecf876b3d5a967b9747bfaae483c9ea84b96b9df8c71d53"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 444 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd8fbf46640d3e06e2353c51d162d53ca9cee7d13116dcbd8ff785d205de06fa"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 527 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ebff4ccbcb0abebf2577fab5fdf469c72991f7e12e153bc0e2229952583dab5"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 599 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaa18725b693b9739a1fd5024a2a9d2db576222934f47b1417091ff7765931a2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 610 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f92afbff92683f0bd04b2a2849aacd65ccd03bc40f97daa44e256b2c7588ea9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 626 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8bb2164e4f3349bbb9a2a53c3aa72c24c19308ba367c4c6221922d95bf2cd19"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 710 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da9c1fad475de7ec80281f28b0118b2ba51c2c4414d8125d99095c41fb188bc"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 731 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f19a8129e60143715e40f47ce21d3277a96ff0b8cdb188d0383fac1704eaca3"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 738 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"33aaf997cf5e38a8d6824d006b061f6613723d5341d704e8a4e96411873113a0"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 760 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d52189dbee737f7de3e18a6989c6f530021fe287151b19f1ebad9a011fe828a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 772 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"83c82839334455af471f4efa0e81ac4e1b63ecc95d8ece6efcbbe0499adbfe77"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 777 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2c45f37d4686bd2e7e810d75ed1947f014745fb7a0a2afd6e4c12bafe6981ef"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 799 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"1479610f9f824cf7af431af37585ffd5d546d8c54b61d4134547f2bed86e8fba"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 984 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":984}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b2fbff414823ac008ddbb070daff35ba38d618db9ef7ccdb23d9427d54e3c38"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 985 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56d3ba6e5d6534b262cdc5afb5641c4d3906393d13bedbca85e6f87ff1527df"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 993 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":993}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6fb90270ad401bc893ae5f72f5dc21a17fb966fb7fffce4ec42ce01f30c6b7b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1034 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"55a056443ac06d129a6b232ae90526f0031df856196783e75bee64728dcf4caf"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 1082 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1082}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c56cb3f3851270899f35438b827d1e5e64cea3fda48fa1cc1931f14c466f3ba"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 1085 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"62320a277d3e1cc72542caab27009140a06b75c513d021c7608374087a6b1224"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1095 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"37725e35334021c8764c40d9377f209a2452bb3568d3aeafc6e54bf3a7e61edb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1119 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1119}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c1ef23e886b4c9b340f5e18c8ddaa50f0448c7feeaece092381e41def62fe1"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 1136 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1136}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e8ad60859067f28779de8f1af25ad2fe1dbd6c1019588cfed8321bb36fbdba4"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1147 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f380c5eb01d0237ac7f1924032ac4728d585b85255d4bdaf44650f2dd6aaa9a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1152 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/Breadcrumbs.scala"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de227c435fabfe87b6356f79d89564badaa58f94fd614a81a302c16449a5eff"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 22 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/crumbs/CrumbValidator.scala"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"914eba77c8a2c2e3fb64203807bd7fe40b6c2a95f5a06f4fcf32e999f912f914"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 58 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/filter/Filters.scala"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec308469e48d16ffd51de06d1ffc3a72128f15d3cf13c1ce14d2bd6acaf0fa4"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 63 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/filter/Filters.scala"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"82026d06deb79884de676790d7b1c125eba669875986b791378c5222f92ee254"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 69 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/filter/Filters.scala"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa0ebe66d239e1b53dedace4c2de1f29ddbfbae0d1f8b604438fecf050232927"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 78 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/filter/Filters.scala"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"9706a4e7d4b8b79138e3bf3e0d2fd5441d3e9ca10c136d17dd88ba5422862235"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 81 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/filter/Filters.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"86e592ec415aac271feafaee0abdc00fb55c5bbd94716389c53a053b923d8051"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 156 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/graph/CrumbMerger.scala"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"38755568af3428ad92aa8042b5c73e05b008fc7e306765d2f23fef37be3846df"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 199 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/graph/CrumbMerger.scala"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d3b7cb6c784dbca6244b10285046207787ee89cf7471894ac059258579e3ebb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 62 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/util/HttpTailer.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a825aa2b34d25353014bf2dc21d99c372adfe09353db82d19fa140586cf743"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 73 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/util/HttpTailer.scala"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bb375cad9a38431fd7a081509d9ea5c7f672aa446960766f1305e1a66108386"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 84 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/util/HttpTailer.scala"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c6102b429acf6443e711fc8cdf125d4bea85db57767811a33a9ec87c5b3eb9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 110 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/util/HttpTailer.scala"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ada7b29c966c552c0e2f5d8a4baa16629cf064d8d93ed5fe2a93b39f052aeae"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 138 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/util/HttpTailer.scala"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"a462e55229e7fbe39777e3bff74f24ab71ea3edbc04a9126cb9c8e4862964f2f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 90 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3f29fbb896380df4611958e61c76d6cf4f457233c7405ea541be42e27729ea6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 94 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"535e5dae3f17a4ae34f0de0850fc811a1f7ddb25de11d1a5e8000966ea16f039"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 115 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"eebdb26ef24bd43dee84a82d7f32b11b1151d42d06ef8bbc7283f8c90881cf22"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 141 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc5336d80dc5daed53d8a3127f8ebd50efeec98c2803a89ffc766cd506384684"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 146 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c44541fc7914826a014effc212379ff3497605a5b7e60101f8ecd49e3d27dad"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 160 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1febe6de6ff577edf70d1306286accf3424239fd64d488fef357b1a52889c07"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 174 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd2e556073e153119b294188e346453c3f65c0f483f5cf0a778e15c212582ad7"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 335 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6dc4b635e2938aa57b58bb4cb34d1895232b92be7c080e50c3f42aada469273"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 355 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0449e786f4b90592fdae4451f84cb91e0fa909b8add41539eb2e50c6f068beb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 371 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"388842e0313d4cb530e8cd80cbf686f9246cad10d38d6864b010283b45ca33b2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 393 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"c46f464c99482ea58478013c72276177f2da913e583fd425b41266dfc02f8df7"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 410 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb85b32bbcbab096617be4f1a55f4e9fe9bd5125e6754a05f95ed6803fe4760"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 470 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/breadcrumbs/src/main/scala/optimus/breadcrumbs/zookeeper/BreadcrumbsZkClient.scala"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"141fb0d986b5fc101946885ec8162d890323d872c1c57e331cedc84d225b4de3"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 30 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/CollectionsHook.scala"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"828614677fe147856f835938570b01cb11dca7bbee3918e54be983b5b3ba156a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 37 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/collections/src/main/scala-2.12/optimus/collection/CollectionsHook.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"c066f5fba98628cde7066820f401866c983b57a19d84f1a6676ffd22e1bbd95e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 405 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"6817ff760839a2021a2bda02dcf46f7d80d0693afa8fe360df47c67ac49dacd6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 443 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"37725950e68734281d38f9202af13a84ff02f0c409c953395339740c855e53a7"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 524 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bdb14cf1396400a11a2d0a7d56efb5604380f37143002eee5ba0967113fa47b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 551 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b49cc59b24df8fc1c060ac071ee8fd0596e94fdea500c57b965abb18bcef14"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 571 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"da99f66dd02682987bf795c39f8b0c845e38bfefedc4adc330738a67df0feac2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 597 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/configmetrics/ConfigMetrics.scala"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b287f86292341098ad91ef4b252352ac42c1349417dc0c8d5bcbd5a2756cef"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 133 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/ProfilerResult.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a1932eeaf43689dcba9044df7e030b4c4f09d677b3590da1b98cfd267053213"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 629 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerUtils.scala"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e54e5fe7b024ecd45b649c44bbeb9f73ee7e2bafc2f6686ad2ca3d5ace91aa6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 632 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerUtils.scala"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b5619391a8f7ad1a02d658de1a1f1e0c6ff738fddc94bcdfee9c2b66bc7d58"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 86 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerDefaults.scala"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"6356e9c5f8f25018e741887588cdbb7baaf48af9ace91c5d4aa2d685b223dc1b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 424 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"51306e5b006779b0bd5b86f0c042128fc9ed98a625654a975961b117b0fe5eb9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 430 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfilerData.scala"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"218a7c793b241953b71e7cfc50ebdd01810c47be1313cacd67436020cc279c72"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 824 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"977ba08390f547e9d2814ec72cbe8dc2b3f981e30645aa83c7c4b828cd7bad1d"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 846 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":846}}}],"partialFingerprints":{"codehealthFindingId/v1":"f45a15f7e9576b5444bbd543333088106957b04391fa965ab57a86c1cc25176d"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 850 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"66411cee456c648e77cc5638bbf864242dff2709325f7ec9f9da06e21e118ca5"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 851 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ed1eeb4b8dcbe9bc6225189ba7608075bf702c30e9c507b1f8d8160061a4e60"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1365 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":1365}}}],"partialFingerprints":{"codehealthFindingId/v1":"265b276382ea55d4c3793b54efb0161f434c415c036230333a0d8386b8d52364"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 1368 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/gridprofiler/GridProfiler.scala"},"region":{"startLine":1368}}}],"partialFingerprints":{"codehealthFindingId/v1":"deaf1bf70ceb8a82247fac585fcd9034bce5f5c224a37f57f168d3aefdda0228"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 48 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/heap/HeapSampling.scala"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"d841bf1601c267b2ea3086ae0c6a4d6ae1350d336690f9bfd29add20310f2142"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 55 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/heap/HeapSampling.scala"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"12bb8ffdd8c670a50f490c199dd2f8249b3bf100548f2372c3bd262b73840670"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 81 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/heap/HeapSampling.scala"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"07de40078a46bcbe02aca1cc2f41ff66a73bb7feaa5d9fa8f1c71aa6f21e8611"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 139 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/heap/HeapSampling.scala"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"f548c84a3d80417705a6291a9fc3a75a5de7e5fbdb232f725a1b419fa4766604"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 132 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceCacheManagerImpl.scala"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"7effb28290a12520ce25176e6c1cffc9905dcda749c21b1efa5690a8bb335aaa"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 133 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceCacheManagerImpl.scala"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2052e0a087f24bb7c8ab46f177c063067aabed9b84c70b028a92232c04e3402"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 134 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceCacheManagerImpl.scala"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"76dbcbac0657ba1064700c9df669eb1743e6598475b2ac98d0734592af3da9ab"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 135 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalSurfaceCacheManagerImpl.scala"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bcaa816f35941f786a7078981589d4d6aa3a0dd235e3a2ca247f1440bd47549"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 569 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_client/src/main/scala/optimus/platform/temporalSurface/impl/TemporalContextTrace.scala"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"43dfe18dfb35a26343472707f8c87063821bc5e1bf38cbab69cf0e680134413f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 47 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/scala/optimus/platform/dal/config/DalKafkaConfig.scala"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"5410175a0db09ad6e3def639c5aff388f4bcec1be5a689c22f6fb8667040cbba"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 494 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c7607f4f2c13ff86f6f70e460c0d154d4abd225ba45152468c95335d280716"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 536 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7fd423abd82c541681af97e77d1805bb5e8bf88caf27284433448097dddc24"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 547 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b7aeffd5535fdf19f9e517e4cfebe2ba4536f3ed8f67c624fca024d2c24bc21"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 549 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ff3c9c86e54844dcfcd70c36d52e951312f8b782867245d3496227f534253e9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 555 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"839ec0cdfc5caed83484f001b06d6ea261360ba71a1fe61016ab9e892ff6678c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 739 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d95a406d3f00bf983252a8f15844159b15ee4ce7395ab6dd45b65ec2fec797"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 747 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":747}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5189b50ba7c07f72722dd59781d96ac1c927d3b183c3bc2bfa3770a35b2965"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 825 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":825}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f9c940386d2bb58dcc60c00075ea1d423387512914b388fe8cec1150d4b6bab"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 834 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/kafka/CrumbPlexer.scala"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d0cac930d620c52a6449fb8f8cd097237f64565f20a6f17a14e6fe79ab935dc"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 89 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff4b4cb96af6e6f433bfa8f015d9b834539117e6af3d136e1e0572a971e5d315"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 503 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"e34f05c00d4cb5d3dcc7f11e170d56d78195fd4fed3805e0a345a5f63c855de2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 516 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c91237c391a489bab3b3e79258c6b14bcaaff0c24428bf6825676510f7e6bea"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 526 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/sampling/SamplingProfiler.scala"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"67fa83b7ea2ff05276c3d1a1561974c458c27597622f39f694c0f4c4a1320298"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 34 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/runtime/OptimusEarlyInitializer.scala"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0ed833c25e190ee78d3e4eeace21007ada9f4e35f1bf08aa0f009b17c8d18e8"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 38 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/runtime/OptimusEarlyInitializer.scala"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"42e2371956a2e8f75d76d1625a0aa8eb026021346d049561f553e0e65e2acb27"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 40 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform/src/main/scala/optimus/platform/runtime/OptimusEarlyInitializer.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"549175b28f0c22208d4234a1e1b430aa64f8e882ddffccb706816b650e53792d"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 72 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/platform_profiler/src/main/scala/optimus/profiler/ui/NodeTimeLineView.scala"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"b23bcf36e0193b1400c0c974b7e0016a65d9f18c447c8f91939deadc048c439c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 27 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/cloud/CloudUtil.scala"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1b78e8b2f96d5b4b315eb583bd5be8d3a1b278ec193e7f9fa1b058617ff787b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 31 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/cloud/CloudUtil.scala"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b1489d88ff3e55d6f0dccf59aa767f629843d70b082a604eeabe9c1ca8097f6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 62 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/crypto/EncryptorDecryptor.scala"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2b1efa2b975da2516bb69fb6798f4db59ec7f5ea3aaeaef72f58a49343100f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 75 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/crypto/AsymmetricSymmetricBaseEncryptorDecryptor.scala"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"6948001f119ee9c166edc118ea6f33845ab9a53a4e744cc31e3916af0b0c4f64"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 113 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/exceptions/RTList.scala"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3ce0f026fd72735ffee88bf326f16549752b61b3d34618f616355df839d245c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 183 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/exceptions/ExceptionProxy.scala"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab0cbf2b42969b89bdd118761ca06b15f20bd8067ed94b06722839802b80698"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 37 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/logging/ThrottledLogger.scala"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f35d4689025202ba4bbd45c95d7cfd630a2dd2c29338b292301c621c528f9fe"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 61 is handed an interpolated string as its message through SLF4J, so the logger receives one finished string \u2014 the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. scala-logging\u0027s \u0060LazyLogging\u0060 logger takes an \u0060s\u0022\u2026\u0022\u0060 message apart into that pattern at compile time, so switching to it is also a fix."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/utils/src/main/scala/optimus/logging/ThrottledLogger.scala"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac6f0ea0bbd84dddb484a3fb86d30d9f9db044dfb88a677993b96f68b4b8d6c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 185 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/registry/ZookeeperRegistryObserver.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc0ab76837fe207edbdb05c45ec0581af0218bb26321b289e0d7adcfdfe6e701"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 57 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/IdleConnectionHandler.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"016442e5e0725e9bf56ff67748ed00f03ffc579d2090273cd1dd05fdfb8ef013"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 488 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/DefaultConnectionsManager.java"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"e594fac905e74ebd291db0bf8467c41004f23466fad4e44fd84c74d446b306bd"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 497 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/DefaultConnectionsManager.java"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"d51362c5142d5b1490ea1b5cfed0eb8421c662f5c44b066a36243888a3d8fc65"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 502 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/DefaultConnectionsManager.java"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"847cfb98296323ff71cb3e6797c4498d0120a0ed5184c1a85a775500b71de028"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 506 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/DefaultConnectionsManager.java"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"df44410b881eb1fc121dc9908294b976e3bc6e1c2f91550b9f89a8aef9e1012f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 517 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/client3/src/main/java/optimus/dht/client/internal/transport/DefaultConnectionsManager.java"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"613be831724b7ecd81542d76d9e2a3377875e5a070fb4357c867017c9a0fcdd4"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 67 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/internal/transport/SslHandshakeCompletedInboundChannelHandler.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"4364e15236d3b056fffe867f107f31b91ac1f09b8036083883d4eb9ab53ab3b9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 79 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/internal/transport/SslHandshakeCompletedInboundChannelHandler.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"4917efcde2fb3cbfa75359ea7669ee8870d13fdd8383806845a5f026901552f7"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 134 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/internal/transport/SslHandshakeCompletedInboundChannelHandler.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcfa935a673d751a1de3dfb51c85d136bdfdda7ef3c08d3f4d1c75fb674907fb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 107 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/monitoring/gc/GCEventBroadcaster.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb08e71b47cfdcea66c255d658d8ac32edaf19e2aa7e69f1e80ed9a52bf79d6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 139 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/dht/projects/common3/src/main/java/optimus/dht/common/util/monitoring/gc/GCEventBroadcaster.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f06a63902cccdb70481781c9e37ab5416e86e865d644308f842ff520a5ef669"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 46 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/ThreadLimits.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f285c9b9b7cae9a6cbde033285c453946914550d69b6a87a26fd126669a8280"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 49 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/ThreadLimits.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"36054b7b0047b0ed1f9be6305dd076aba6f272d38310d427b65235982937360e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 61 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/ThreadLimits.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1e8eba5a3ed48274cfd4eca111403df44f0a289123f93f4ccf211b230b8101"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 65 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/ThreadLimits.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcfc97d06b04fbcb5733adc451a3920e21917099adc403296b218102d4d94d4f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 252 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGSchedulerLostConcurrency.java"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ad8cb745c55b8f7ede9e404e9935fd30f8f8a43dbcb190912fa4e083236488a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 892 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/OGSchedulerContext.java"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"c334fcbc6e074b1ec614261416cdf9fdb996fe9e8491496dc90533ecb1e4222d"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 342 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"ced96feb68fdbab029ee76d8d89d90e6ca863d52d2c30a270c8d20e22c217a9e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 369 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b5f359f2603a4c1c11d7ef2828cfb2f6e51ec509a107ba66587ae33c923182"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 377 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2daf9695f363f64d86df14f2cb8d20b767b34efc716656af3ea93ecdc060626"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 397 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b27ed90bd68e223919047a54cb017e09f7e2422fb7e5d549bf44513c76d73c9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 471 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb0a51ec2c394dcd3e44b1a613d14eeb1bcf8012239b5bf5f02f0e853020cb95"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 487 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b48e8d43bb8539a0e72061f978e20b4da33389f20db26301678047a8f522673"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 512 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc3ed80a664b273762e576bf250a0af16b0c03e6c367e20ec9bea9d107f190f2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 606 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"203ec170e8a43eb65b6405c76bd3828494ebd0aec3046d4d8dbe53e193eb76b3"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 634 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":634}}}],"partialFingerprints":{"codehealthFindingId/v1":"11968f8e8908bef9804dded452ef376c8241c2e4f6073903a9554e842b154f64"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 637 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee54e488d6016542be5c35bf0bce92f2e05835b87afc82012e0b55ee395739e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 679 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee37ff424e2fbbf0faafdb4611638d6d4422e2dc417b44d75a35b23f4ee80ca8"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 883 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fcf4e9f5c1dcdff40f677e569aa5a7c92dc6c4d9c839f617247ddf8dabe185c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 889 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":889}}}],"partialFingerprints":{"codehealthFindingId/v1":"18d6f77784a85c9209f36b5b9ce49aaa444c250832406c63c424ea9819d074fb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 890 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d2a88ca1a330a5b510130b1ca466c3c65972bf68e5d5289a986cc3a2304fbfc"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 894 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"18959ce2ceec373bd0b265590499aac443edacacfc539a53e2bc244a7979be13"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 902 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":902}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb225fda11d35dac5e33f82c633d74644c28a2aa8fb91842477fac1784c32a3f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 930 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c68dd707dc0305f80aa955b41782ef526a415757f7e90de690169a72a5bb12b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1081 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b198cd2fab4159bd6bc4d7adac4ee0139eefe3dfc7fa2c21bb352563668f63"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1093 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"b19263b9b5c2c17314774249faa602cbf38871d72518754fb72102206d85e797"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1110 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1110}}}],"partialFingerprints":{"codehealthFindingId/v1":"14e928b7f889b62444691b6e192fe85cf6aa531c6fd62ea28968d24a1bbf8f42"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1122 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1122}}}],"partialFingerprints":{"codehealthFindingId/v1":"63e770fcf8c89cab6905379e2a115b4d18b85b0a1a50a802861c4b70cf97f0b5"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1161 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1161}}}],"partialFingerprints":{"codehealthFindingId/v1":"f137601cd211154015d28cf0256ffb46ac1347bb2342c57de54c09d2e18d145a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1173 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"543a5e245ca11f515ef4f8127a776d5efed335ec7cc80c1b798dc8e80490d020"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1186 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f7259119e27460d2c36ff8663d21673ebc09e0a43e349ba034769c32b28641"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1199 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"211b892b66324f9a27946a1a481fdd05638169874dfad7630b3767bf613cea72"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1207 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd38a1f22f6e3cf335e7e52c462eac69bd39a1fc9c6de59569e34e93a3f29855"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1220 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1220}}}],"partialFingerprints":{"codehealthFindingId/v1":"d124a19cbe7155281d129704a18ac43c4fdcbb921c3ec7130a8b0a0e679abf94"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1225 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1225}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b4c39580f81158276007eb932375489b1e58cbc094176561d2648251340912e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1229 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1229}}}],"partialFingerprints":{"codehealthFindingId/v1":"80293e9421796c99c3bdde0dfb1eea85cd91f07a0010a3550581a91e3e346533"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1234 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1234}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd377f2093f75313ba9c4eb1091f9eda009a09bf639bca83cae73e16460980d4"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1270 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1270}}}],"partialFingerprints":{"codehealthFindingId/v1":"db1cdb351911d9bfc5173ac6f201955659693f723ddc63c36fd1236d120c9cb9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1273 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1273}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4ecc3c877ce1c1f229b0df35cb995b2d8d8dd4bd8e895a60c7f9fe5f51df34e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1300 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"b11363ac9400b63bf6d8eab0952fcb8da16765cff469fd79cca5d38d0531a327"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1310 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1310}}}],"partialFingerprints":{"codehealthFindingId/v1":"88355c8864b6b46fca5b44af41e2c34bf8187aaf14d1eccf4195bcaa73d87e31"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1314 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1314}}}],"partialFingerprints":{"codehealthFindingId/v1":"f186e8e7de7be6dde7f98448a62fe372f6cabd86710ded14b2d1cefa2d53543b"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1346 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1346}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c2adf2145b42479ad2f35e2e4693a044a2ab474376d6b8e166340aa36f229c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1641 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1641}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad54b2298f1d67846aca2200399807f11364a4fc3e436248b1b65db337e3661a"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 1867 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":1867}}}],"partialFingerprints":{"codehealthFindingId/v1":"7829b90177612d757c0da411ac240f350e6e6c5b9ac5d5ca55bb1086f3ccb392"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 2075 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":2075}}}],"partialFingerprints":{"codehealthFindingId/v1":"11bb36d0d4e1c3486842a29414e30b6f02ffa5e60bedc9192de3bebe7aa92b87"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 2089 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":2089}}}],"partialFingerprints":{"codehealthFindingId/v1":"279a15c3875fabe1dfd6f6e7b036f369068920b0147a794efcefbee6ca06d2bf"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 2092 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GCNative.java"},"region":{"startLine":2092}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4768cfcae8619564c283a41480be5783a9d2b1e7bb411ea51869e56bffaa85f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 77 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/FileInterceptor.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3fe9789e1cb3835cc24168c2e487b1c9e7536eaaa80ed36b35a0dbd6e43c6e8"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 804 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"26538c82dd5f6b69aab79ed65c540ceca0e44220a3e2728af2ccad4cf607cdab"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 906 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":906}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fefad8c10c8b98bea26cbb3d3ccfa7be886d0ac083aedcc295309f8a2d3054e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 910 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":910}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ba53936ca176188123005ee85a36e22ba909cea98aff004e3b72159815dc508"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 976 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"18d7f9582894f0d9ee454e45cfa553c0a6ab410913341124649698300de5563f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 1012 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":1012}}}],"partialFingerprints":{"codehealthFindingId/v1":"612ad2f2c71f3860e998092ba3f0d41c49ce832c47a853f179d270fba463c9f2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 1014 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NodeCacheWithLRU.java"},"region":{"startLine":1014}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c1df103ac4ca47ac6c09c25c9cd24f23adba42d010a4231b6460df89609544"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 477 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/cache/NCSupport.java"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d3ae650961d93c7e3bd7003de4cd77482caf5830c062d81191f17f26d6a8d35"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 363 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"250d6df32280f78a149904960658148b38f4b224d99c80693f6939424ce02372"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 388 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"16f8b1b0b3c4b15ffdee216c62f7e2f74a20a790e7d2501b34fa1c54ee4ba1a3"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 390 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fb151f6ba67b354c6f862f3fff0076ac6fdcbc86a4626573364f585e82323ec"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 494 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa6c40baaf0f14c850cd0e8ddd06a07c9af5af9f14f64515c0499d6cf3908f2"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 496 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"671e9d51788470387ef2845e62eacd027132d6d62f5d2aaaa1ce18f65689c0e8"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 505 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"201195b2a9ac89848ccbb1b4b38b2f8bad3fcc3e2b575f61864b728c9c04370f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 507 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/diagnostics/trace/OGLivePGOObserver.java"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"697898a75adff3bcf810611512bfe12f33e78badd1b0a629e915210bd2fd349e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 52 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerSettings.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"2025796b09e1b1f398e9bdd4b9774887f5e5f1f4a7d4e2804fce7fc96e4c3b76"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 58 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/DependencyTrackerSettings.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2424588744b5e7218e4bba88dc661afe19ffa8982653bf10be6148d96e1c810"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 68 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/tracking/ttracks/MutableTTrackStack.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"60eb764e25bb95b7acca7fa478e5964ddb07d6c9cea6f2d8e3d266ea6362f69d"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 169 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/java/optimus/dal/silverking/plugin/SkKerberosPlugin.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"70b0314efae9e4c4491c0714f94672fcb8e9c0c909295b2798298b16e07b3a8f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 176 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/java/optimus/dal/silverking/plugin/SkKerberosPlugin.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"79adbe759b70e3843b111d66b7d908be3020d1f56282c41842e6e60586ef0c74"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 183 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/java/optimus/dal/silverking/plugin/SkKerberosPlugin.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"77fc859218775452c5c18210c0b9ed89c96edccf9ec4dcbba932cdf1fe9de74f"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 222 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/java/optimus/dal/silverking/plugin/SkKerberosPlugin.java"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3e8c17af4e6429b1fae3c34cc191235e3094b4f97cb659c8b5454b1aec22d6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 229 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/java/optimus/dal/silverking/plugin/SkKerberosPlugin.java"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"6481baa7c4b22382f2bb4336a1849957b7400226ea8179bde4dae68d4e9447fd"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060error\u0060 at line 236 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.error(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/dal_core/src/main/java/optimus/dal/silverking/plugin/SkKerberosPlugin.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"0860e01bd714ea70b69d3c09a66f7d6418f51d3de472535538e1f3ff35d631d0"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 271 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/git-utils/src/main/scala/optimus/git/diffparser/DiffParser.java"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac985fe6df9672fb56665b8268449839561cb068c3c0350d33da2f19d7900b62"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 290 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/git-utils/src/main/scala/optimus/git/diffparser/DiffParser.java"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0615e71a0a5ef87d68d861773cbdb34cfe8e40d15e92bd271af49b4a6ac7b43"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 170 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"e13a8e108c8078442df55b5704eccc645bdf91fce53eb02d8f9bd52f14ab3eaa"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 187 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/MSNetSSLSocket.java"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"6818f80e3f12d3383dfd9eaaa2044b01d2374fba62f14564ad815adc14804961"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 230 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/ssl/SSLEstablisher.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6b125e70d2df95416b1c49bd895d9ce387885006f0bb3a3f4c9d3517641858"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 102 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/ssl/SSLEngineBuilder.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"725aa591781f1526e2bded78ac5a2595f806073e1b6bb0c2681878c94cee79d1"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 109 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/ssl/SSLEngineBuilder.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"714b5da72323dc8ff54bf8d04b14ac12923231caaba1e175b187c4a22818acf9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 153 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/ssl/SSLEngineBuilder.java"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"a544905f5b10c11768e98af35f43bf5a24b2dc37397f898ac11cba3a858ef2a9"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 160 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/msnet-ssl/src/main/java/msjava/msnet/ssl/SSLEngineBuilder.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8ef678aa7458ea69bcb8c07f910749ec5b7308e9f6c1ba35186396c975841c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 432 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/client/impl/AsyncRetrievalOperationImpl.java"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"96e6f643e1322a0e15961484c2079abeedf630a4c8dcd91cff51711b95c00f4c"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 112 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/RawRetrievalResult.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"25f130a9c943eaae5a7775c7d5e569eea0a90606e9ab0248dbcc1b860d326c69"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 199 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/common/NamespaceProperties.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"8700c173f8345c6194b0bd84baa300676dc636b955a1aaf2936141d07eed1221"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 107 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/net/ProtoValueMessageGroup.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1bbfa91e35f922d6fdf51d3c49e1ef3d4b2bec0cc8c95e02a281cd72d605bf6"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 32 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/dht/serverside/IntermediateResult.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c4b4a3c40f489636284a6f8ea08201c3d6f5273fbc6a74b16f7c031c8af7ac"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060debug\u0060 at line 1604 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.debug(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/TopologyRingCreator.java"},"region":{"startLine":1604}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a190c433ac0294a4b7402a4bf69fd89bff4a4f8a5a1f7862be550ff25ed447"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 310 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/cloud/toporing/SingleRingZK.java"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"85051dc1530e34776afd8d02c2c2d2942b7b112e690daa7276d7822466e0b610"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 114 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a9b90d1adbeee307cc8571744b8be16a2502ba89fcbd3759e9a95878a9cf63e"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 264 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/collection/cuckoo/IntArrayCuckoo.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"6190c76b042101c3c96ae0adb41cc6da619058c67d919e14ef580c91bb0c29b8"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 32 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/io/util/ScatterColumn.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a218561495aa97a2da798456e43bef70a6a540171f0e54d83534be441100cf"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 383 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/SelectorController.java"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"cca1bb9825a2a2ed2f078a994529b21ebe19f8b391415c2509b53cd24fc0ff99"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 33 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerWithTracerImpl.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cb8379d6ea026be1db0f273727d9821f268ce5f7537a30be58b8b0e6bb9cbbb"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 40 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerWithTracerImpl.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"659151d8af7274ee8f2110dea3d2d5722cf8332832a36736970c4560a497d7d0"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 54 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerWithTracerImpl.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd70baf4c075df49104662dcc176ab650c2adedaf12ca756798fa07c2c6b6e47"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 70 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerWithTracerImpl.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bf028ecd03d7e8a686373c6f6171e4f4760126b0d21550d834f1610f4d1e029"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060trace\u0060 at line 29 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.trace(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerLoggingImpl.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a1e0dd8adde46475eeccaff2755e5235671ede9703ec3c73d33f385c95ebdd"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 36 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerLoggingImpl.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"5681275babed6a49986359aba65e4c0781439bae97446b61a425357898aeb028"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060warn\u0060 at line 50 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.warn(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerLoggingImpl.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae0b94ca690c22b569c37da43dfb7a7bd38e98f0fbe81ade70e5ed4578c5aeef"}},{"ruleId":"X4","level":"note","message":{"text":"Interpolated log message defeats structured logging: \u0060info\u0060 at line 57 is handed a message assembled at the call \u2014 a string concatenated with a value, or \u0060String.format\u0060 \u2014 through SLF4J or log4j 2, so the logger receives one finished string: the values in it cannot be queried, filtered or aggregated as fields, every occurrence reads as a different message, and the string is built even when the level is filtered out. Pass a constant pattern and the values beside it instead: \u0060log.info(\u0022Order {} moved to {}\u0022, orderId, status)\u0060, which keeps the pattern and its arguments apart on the event for a structured encoder (logstash-logback-encoder, log4j 2\u0027s JsonTemplateLayout, OpenTelemetry), or \u0060log.atInfo().addKeyValue(\u0022order_id\u0022, orderId).log(\u0022order moved\u0022)\u0060 with SLF4J 2\u0027s fluent API. An exception goes last, as the throwable argument, not into the text."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/silverking/projects/silverking/src/main/java/com/ms/silverking/net/async/AsyncSendListenerLoggingImpl.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f8ef4e1763ada96879d08ff62aeec56db674dca34e6c61417367b8c6a2dd666"}},{"ruleId":"X5","level":"note","message":{"text":"Scala\u0027s null is not held to the type system everywhere: No build over this repository\u0027s 2252 Scala product file(s) passes \u0060-Yexplicit-nulls\u0060, enables WartRemover\u0027s \u0060Null\u0060 wart or runs Scalafix\u0027s \u0060DisableSyntax.noNulls\u0060, so every reference type admits null and nothing reports a \u0060null\u0060 written into the code or returned from a Java API \u2014 the first one to reach a method call is a \u0060NullPointerException\u0060. \u0060Option\u0060 by convention is a habit no tool here holds the code to."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"23e7c3c6da50151f07723c64ca4f881fd5903e713d143161a7c0594ad7ba29cc"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060uri\u0060 swallows every exception into \u0060\u0022file://no-file\u0022\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch case or in the Scaladoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/bsp/BSPTraceListener.scala"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"aad9feecee4fbf51fa16374b0810ecb04908e0af368113aff89caea98ab55fbf"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060readScalaVersion\u0060 swallows every exception into \u0060\u0022unknown\u0022\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch case or in the Scaladoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/buildtool/projects/app/src/main/scala/optimus/buildtool/compilers/zinc/ZincCompilerFactory.scala"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"5195163fdfc8a39c1a7584ee80056d256329bd33ad0d9a2bbf478a666a91f7b6"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060getEnv\u0060 swallows every exception into \u0060\u0022N/A\u0022\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch case or in the Scaladoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/core/src/main/scala/optimus/graph/GraphEvents.scala"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"7106f4f42b3fc74c77eb2897b88b00638faf15b9003d02ce3a07ed23fb89b132"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060internalStats\u0060 swallows every exception into \u0060Map.empty\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch case or in the Scaladoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/AsyncProfilerIntegration.scala"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b2c8aa4f20c18083dfa93555838779888df9f013c7a15814231b3982cdddffe"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060getSID\u0060 (in \u0060buildStackTrees\u0060) swallows every exception into \u00600L\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch case or in the Scaladoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/instrumentation/src/main/scala/optimus/graph/diagnostics/ap/StackAnalysis.scala"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"b90e83b516ccb492b25f49415381477b9246d67ad99a5e5000f2877070c89e9d"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default on parse failure: \u0060loadAutoIncludeMappings\u0060 returns \u00600\u0060 when \u0060NumberFormatException\u0060 is thrown, with no log or throw \u2014 a malformed value silently becomes that default. Log the input or fail validation. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch or in the Javadoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/stratosphere/bootstrap/src/main/java/optimus/stratosphere/bootstrap/config/StratosphereChannelsConfig.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbbf176808123293f87d168e77b9fe12ede5fbba435d37db373f368d0668848c"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060getSessionId\u0060 swallows every exception into \u0060return -1\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch or in the Javadoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/internal/ZkaResourceContext.java"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a831e4c01d53530fcf7441968f1e9c23fc6e07d23d90c46725cb411a116f09c"}},{"ruleId":"X7","level":"note","message":{"text":"Silent fallback default in catch: \u0060getSessionId\u0060 swallows every exception into \u0060return 0\u0060 \u2014 a data error becomes a silent behavior change with no trail. Log the failure or let it propagate. If that constant is the correct answer rather than a stand-in for a value that could not be read, say so in a comment in the catch or in the Javadoc, and the row stops firing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"optimus/platform/projects/oss-utils/shadow/msjava/src/main/resources/msjava/zkapi/ZkaPathContext.java"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd41e94b2ee152cefa67e5ab1f7b02a8114653dd17a5f430d2cd32f2c3022946"}}],"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-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-319","guid":"7af97476-9f0d-4458-9163-3d2043918a1a","name":"Cleartext Transmission of Sensitive Information","shortDescription":{"text":"Cleartext Transmission of Sensitive Information"},"helpUri":"https://cwe.mitre.org/data/definitions/319.html"},{"id":"CWE-327","guid":"e51910ff-67b5-3c51-aa3d-92837d9eab90","name":"Use of a Broken or Risky Cryptographic Algorithm","shortDescription":{"text":"Use of a Broken or Risky Cryptographic Algorithm"},"helpUri":"https://cwe.mitre.org/data/definitions/327.html"},{"id":"CWE-328","guid":"f0ffc869-97c3-dc5c-8825-be1159f1fc5f","name":"Reversible One-Way Hash","shortDescription":{"text":"Reversible One-Way Hash"},"helpUri":"https://cwe.mitre.org/data/definitions/328.html"},{"id":"CWE-330","guid":"f811ddf9-2e54-865b-9c76-f97905849790","name":"Use of Insufficiently Random Values","shortDescription":{"text":"Use of Insufficiently Random Values"},"helpUri":"https://cwe.mitre.org/data/definitions/330.html"},{"id":"CWE-502","guid":"f7d3b296-aac0-5c5a-b706-e07faba26c36","name":"Deserialization of Untrusted Data","shortDescription":{"text":"Deserialization of Untrusted Data"},"helpUri":"https://cwe.mitre.org/data/definitions/502.html"},{"id":"CWE-611","guid":"1afbae66-ea29-2d59-aaa2-134e3ae2e85a","name":"Improper Restriction of XML External Entity Reference","shortDescription":{"text":"Improper Restriction of XML External Entity Reference"},"helpUri":"https://cwe.mitre.org/data/definitions/611.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)","shortDescription":{"text":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)"},"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":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Improper Control of Generation of Code (\u0027Code Injection\u0027)","shortDescription":{"text":"Improper Control of Generation of Code (\u0027Code Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]},{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61","version":"2025","organization":"OWASP Foundation","informationUri":"https://top10.owasp.org/2025/","isComprehensive":false,"shortDescription":{"text":"The OWASP Top 10:2025 web application security risks."},"taxa":[{"id":"A02:2025","guid":"668dee9e-41bc-6354-97d0-fdf8f40c50c1","name":"Security Misconfiguration","shortDescription":{"text":"Security Misconfiguration"},"helpUri":"https://top10.owasp.org/2025/A02_2025-Security_Misconfiguration/"},{"id":"A04:2025","guid":"6a9f5bfd-1a56-6453-beec-a7eff0ba3007","name":"Cryptographic Failures","shortDescription":{"text":"Cryptographic Failures"},"helpUri":"https://top10.owasp.org/2025/A04_2025-Cryptographic_Failures/"},{"id":"A05:2025","guid":"87e86033-3231-8458-8e4a-5cb82743553a","name":"Injection","shortDescription":{"text":"Injection"},"helpUri":"https://top10.owasp.org/2025/A05_2025-Injection/"},{"id":"A07:2025","guid":"334ddd78-539d-d35c-83dd-253647eb7eaf","name":"Authentication Failures","shortDescription":{"text":"Authentication Failures"},"helpUri":"https://top10.owasp.org/2025/A07_2025-Authentication_Failures/"},{"id":"A08:2025","guid":"84b0c297-710e-9a5f-9335-936ecb260c36","name":"Software or Data Integrity Failures","shortDescription":{"text":"Software or Data Integrity Failures"},"helpUri":"https://top10.owasp.org/2025/A08_2025-Software_or_Data_Integrity_Failures/"}]}],"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":17,"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."]}]}