{"$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":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D18","name":"Solution Shape","shortDescription":{"text":"Solution Shape"},"helpUri":"https://codehealth.canine.dev/dimensions/D18"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"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":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"CSharpPrimitiveCast.CSharpPrimitiveCastChecked (cyclomatic 170): CSharpPrimitiveCast.CSharpPrimitiveCastChecked has cyclomatic complexity 170 (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":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd19be56bbb4ffcefb7b293667882af7a05ab048cc86a58795f52a7804f5a409"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpPrimitiveCast.CSharpPrimitiveCastUnchecked (cyclomatic 170): CSharpPrimitiveCast.CSharpPrimitiveCastUnchecked has cyclomatic complexity 170 (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":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"d52c6a83fa775219b9defdfcf11cf2b66397f60e21654c7c938c5e7fae2d557b"}},{"ruleId":"D1","level":"warning","message":{"text":"TranslatedExpression.ConvertTo (cyclomatic 124): TranslatedExpression.ConvertTo has cyclomatic complexity 124 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"60e3ad56c882f0fd945df75f63eddf9dee20c3bef5042299885d260fa53ec43d"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.ResolveBinaryOperator (cyclomatic 109): CSharpResolver.ResolveBinaryOperator has cyclomatic complexity 109 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e6c990edfb6540772df03192c10c34fe8a274a061d426c00b2d6c4a8b2e95e3"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.MatchRoslynSwitchOnStringUsingLengthAndChar (cyclomatic 102): SwitchOnStringTransform.MatchRoslynSwitchOnStringUsingLengthAndChar has cyclomatic complexity 102 (threshold 15). Of this number, 100 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1195}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bbfcdd61cc09107a6734c68944da30e3b6c037ee5e1f2c1a825a3937d547af2"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpHighlightingTokenWriter.WriteKeyword (cyclomatic 102): CSharpHighlightingTokenWriter.WriteKeyword has cyclomatic complexity 102 (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":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fd7bd9918d4c40c8c618a71374e80b924c4bd00cc1eb69c646339f72b4eae3c"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicCallSiteTransform.ScanCallSiteInitBlock (cyclomatic 101): DynamicCallSiteTransform.ScanCallSiteInitBlock has cyclomatic complexity 101 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"25adcc71a69bb011dfb7f0589115adda2d32c906a33e5db435e00a774a6ae285"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cyclomatic 84): CSharpDecompiler.DoDecompile has cyclomatic complexity 84 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1630}}}],"partialFingerprints":{"codehealthFindingId/v1":"26d0ef721de529a9570ca2560026f66f05119b584e1393d7e518c4c1917ff618"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexRangeTransform.Run (cyclomatic 81): IndexRangeTransform.Run has cyclomatic complexity 81 (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":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a6e6ab7e4b7334e76a9be2c3681322f77bc582d9838d877253b0d76c0428080"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerSettings.GetMinimumRequiredVersion (cyclomatic 73): DecompilerSettings.GetMinimumRequiredVersion has cyclomatic complexity 73 (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":"ICSharpCode.Decompiler/DecompilerSettings.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd1cf4638b041551b7f98b3f912c30221a02dba340096662b4ffc89b1bffacdb"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.MemberIsHidden (cyclomatic 71): CSharpDecompiler.MemberIsHidden has cyclomatic complexity 71 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"c78af57959824ad8e46221640c9ac7f1e9423f582ebec5b7c6b3a94111a00a87"}},{"ruleId":"D1","level":"warning","message":{"text":"ReflectionDisassembler.WriteNativeType (cyclomatic 71): ReflectionDisassembler.WriteNativeType has cyclomatic complexity 71 (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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"d491c8751b3f37c2f3badc58f9b429a9f357dc691f3346233a4fb738e91658af"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.ConvertBody (cyclomatic 71): YieldReturnDecompiler.ConvertBody has cyclomatic complexity 71 (threshold 15). Of this number, 70 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":855}}}],"partialFingerprints":{"codehealthFindingId/v1":"926c4b70590a29713a74284d878225c85750dce843438c8de1b6160e7b07b4ee"}},{"ruleId":"D1","level":"warning","message":{"text":"BamlReader.ReadDocument (cyclomatic 69): BamlReader.ReadDocument has cyclomatic complexity 69 (threshold 15). Of this number, 68 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"ICSharpCode.BamlDecompiler/Baml/BamlReader.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e2f7850ded7bc244f0ff70d51c641d26a2a4ed5fe20c2a57a3bae9f7baeb32"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.Build (cyclomatic 68): CallBuilder.Build has cyclomatic complexity 68 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"a56c1a2c5538bbbb720b570f7a179bf762d565e866b9cb33a825d9fa93173d2c"}},{"ruleId":"D1","level":"warning","message":{"text":"UsingTransform.MatchDisposeCheck (cyclomatic 68): UsingTransform.MatchDisposeCheck has cyclomatic complexity 68 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"184d160020d4061c56eacd731a4ccb05d47661fd3f10041510d9036fd43b81e7"}},{"ruleId":"D1","level":"warning","message":{"text":"ILAmbience.ConvertSymbol (cyclomatic 65): ILAmbience.ConvertSymbol has cyclomatic complexity 65 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILAmbience.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc32b90d1db95d89e595da357b785f66ea8cde409ccd9b0e6a65a8167b986a7"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataTableDumper.LoadRows (cyclomatic 65): MetadataTableDumper.LoadRows has cyclomatic complexity 65 (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":"ICSharpCode.ILSpyCmd/MetadataTableDumper.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d35b924956fd8edcb45ff7d1690d3dfed22213239372a6650aa83b1a04d0d5"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformExpressionTrees.ConvertInstruction (cyclomatic 62): TransformExpressionTrees.ConvertInstruction has cyclomatic complexity 62 (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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"14dcf8118984c078e3382330ffa5ef865a0e2e3cc54aacb51074d6fb85c43558"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.MatchLegacySwitchOnStringWithDict (cyclomatic 61): SwitchOnStringTransform.MatchLegacySwitchOnStringWithDict has cyclomatic complexity 61 (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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"25ba291c291255fa6aaadcbd0a0fa86f0b8a2b6cd8380f83ddd25f1b5e8f604b"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedPrintMembers (cyclomatic 59): RecordDecompiler.IsGeneratedPrintMembers has cyclomatic complexity 59 (threshold 15). Of this number, 58 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"eacc05f5a491f3d4b10c80f554a1038f10e1bc7814016dc6728697be6c8cc44e"}},{"ruleId":"D1","level":"warning","message":{"text":"Conv.GetConversionKind (cyclomatic 59): Conv.GetConversionKind has cyclomatic complexity 59 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/Conv.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"23760b5bc3dc1d098d415fff95f2c8822b4854c2037a5e7d577f39892bd47d37"}},{"ruleId":"D1","level":"warning","message":{"text":"Lexer.ReadDigit (cyclomatic 58): Lexer.ReadDigit has cyclomatic complexity 58 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bfd0f4e0dad1b7d088b9616b07aafa9c03dddad15e672cc028396cfa5c63c1d"}},{"ruleId":"D1","level":"warning","message":{"text":"IntroduceQueryExpressions.DecompileQuery (cyclomatic 55): IntroduceQueryExpressions.DecompileQuery has cyclomatic complexity 55 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"363b6fa3e43b2f35b85f16d3634ed523d1b596662bc6b2f22d09e14d9cf30f77"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.AnalyzeMoveNext (cyclomatic 55): YieldReturnDecompiler.AnalyzeMoveNext has cyclomatic complexity 55 (threshold 15). Of this number, 52 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"69eb967253cab089534c2d58353e215d5ca86c955a68d3b35c843a0b2e4efa48"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.DetectPrimaryConstructor (cyclomatic 54): RecordDecompiler.DetectPrimaryConstructor has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b326fccd5e2d563f577498b78c67b7d875b1e06aa43572cf7b7bb51904abffee"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.HandleCompoundAssign (cyclomatic 54): TransformAssignment.HandleCompoundAssign has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d84bab9150526656d5e63b7854e688cdf5b2a8a45655b003c7fbf138b5cc04b"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchTaskCreationPattern (cyclomatic 52): AsyncAwaitDecompiler.MatchTaskCreationPattern has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"7790c88d55ec41351823ce650fbe77fd72eb992218b13488b55b4df5caa882dc"}},{"ruleId":"D1","level":"warning","message":{"text":"InsertParenthesesVisitor.GetPrecedence (cyclomatic 51): InsertParenthesesVisitor.GetPrecedence 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"5424869ffd8550582f9d7ab1ee2ab35e5ed1aa1ef65e114f92afb8d826066405"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedEquals (cyclomatic 51): RecordDecompiler.IsGeneratedEquals has cyclomatic complexity 51 (threshold 15). Of this number, 50 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"480eba291bff478301fe15dcf5b9ed2c8dd37d351d27d5a94e3a7f0020600da2"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.GetRequiredTransformationsForCall (cyclomatic 49): CallBuilder.GetRequiredTransformationsForCall 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"16f00e7016635a75773695341f82b8abec5676dffd000d2bea238bbfe2a7edd1"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.IsAccessorInterfaceImplementationRuntimeHelper (cyclomatic 49): CSharpDecompiler.IsAccessorInterfaceImplementationRuntimeHelper 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"d982bd05b2dfef923c7a17e4e69af02824f73f5412ffd38536996748d44a7ed7"}},{"ruleId":"D1","level":"warning","message":{"text":"MethodBodyDisassembler.WriteInstruction (cyclomatic 49): MethodBodyDisassembler.WriteInstruction 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":"ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"363cdabc7513307b2047045beb48259618b731ff8888b2f29384dd5082455ad4"}},{"ruleId":"D1","level":"warning","message":{"text":"NullableLiftingTransform.Lift (cyclomatic 49): NullableLiftingTransform.Lift 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"77efe876f6dd232c7f61094a657d22209d7a8af235d8d90344a51768834e07f8"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.SimplifyCascadingIfStatements (cyclomatic 49): SwitchOnStringTransform.SimplifyCascadingIfStatements has cyclomatic complexity 49 (threshold 15). Of this number, 48 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"968354cc830f533fb9af0c5648816b2ee9047840836ca6f00c25a8de39c9ba49"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformCollectionAndObjectInitializers.Run (cyclomatic 49): TransformCollectionAndObjectInitializers.Run 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":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"24760ab81661071d2a103d4ddb77b664e2ab23211cf0e482981ec92314f4671b"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpBracketSearcher.SearchBracketBackward (cyclomatic 49): CSharpBracketSearcher.SearchBracketBackward 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":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"d050dc6e8a9d20c85bd507f56c7f0ac59881acefe95afb21b66e06512905180e"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpBracketSearcher.SearchBracketForward (cyclomatic 48): CSharpBracketSearcher.SearchBracketForward 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":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb01adc66416c30784afeef8f3be707577b5bcfe6fb6647e967d92f0871c878f"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.ResolveUnaryOperator (cyclomatic 46): CSharpResolver.ResolveUnaryOperator 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c6006801fb6859b04fa0f6c9fdc66f384a3852c2bc38754915a12184f1ab4a"}},{"ruleId":"D1","level":"warning","message":{"text":"OverloadResolution.BetterFunctionMember (cyclomatic 46): OverloadResolution.BetterFunctionMember 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":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c126ed5060561e91fc38146fd9002dfc6712c75d2e53a5560f450254ff2eefb"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeDefinition (cyclomatic 46): TypeSystemAstBuilder.ConvertTypeDefinition 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1897}}}],"partialFingerprints":{"codehealthFindingId/v1":"b57a19bc115a283c1c7b0745b9ff20be99ed2f6a75b384b92d2d801af1534a9f"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformArrayInitializers.HandleSimpleArrayInitializer (cyclomatic 46): TransformArrayInitializers.HandleSimpleArrayInitializer 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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"d846dd8a974d9026b8c62dbc7f8eb4c3c93c62469a8c610e0b854ae18c61f1d7"}},{"ruleId":"D1","level":"warning","message":{"text":"Block.CheckInvariant (cyclomatic 45): Block.CheckInvariant has cyclomatic complexity 45 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/Block.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7b37ad1ad9928db7a48b349e8dcf5c8e6d39636b5d76f67e9293b561395d22"}},{"ruleId":"D1","level":"warning","message":{"text":"ILInlining.NonAggressiveInlineInto (cyclomatic 45): ILInlining.NonAggressiveInlineInto has cyclomatic complexity 45 (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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":648}}}],"partialFingerprints":{"codehealthFindingId/v1":"1340974bd755d2876b6b967807d761a563816ea3bae756d36b5a3fcd2f6e0ea9"}},{"ruleId":"D1","level":"warning","message":{"text":"VariableScope.VariableScope.ctor (cyclomatic 44): VariableScope.VariableScope.ctor has cyclomatic complexity 44 (threshold 15). Of this number, 39 points are the body\u0027s own statements and 5 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"6689d4ce682a6fe56af22c95b2dd54ca98a6f1e213ba42ce813c586757c332a7"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteralSearchStrategy.MethodIsLiteralMatch (cyclomatic 44): LiteralSearchStrategy.MethodIsLiteralMatch has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/LiteralSearchStrategy.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"08a1065be243b5ecf3918c735566a511b8d59d7670d890c7b226b627a1052a36"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.ReadCodeMappingInfo (cyclomatic 43): CSharpDecompiler.ReadCodeMappingInfo 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bea0867f3e2ce5313d38e9d860a40fa0e4ac0b55f08ab2ecb719ef9f2161d2a"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpAmbience.ConvertSymbol (cyclomatic 43): CSharpAmbience.ConvertSymbol 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"94fba17176c72f6711295c20e6e9a3e1e2dcb2c5edfca4dfd8cae1fa2ca91068"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertEnumValue (cyclomatic 43): TypeSystemAstBuilder.ConvertEnumValue has cyclomatic complexity 43 (threshold 15). Of this number, 40 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1306}}}],"partialFingerprints":{"codehealthFindingId/v1":"79ce27cbed9f797a96ea2acc1fa1d9f5b23262a88091bb714c8c0eebcd27d005"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteFlagBasedEarlyReturn (cyclomatic 43): RuntimeAsyncExceptionRewriteTransform.TryRewriteFlagBasedEarlyReturn has cyclomatic complexity 43 (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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e8352821b8a899d12abbfbc3161bebb309c646c3881dbd29bd09321427c0ca0"}},{"ruleId":"D1","level":"warning","message":{"text":"FileUtility.NormalizePath (cyclomatic 43): FileUtility.NormalizePath 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":"ICSharpCode.Decompiler/Util/FileUtility.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b567f7e2c17de0c04d5ccfa6070a50c7759f60365995ed2540c76642a70115e5"}},{"ruleId":"D1","level":"warning","message":{"text":"DocumentationRenderer.AddDocumentationElement (cyclomatic 43): DocumentationRenderer.AddDocumentationElement 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":"ILSpy/TextView/DocumentationRenderer.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d507df3d936b554b7192b5d9433f098e8492db49a5ecd8be3212dab90800d60"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeHelper (cyclomatic 42): TypeSystemAstBuilder.ConvertTypeHelper has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c750e1316c0344e965e4f2fa293fb4bbc980a7597f30dcfebc77ee6e8d165f"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.MatchLegacySwitchOnStringWithHashtable (cyclomatic 42): SwitchOnStringTransform.MatchLegacySwitchOnStringWithHashtable has cyclomatic complexity 42 (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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"dedb83054cfc6bf6582f08e2dddeb8e93c7b24c99229891f2ef74f75223b9d83"}},{"ruleId":"D1","level":"warning","message":{"text":"ReplaceMethodCallsWithOperators.ProcessInvocationExpression (cyclomatic 41): ReplaceMethodCallsWithOperators.ProcessInvocationExpression has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"21667a7fd819da7b792de22a7d64153376e7bd97c125d44799983232f181f368"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.NormalizeAwaitOnCompletedDualBranch (cyclomatic 41): AsyncAwaitDecompiler.NormalizeAwaitOnCompletedDualBranch has cyclomatic complexity 41 (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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1532}}}],"partialFingerprints":{"codehealthFindingId/v1":"2738230e2368ff15f2d7b71c039eb56a4f5ab5e15fd94574fb59c7ccd2bc7bb6"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.BinaryNumericPromotion (cyclomatic 40): CSharpResolver.BinaryNumericPromotion has cyclomatic complexity 40 (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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"86bc67998cc2101e427ebf8165a482e8f09eb068b4088897f0dabc6ba7246c8a"}},{"ruleId":"D1","level":"warning","message":{"text":"NullPropagationTransform.IsValidAccessChain (cyclomatic 40): NullPropagationTransform.IsValidAccessChain 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":"ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b610ab3e7c369b555fe70e617a8616066a408627a8d458422890489d0720fa1"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.MatchRoslynSwitchOnString (cyclomatic 40): SwitchOnStringTransform.MatchRoslynSwitchOnString 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1014}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0f8fa49004c71b71fcdde3317179c7863987c4a72dc4ff5495e32fc6a085bac"}},{"ruleId":"D1","level":"warning","message":{"text":"MemberSearchStrategy.Search (cyclomatic 40): MemberSearchStrategy.Search 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":"ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab0d402bd77b80e9f1435a092a82530fb4dd15a14161ff3b38e2e63e32cd927"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeInference.MakeLowerBoundInference (cyclomatic 39): TypeInference.MakeLowerBoundInference has cyclomatic complexity 39 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"c38221297c03b83fd85ac49627ad517adbc8425d575041119b906624f2d8596d"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.DetectAwaitPattern (cyclomatic 39): AsyncAwaitDecompiler.DetectAwaitPattern has cyclomatic complexity 39 (threshold 15). Of this number, 37 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1803}}}],"partialFingerprints":{"codehealthFindingId/v1":"e47815f3b86d56eeb3920b1c28462d1c57f51fce8f1717a91460445efc2072c6"}},{"ruleId":"D1","level":"warning","message":{"text":"RunningSearch.ParseInput (cyclomatic 39): RunningSearch.ParseInput 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":"ILSpy/Search/RunningSearch.cs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8b1315b548a59783eb16299cd956e9ccb24bf3f9f4f91dea5b10b25ef468e4b"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.Analyze (cyclomatic 38): ConstructorInitializerAnalyzer.Analyze 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":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"fff0bd134774836cd205c41c6d151bb2e7d4e2b9655529e6b326f0dc7d85abe5"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.AnalyzeAwaitBlock (cyclomatic 38): AsyncAwaitDecompiler.AnalyzeAwaitBlock has cyclomatic complexity 38 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"e49fe10629989de84674ef1f9e378ebceda10ac38831801d0044908c4bc871f1"}},{"ruleId":"D1","level":"warning","message":{"text":"AccessPathElement.GetAccessPath (cyclomatic 38): AccessPathElement.GetAccessPath has cyclomatic complexity 38 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"169be09b33c3639c6a013b1769d1bbacab6c6ff07057dc079f8107e59d52b4d1"}},{"ruleId":"D1","level":"warning","message":{"text":"ApplyAttributeTypeVisitor.ApplyAttributesToType (cyclomatic 38): ApplyAttributeTypeVisitor.ApplyAttributesToType has cyclomatic complexity 38 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af1e782c39d4c3cf704639a92811896e91bd31908b35ae4f12024b37f06a7b8"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.HandleBinaryNumeric (cyclomatic 37): ExpressionBuilder.HandleBinaryNumeric 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1619}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a3de178adc926ad7c28b04073ef0fa11085922ce951bb31486fbf57b6193ece"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.VisitConv (cyclomatic 37): ExpressionBuilder.VisitConv 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2227}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd793ad7698ab60a4146ffb00754067981ec415fe944ccb870c867c88745a283"}},{"ruleId":"D1","level":"warning","message":{"text":"AwaitInCatchTransform.MatchAwaitCatchHandler (cyclomatic 37): AwaitInCatchTransform.MatchAwaitCatchHandler 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":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"27434914ebabd3f6023f50710b5db1a945f3d9bfcdc17aea39733917e6e65f20"}},{"ruleId":"D1","level":"warning","message":{"text":"StateRangeAnalysis.AssignStateRanges (cyclomatic 37): StateRangeAnalysis.AssignStateRanges 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":"ICSharpCode.Decompiler/IL/ControlFlow/StateRangeAnalysis.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fb381d8e9e76a3bfba6be8f9bcc7a53f9ff27f488db20894075e5c8e87e0d05"}},{"ruleId":"D1","level":"warning","message":{"text":"InstructionOutputExtensions.WriteTo (cyclomatic 37): InstructionOutputExtensions.WriteTo 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":"ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"5baa4529f620977685ab20478ba60bb1c3f6e7e7c9181b7988e0bb155b222b0f"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.TransformInlineAssignmentStObjOrCall (cyclomatic 37): TransformAssignment.TransformInlineAssignmentStObjOrCall 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"633674901c96c1d88f737c50712814cd80d27673d4f673bc406162766acd1483"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.CheckResumeBlock (cyclomatic 36): AsyncAwaitDecompiler.CheckResumeBlock has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":2001}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aa29c89dd152e3eb8381ad10b1ed8c2fc9f756562d79c8a499938483aab74e0"}},{"ruleId":"D1","level":"warning","message":{"text":"AwaitInFinallyTransform.Run (cyclomatic 36): AwaitInFinallyTransform.Run has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInFinallyTransform.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c9357a3616247b49dbe57ae6320882034ddd97c47bdd842e3aaa8f7acc89155"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncManualAwaitTransform.DetectRuntimeAsyncManualAwait (cyclomatic 36): RuntimeAsyncManualAwaitTransform.DetectRuntimeAsyncManualAwait has cyclomatic complexity 36 (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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncManualAwaitTransform.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd9b2fcad3a944c59007887fd4acbe501f5fa2192fbf5cf57c2ac1a05460d7e8"}},{"ruleId":"D1","level":"warning","message":{"text":"ExtensionInfo.ExtensionInfo.ctor (cyclomatic 36): ExtensionInfo.ExtensionInfo.ctor has cyclomatic complexity 36 (threshold 15). Of this number, 34 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ExtensionInfo.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"47344a7c6a942cfa80630494a503fbf4201ac63f8bef220dfc8b554010d853c5"}},{"ruleId":"D1","level":"warning","message":{"text":"ILSpyCmdProgram.OnExecuteAsync (cyclomatic 36): ILSpyCmdProgram.OnExecuteAsync has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"41e416f293e5acd67e6657725159c58e45f04f24fa0d1381e55d92e98113c5e9"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.CheckImplicitTruncation (cyclomatic 35): TransformAssignment.CheckImplicitTruncation has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3c37f10239f2c66f03badb10892f69e6ed1d6829bf5452c0d51bf34aadf1b63"}},{"ruleId":"D1","level":"warning","message":{"text":"RemoveCompilerGeneratedAssemblyAttributes.Run (cyclomatic 34): RemoveCompilerGeneratedAssemblyAttributes.Run 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":"ICSharpCode.Decompiler/CSharp/Transforms/EscapeInvalidIdentifiers.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18d68bcfb979107b467a0ebd27f8b3b7bd944f0732d200f50f74cf94789d70a"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteMultiHandlerTryCatch (cyclomatic 34): RuntimeAsyncExceptionRewriteTransform.TryRewriteMultiHandlerTryCatch 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"23791e710bdcb2e94b59cd7ce7c86a7aa061c26af02607a032b6077bc2d43628"}},{"ruleId":"D1","level":"warning","message":{"text":"ILTypeExtensions.InferType (cyclomatic 34): ILTypeExtensions.InferType has cyclomatic complexity 34 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILTypeExtensions.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebd0ddc03c9ace0c51a29ff29319f96508daa39a09aab90584d4993f86b997db"}},{"ruleId":"D1","level":"warning","message":{"text":"AttributeListBuilder.IgnoreAttribute (cyclomatic 34): AttributeListBuilder.IgnoreAttribute has cyclomatic complexity 34 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/AttributeListBuilder.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c0cfb946fcff317fbddc1888234d5dec135ecb90f12cadf7ec115ba5c6b912b"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslateCeq (cyclomatic 33): ExpressionBuilder.TranslateCeq has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6f16387a0a0a15a43878e8ae6b42c8bf1b84161afacd5cb1c18780bfc12b84c"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.LookupSimpleNameOrTypeName (cyclomatic 33): CSharpResolver.LookupSimpleNameOrTypeName has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1472}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf938a553595cf4dec47cb7728bf82e6a3ced2ded429f7ab4b06e8241e76906"}},{"ruleId":"D1","level":"warning","message":{"text":"OverloadResolution.CheckApplicability (cyclomatic 33): OverloadResolution.CheckApplicability has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7fe00d24b1c8499593cc17f3dc1e8447d4ce40a1ed067f7dc7e58d450cb8289"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.MatchEnumeratorCreationPattern (cyclomatic 33): YieldReturnDecompiler.MatchEnumeratorCreationPattern has cyclomatic complexity 33 (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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c91f0b43bca853f192797a01771ab5c79b35396d6d2c8bc1d2dcea71353fe0"}},{"ruleId":"D1","level":"warning","message":{"text":"RemoveUnconstrainedGenericReferenceTypeCheck.Run (cyclomatic 33): RemoveUnconstrainedGenericReferenceTypeCheck.Run has cyclomatic complexity 33 (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":"ICSharpCode.Decompiler/IL/Transforms/RemoveUnconstrainedGenericReferenceTypeCheck.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"2365b03cc88dffa1ca6dfa998bf3226b928d7a3edc48ba539fbf99a862154da5"}},{"ruleId":"D1","level":"warning","message":{"text":"TextWriterTokenWriter.WritePrimitiveValue (cyclomatic 32): TextWriterTokenWriter.WritePrimitiveValue has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/TextWriterTokenWriter.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"27818b36524936817af377a7c2a3c02e3dd196cdee5e32300d4a31f14e70f952"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.ExplicitReferenceConversion (cyclomatic 32): CSharpConversions.ExplicitReferenceConversion has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"baf6114195503cb4746061091c6543aa6ed50873bf1a62ab01451f39643c66d4"}},{"ruleId":"D1","level":"warning","message":{"text":"ConnectionIdRewritePass.DecompileConnections (cyclomatic 32): ConnectionIdRewritePass.DecompileConnections has cyclomatic complexity 32 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1a72a09015c497c0c83cd9747c922d62144cbabec1ea5d83b1ba7ca3aac66e3"}},{"ruleId":"D1","level":"warning","message":{"text":"ConnectionIdRewritePass.MatchEventSetterCreation (cyclomatic 32): ConnectionIdRewritePass.MatchEventSetterCreation has cyclomatic complexity 32 (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":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1aa58f527905517d0c160e118cc53ce0bd704546ef9920348a9f5fc21d10cc9"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedToString (cyclomatic 31): RecordDecompiler.IsGeneratedToString has cyclomatic complexity 31 (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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"16dc01c6e586bc9e76eecc62397e2a55604fe71db413c2452c84bfd68f5aac06"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.BetterConversion (cyclomatic 31): CSharpConversions.BetterConversion 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1540}}}],"partialFingerprints":{"codehealthFindingId/v1":"61eab48f56e725cbb03a3db4ba369120381f2994879b5760617db6eaf818d7fe"}},{"ruleId":"D1","level":"warning","message":{"text":"AwaitInCatchTransform.Run (cyclomatic 31): AwaitInCatchTransform.Run 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":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"a708a327989b8cf5a8ff0965183851a2e53928bb3ae65223a7367684bdcbbac1"}},{"ruleId":"D1","level":"warning","message":{"text":"NullableLiftingTransform.DoLift (cyclomatic 31): NullableLiftingTransform.DoLift 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c85842c294b2a5348e17718ab4bbeba672079621e3dfc438115ef24df31c04"}},{"ruleId":"D1","level":"warning","message":{"text":"ReduceNestingTransform.ComputeStats (cyclomatic 31): ReduceNestingTransform.ComputeStats has cyclomatic complexity 31 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ReduceNestingTransform.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0a7b4ef967c996b7dd7645038935ec8899177cc86246e07acf64dd72dfcfae"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerTypeSystem.InitializeCoreAsync (cyclomatic 31): DecompilerTypeSystem.InitializeCoreAsync has cyclomatic complexity 31 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d7a19554aa68d83b64c3aac66a12e4e7f985e0e61bfc33153e5252c523045b"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerSyntaxTreeGenerator.GetAstNodeAdditions (cyclomatic 31): DecompilerSyntaxTreeGenerator.GetAstNodeAdditions has cyclomatic complexity 31 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3a150063ebadb766561cfa624ec489df1df7aa3e4c3e8fd4cc2f2122891fa0d"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.TryGetStringInterpolationTokens (cyclomatic 30): CallBuilder.TryGetStringInterpolationTokens has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":770}}}],"partialFingerprints":{"codehealthFindingId/v1":"a19477714c75baed09e6ba51d9e26fe1157008d0bfb3dd6c93653588c070ad9e"}},{"ruleId":"D1","level":"warning","message":{"text":"RequiredNamespaceCollector.CollectNamespacesFromMethodBody (cyclomatic 30): RequiredNamespaceCollector.CollectNamespacesFromMethodBody has cyclomatic complexity 30 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc65aab40f93598317463b137fac3f6829369b3d4ce34a83fefd0fa81fa1d79e"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertConstantValue (cyclomatic 30): TypeSystemAstBuilder.ConvertConstantValue has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1924d9f539c3c0fcac9da7c5f4fd8b153e212627c50abd23ef5fcc8ab2353d9"}},{"ruleId":"D1","level":"warning","message":{"text":"NumericCompoundAssign.IsBinaryCompatibleWithType (cyclomatic 30): NumericCompoundAssign.IsBinaryCompatibleWithType has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"31dbd5096de93b826c2bdd9426f003d4db070986197e96c1c2c38263dfa7ba80"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.TransformPostIncDecOperator (cyclomatic 30): TransformAssignment.TransformPostIncDecOperator has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":1032}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41e679edfe9635d314ac8c76f8594fe0cb58f7722c3358f0139041c5995d7e0"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataMethod.GetAttributes (cyclomatic 30): MetadataMethod.GetAttributes has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"5afc581bbc01c95e7c5b67b5e95977e4f2e98f86f88906efa34713366ffc05f9"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeInference.MakeExactInference (cyclomatic 29): TypeInference.MakeExactInference has cyclomatic complexity 29 (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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"67bac5124a5e5b36c1c4fb6493cf2ece30c8afbabbc33123be21075e91a5abc6"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.GetMemberModifiers (cyclomatic 29): TypeSystemAstBuilder.GetMemberModifiers 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2535}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f003eee48fb5aa8ab063497280074ed9b13196a221cedb8a3b2993fff79b975"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternMatchingTransform.MatchNullableHasValueCheckPattern (cyclomatic 29): PatternMatchingTransform.MatchNullableHasValueCheckPattern 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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"54f9b6599f4a80da0ffe74aa801607849db1bf05d0adcac5e11ab0855711a5e8"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cyclomatic 28): CSharpDecompiler.DoDecompile has cyclomatic complexity 28 (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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2036}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a18d31548ecc43a69ae65a8510ad732c137a717d5fd405a2d3f90fb6eca6364"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedCopyConstructor (cyclomatic 28): RecordDecompiler.IsGeneratedCopyConstructor has cyclomatic complexity 28 (threshold 15). Of this number, 27 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"55756d90c3a5b9946b2097e5e240d9447102c77629085cf3037786f928d1fe4c"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.TryExtractExpression (cyclomatic 28): TypeSystemAstBuilder.TryExtractExpression 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1586}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c6655a5960339d5c9ca64023a594b8ea8b65fbfeab421a88de25c56678b39c6"}},{"ruleId":"D1","level":"warning","message":{"text":"DeclareVariables.InsertVariableDeclarations (cyclomatic 28): DeclareVariables.InsertVariableDeclarations has cyclomatic complexity 28 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"868177c8dc161a05918b3a34032579d66d8247a68652cb71ed9dd56abc4af564"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternStatementTransform.TransformForeachOnMultiDimArray (cyclomatic 28): PatternStatementTransform.TransformForeachOnMultiDimArray has cyclomatic complexity 28 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"601349f6807ccb6c90ce0845981050151f573a751691baaeecd6d35539c5ce25"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.RemoveImplicitConstructor (cyclomatic 28): ConstructorInitializerAnalyzer.RemoveImplicitConstructor 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":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdf973c245d719cbaa505a7869af2998df3dc54b4fb30640b67034f4199842b7"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.ValidateCatchBlock (cyclomatic 28): AsyncAwaitDecompiler.ValidateCatchBlock has cyclomatic complexity 28 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e241a118aa05b35d97516b518d884023d103b1a33b29a3f589215f5af644b14"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternMatchingTransform.PatternMatchRefTypes (cyclomatic 28): PatternMatchingTransform.PatternMatchRefTypes has cyclomatic complexity 28 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0df5a3953bf2daefabdbd8b3d27cb978fbbda9e985829a751da918597f7a43a"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformArrayInitializers.HandleSequentialLocAllocInitializer (cyclomatic 28): TransformArrayInitializers.HandleSequentialLocAllocInitializer 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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"8897cef67c655a6d98cb1ef506d61321449534eebb323dd00bfc09a1d9d60895"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.TransformPreIncDecOperatorWithInlineStore (cyclomatic 28): TransformAssignment.TransformPreIncDecOperatorWithInlineStore 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"e895ff7d690d50ed1aea580cabe543f65492b17fe5cc3e1fdd54c97bdecb1391"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemExtensions.IsUnmanagedType (cyclomatic 28): TypeSystemExtensions.IsUnmanagedType 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":"ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"18683da2c2a9bb34c2cf6ce6566f4f66d06cd89912093602c53769178f988529"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataTokenSearchStrategy.Search (cyclomatic 28): MetadataTokenSearchStrategy.Search 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":"ICSharpCode.ILSpyX/Search/MetadataTokenSearchStrategy.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"17509398aebc3e1de1336309f461db16762e9319d99f0cc514859562f8616142"}},{"ruleId":"D1","level":"warning","message":{"text":"StatementBuilder.TransformToForeach (cyclomatic 27): StatementBuilder.TransformToForeach 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5769c3513c3eda29f38179431de3739a42064a9efdb7ee127e4dfb0e3a025c0"}},{"ruleId":"D1","level":"warning","message":{"text":"AwaitInCatchTransform.MatchExceptionCaptureBlock (cyclomatic 27): AwaitInCatchTransform.MatchExceptionCaptureBlock has cyclomatic complexity 27 (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":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bf15c6f84c9146d9ffad248521b371f0d8a0f6f45785958dff411c9edae1b2e"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectPinnedRegions.IsCustomRefPinPattern (cyclomatic 27): DetectPinnedRegions.IsCustomRefPinPattern 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"39a12b1e8c6fff50d3f5c7e33040107dc83f8a9f417aec4026e795a522b6b369"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectPinnedRegions.CreatePinnedRegion (cyclomatic 27): DetectPinnedRegions.CreatePinnedRegion 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff94c3374913013d5a76964499c1992077fb34eedfb2167d4abcc23924efc98f"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.SimplifyCSharp1CascadingIfStatements (cyclomatic 27): SwitchOnStringTransform.SimplifyCSharp1CascadingIfStatements 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cf6581356271f4cebd3b44381176e651ae8befdbdbdf8c194718d9d0730bf80"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformCollectionAndObjectInitializers.IsPartOfInitializer (cyclomatic 27): TransformCollectionAndObjectInitializers.IsPartOfInitializer has cyclomatic complexity 27 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"db7999e7538d2ca2b86388ecc7ce56d7f30732abae015510c468267debb81d09"}},{"ruleId":"D1","level":"warning","message":{"text":"ReflectionHelper.ResolveTypeName (cyclomatic 27): ReflectionHelper.ResolveTypeName 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":"ICSharpCode.Decompiler/TypeSystem/ReflectionHelper.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"adce954fbbc984a1c398673ab4fe65ea714b052cf1f03b8aaf61da3d2a1a8c8e"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslatePattern (cyclomatic 26): ExpressionBuilder.TranslatePattern 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":5008}}}],"partialFingerprints":{"codehealthFindingId/v1":"905020cbff349f685b5d13126adce241a9f5cc9414f54dc2d5af55e530d55a43"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.DetectAutomaticProperties (cyclomatic 26): RecordDecompiler.DetectAutomaticProperties 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5269794d6ded6a1f9c451c10ef9261b61e6b019359d9d9f36c74227388f4d62"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeHelper (cyclomatic 26): TypeSystemAstBuilder.ConvertTypeHelper 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d108302a40aafe6c5e3f429079bd78ffa3cd48383267a92ee3703cc9c92feaf"}},{"ruleId":"D1","level":"warning","message":{"text":"DeclareVariables.FindInsertionPoints (cyclomatic 26): DeclareVariables.FindInsertionPoints 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":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dbbcd64762b534067cc8ae0da5faf0db8ac4b35b5d12d5cbddbb7e3155d2cdd"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectPinnedRegions.HandleStringToPointer (cyclomatic 26): DetectPinnedRegions.HandleStringToPointer 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a5ae6ad679c8253f735ebcc34e7f04322f9b501ab49c98ca71352d7b5bb7bb6"}},{"ruleId":"D1","level":"warning","message":{"text":"VariableScope.GenerateNameForVariable (cyclomatic 26): VariableScope.GenerateNameForVariable has cyclomatic complexity 26 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"a04732f47526b5ba03ef9122c2db11b116a217921ca3708f6c1ef291c022ddf9"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslateFunction (cyclomatic 25): ExpressionBuilder.TranslateFunction has cyclomatic complexity 25 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2493}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c6786d0191308d7812a43c5bdcd141bc007fa42cb226ef86fc8106dc48142e9"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.GetApplicableConversionOperators (cyclomatic 25): CSharpConversions.GetApplicableConversionOperators has cyclomatic complexity 25 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 7 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"93740ec3cb4d5247b4b246e04d4be0eb80e5e6637cb43874c754bc2c13c2affb"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeInference.MakeUpperBoundInference (cyclomatic 25): TypeInference.MakeUpperBoundInference has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"05c1eb9ff189651d3a84628e25e24ff465bbd373883a73b6305e82ec935248b0"}},{"ruleId":"D1","level":"warning","message":{"text":"ReflectionDisassembler.DisassembleMethodHeaderInternal (cyclomatic 25): ReflectionDisassembler.DisassembleMethodHeaderInternal has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d87fc26d41ce4d51acd7a58881b5516cbb3641f30528f08d15bac0789b6bb0e"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolicEvaluationContext.Eval (cyclomatic 25): SymbolicEvaluationContext.Eval has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/SymbolicExecution.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"e39c8e9ca094d34402bac68d89696943684040c84c87b109985186d94b2257b8"}},{"ruleId":"D1","level":"warning","message":{"text":"ILReader.Comparison (cyclomatic 25): ILReader.Comparison has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1874}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ea5150ee8a5810d3328c16763f8cc87fea1d033948a8288f265bbcb357364d3"}},{"ruleId":"D1","level":"warning","message":{"text":"ILVariable.WriteDefinitionTo (cyclomatic 25): ILVariable.WriteDefinitionTo 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":"ICSharpCode.Decompiler/IL/ILVariable.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"adcb608db48a8886861e7139cb7b6b94f455b2215a7b4a6d84ef30d94fa8606a"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionTransforms.HandleSwitchExpression (cyclomatic 25): ExpressionTransforms.HandleSwitchExpression has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"4810fb6fd5d76046cccfc2a78cf91fb3261de26234a6afec1345f207034a5179"}},{"ruleId":"D1","level":"warning","message":{"text":"RemoveDeadVariableInit.Run (cyclomatic 25): RemoveDeadVariableInit.Run has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/RemoveDeadVariableInit.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5d0d6d61131d2014f976fc061d51d6d69de0b1312766d909dd0e4b01a43950"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformExpressionTrees.ConvertComparison (cyclomatic 25): TransformExpressionTrees.ConvertComparison has cyclomatic complexity 25 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 6 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"91effff667f4dc7f5a266b94d0bcd69a03c61665cae4ef1f6c92f3b2ed484ddf"}},{"ruleId":"D1","level":"warning","message":{"text":"UserDefinedLogicTransform.TransformDynamic (cyclomatic 25): UserDefinedLogicTransform.TransformDynamic 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":"ICSharpCode.Decompiler/IL/Transforms/UserDefinedLogicTransform.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a78a0ca8ff200497d5f2d86318371e2279e760ec47293e5ebd0efebf5adcc7a"}},{"ruleId":"D1","level":"warning","message":{"text":"BamlDecompilerTypeSystem.BamlDecompilerTypeSystem.ctor (cyclomatic 25): BamlDecompilerTypeSystem.BamlDecompilerTypeSystem.ctor has cyclomatic complexity 25 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/BamlDecompilerTypeSystem.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"3709e592772abc674def3c3910132a39cf6295c72c7b84074a88482cfd6ef700"}},{"ruleId":"D1","level":"warning","message":{"text":"SharpTreeView.OnKeyDown (cyclomatic 25): SharpTreeView.OnKeyDown has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Controls/TreeView/SharpTreeView.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"e54d470948c6d5df854f3ac8819c8ef23850ebb950fe4ee9de0b0676f8ea9687"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.SetNewModifier (cyclomatic 24): CSharpDecompiler.SetNewModifier has cyclomatic complexity 24 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 10 belong to 5 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1549}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a6a63812d9b90b56c27069da538f30cdf6283bf01ac3ddc2f2cb8d5352017d6"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.HandleManagedPointerArithmetic (cyclomatic 24): ExpressionBuilder.HandleManagedPointerArithmetic 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1386}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c59a34e89918f8b78dc044040d90f971e67a46d0c20fe767ca7f39a457a3592"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.HandleCompoundAssignment (cyclomatic 24): ExpressionBuilder.HandleCompoundAssignment 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2076}}}],"partialFingerprints":{"codehealthFindingId/v1":"94c863d35bd9ee4f8665a1cf532f1517ff75bfd6b38cafb0bfd78f1b204b9418"}},{"ruleId":"D1","level":"warning","message":{"text":"InsertParenthesesVisitor.VisitCastExpression (cyclomatic 24): InsertParenthesesVisitor.VisitCastExpression 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"62dade8542e05588286e716abfce0a14be4eaa70b36fdd3553fb2fa9114722b5"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedGetHashCode (cyclomatic 24): RecordDecompiler.IsGeneratedGetHashCode 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9c8a7123936a1de8fec42fd96e3038ec2fecc91c422577a3ffe916fa20cf80"}},{"ruleId":"D1","level":"warning","message":{"text":"RequiredNamespaceCollector.CollectNamespaces (cyclomatic 24): RequiredNamespaceCollector.CollectNamespaces has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"c56dcad3c77ad7c5579faa5d60234b6a021878f84359def913919ec9f1cff500"}},{"ruleId":"D1","level":"warning","message":{"text":"PrettifyAssignments.VisitAssignmentExpression (cyclomatic 24): PrettifyAssignments.VisitAssignmentExpression 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":"ICSharpCode.Decompiler/CSharp/Transforms/PrettifyAssignments.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6c5ea765f69fd31dc5f609887d88ca735a72b9c709d46f83977cf257dc6e34"}},{"ruleId":"D1","level":"warning","message":{"text":"XmlDocumentationElement.CreateElements (cyclomatic 24): XmlDocumentationElement.CreateElements has cyclomatic complexity 24 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/XmlDocumentationElement.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"729dc3cce5b5962097444e41701fb1f4ff31bd4068b9fa85ce5829c8f18ea689"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteTryCatch (cyclomatic 24): RuntimeAsyncExceptionRewriteTransform.TryRewriteTryCatch 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"0616eeb219ab458aca51c9e66b5532f891d830c478c7b57902a93a60af6adf98"}},{"ruleId":"D1","level":"warning","message":{"text":"DeconstructionTransform.MatchAssignments (cyclomatic 24): DeconstructionTransform.MatchAssignments has cyclomatic complexity 24 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/DeconstructionTransform.cs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db2bd0744964cecc06e0c9a4e7893fd4e67f2251d92ffcd824cf7c1743eed27"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectCatchWhenConditionBlocks.MatchCatchWhenEntryPoint (cyclomatic 24): DetectCatchWhenConditionBlocks.MatchCatchWhenEntryPoint 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":"ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea0e19d17f631bf514458b23ac4ae827661f4f9088e51bfddf690afcdb04de4d"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicCallSiteTransform.TransformCallSites (cyclomatic 24): DynamicCallSiteTransform.TransformCallSites 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":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"983445f19f9e6dc4144f0ee963253df7772974593a9bd6ccaa89f46c39d170b5"}},{"ruleId":"D1","level":"warning","message":{"text":"NullableLiftingTransform.LiftCSharpUserEqualityComparison (cyclomatic 24): NullableLiftingTransform.LiftCSharpUserEqualityComparison 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb6712ce7a05c9ae09f848b804fd1a14fc285e278c6bb46a77e0f0bec30ce76"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.Run (cyclomatic 24): SwitchOnStringTransform.Run 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"523fa9bfb7d5069a55ccb2a0c6a14beb2612bc4daa0c798ff1c2afbd88805f7a"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.IsMatchingCompoundLoad (cyclomatic 24): TransformAssignment.IsMatchingCompoundLoad 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"05280f36da4d3b3b5d279eb0fb09eaacb96f03da6d588a075260da1a6438c942"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.TransformPostIncDecOperatorWithInlineStore (cyclomatic 24): TransformAssignment.TransformPostIncDecOperatorWithInlineStore 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"2324c983eb437bec9131d5a84b7d43c61e788284abfa6cd869a4f1d0221ad35a"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpBracketSearcher.GetStartType (cyclomatic 24): CSharpBracketSearcher.GetStartType 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":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"34144e71b0fd6db3595cb67eccc2c3c0caaec29043de6cb8c7608ccb2f371723"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpLanguage.DecompileAssembly (cyclomatic 24): CSharpLanguage.DecompileAssembly 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b31f8ee5b4642eff55a136cd97bd549887928daabdee503f07885035ee0cd9"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.HandleAccessorCall (cyclomatic 23): CallBuilder.HandleAccessorCall 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1712}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f35cadab5dc1d45e6f853c978d2315e799bf83e8927873e5a1a22413aa17992"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslateArrayInitializer (cyclomatic 23): ExpressionBuilder.TranslateArrayInitializer 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3685}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9661cfe5a13df64f5c0557837d298e87475a27ac78ec01ecccb2c1b782ccc31"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedDeconstruct (cyclomatic 23): RecordDecompiler.IsGeneratedDeconstruct 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":1171}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dc92658bfce3489ed2bc2bfc2ab220c2d1b3bdedded0c310df3cbc03c8033da"}},{"ruleId":"D1","level":"warning","message":{"text":"MemberLookup.AddMembers (cyclomatic 23): MemberLookup.AddMembers 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":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26468e9b7dfb0da58ade413f198a9e5f065a43ea720866d002e613dc242d749"}},{"ruleId":"D1","level":"warning","message":{"text":"StatementBuilder.TranslateSwitch (cyclomatic 23): StatementBuilder.TranslateSwitch 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"896893e7eda779f04ca5c9e49c96dacf06a2fa905ebc1646e0f4a89548241139"}},{"ruleId":"D1","level":"warning","message":{"text":"StatementBuilder.ConvertLoop (cyclomatic 23): StatementBuilder.ConvertLoop 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1325}}}],"partialFingerprints":{"codehealthFindingId/v1":"3923c6ed72e32d822f591ee2347de229f0a16c3aaf9c0650148f24abd47a0a5d"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertFloatingPointLiteral (cyclomatic 23): TypeSystemAstBuilder.ConvertFloatingPointLiteral has cyclomatic complexity 23 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1499}}}],"partialFingerprints":{"codehealthFindingId/v1":"a930d0747d71f716e46b340f84d4b10731a0abc99551f1f593688699ab01c7f3"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternStatementTransform.TransformForeachOnInlineArray (cyclomatic 23): PatternStatementTransform.TransformForeachOnInlineArray 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":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a02c9962927f9b2c0b49c2fdcfe50d3c8c4cb5ba5ca0c5a17b4fa5b364b7f5"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.NormalizeRuntimeAsyncFilter (cyclomatic 23): RuntimeAsyncExceptionRewriteTransform.NormalizeRuntimeAsyncFilter 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b9e1e46980d50a27b40a5ec199d20ad449f557a7cab2cf36b2b298376b4e858"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternMatchingTransform.DetectPropertySubPattern (cyclomatic 23): PatternMatchingTransform.DetectPropertySubPattern 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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"f04d4366724890f216f3b57e615bb4eee3adf7643ef590672341e806230d7df9"}},{"ruleId":"D1","level":"warning","message":{"text":"TextTokenWriter.WritePrimitiveType (cyclomatic 23): TextTokenWriter.WritePrimitiveType 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":"ICSharpCode.Decompiler/Output/TextTokenWriter.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7937a4e9c1b90ef15d4c4b8e0c18156ec3239f93f7f20e18d200aba8f265e8b"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataMethod.MetadataMethod.ctor (cyclomatic 23): MetadataMethod.MetadataMethod.ctor 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"53e7ea606bca96d87fbfd4d35d34468d40dddeb4fb26b2a032db1f8794537dac"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyCustomHandler.Deserialize (cyclomatic 23): PropertyCustomHandler.Deserialize 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":"ICSharpCode.BamlDecompiler/Handlers/Records/PropertyCustomHandler.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"da1d917bce106da7505df93581d107e0c857963de253d9960976607c9c8a9609"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoEventDecompiler.MatchSimpleCombineAssignment (cyclomatic 22): AutoEventDecompiler.MatchSimpleCombineAssignment 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":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca0219a3a71ffe6c570d540639e0d284dc799afd310d7173a4bf8d70eed9e393"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.DisambiguateDelegateReference (cyclomatic 22): CallBuilder.DisambiguateDelegateReference 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":2015}}}],"partialFingerprints":{"codehealthFindingId/v1":"795ed02be63ba3a2b9bc4f4c57580fd6370b41e652487efc364adfa43a0fa034"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslateTarget (cyclomatic 22): ExpressionBuilder.TranslateTarget 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2734}}}],"partialFingerprints":{"codehealthFindingId/v1":"792ab4b0773341ebf5b306cd9ae47816255bd404025b5aa961e08bee84c971eb"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.VisitIfInstruction (cyclomatic 22): ExpressionBuilder.VisitIfInstruction 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3956}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb62dc6543fa986658cfb8ae48bf7a47631d664e0bdd855274b821f8a63f8038"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpAmbience.WriteMemberDeclarationName (cyclomatic 22): CSharpAmbience.WriteMemberDeclarationName 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"400059699e1c0c8863290c87b73b344992f9aba4ab32d01676ac682feede103c"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpOutputVisitor.PrintInitializerElements (cyclomatic 22): CSharpOutputVisitor.PrintInitializerElements has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"56e302e952e2356fc43b7bd816142419d6b42b70699e8633b71cc3930b316458"}},{"ruleId":"D1","level":"warning","message":{"text":"ReflectionDisassembler.WriteSecurityDeclarations (cyclomatic 22): ReflectionDisassembler.WriteSecurityDeclarations 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"519b283ac1d06ed2d2db60f4da90ef7bf8f67da190075f4448d4fadacf7b5edd"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.AnalyzeMoveNext (cyclomatic 22): AsyncAwaitDecompiler.AnalyzeMoveNext 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bf6d3def674c2ab80b8ab19f4768317475b7a42c91a5a33abc272eef490842e"}},{"ruleId":"D1","level":"warning","message":{"text":"ConditionDetection.CompareBlockExitPriority (cyclomatic 22): ConditionDetection.CompareBlockExitPriority 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":"ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7a605be2d9ca0834e7c0bc9ead9d31c81db600c18a98662e0c15f08e7a51f3"}},{"ruleId":"D1","level":"warning","message":{"text":"ILReader.DecodeCall (cyclomatic 22): ILReader.DecodeCall 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1731}}}],"partialFingerprints":{"codehealthFindingId/v1":"db7accdf538cb1ff410785d040639501356e262788f0c895b4dd2cfd71774784"}},{"ruleId":"D1","level":"warning","message":{"text":"PointerArithmeticOffset.Detect (cyclomatic 22): PointerArithmeticOffset.Detect 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":"ICSharpCode.Decompiler/IL/PointerArithmeticOffset.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"60a10d3b1a6b44e8199a3e47ca659792e328164825edc65bc9fa3bf910032b2a"}},{"ruleId":"D1","level":"warning","message":{"text":"AssignVariableNames.GetNameByType (cyclomatic 22): AssignVariableNames.GetNameByType 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":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"8324e4f7e015420f02da0c810f9e7d83d5ae2bfa1276f5f9c833bbe13fb7e9b4"}},{"ruleId":"D1","level":"warning","message":{"text":"ExtractionContext.Extract (cyclomatic 22): ExtractionContext.Extract has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ILExtraction.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b12ff0c83888a03cd37521f2112d83e691b311adc9ab93e8564999eed54813b"}},{"ruleId":"D1","level":"warning","message":{"text":"ProxyCallReplacer.Run (cyclomatic 22): ProxyCallReplacer.Run 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":"ICSharpCode.Decompiler/IL/Transforms/ProxyCallReplacer.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"d55d731e62dec885939fb1fd53601cb88be8a0dc0768abaaed28e082026ed9f1"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataTableDumper.FormatValue (cyclomatic 22): MetadataTableDumper.FormatValue 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":"ICSharpCode.ILSpyCmd/MetadataTableDumper.cs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ace9ffd664219c8f6413db1a9539a24914c45f4d58a38e4e0bb766158a0fb4b"}},{"ruleId":"D1","level":"warning","message":{"text":"Lexer.ReadEscapeSequence (cyclomatic 22): Lexer.ReadEscapeSequence 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":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21d5b920b8e9ceafa6a278ff6357752745b44c7026663608014435ed3b9756b"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpLanguage.GetEntityName (cyclomatic 22): CSharpLanguage.GetEntityName 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c456b351bdce9bd58763bbd44a345b9ba306ed0754ddd3eecbd59303d675243"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.IsUnambiguousCall (cyclomatic 21): CallBuilder.IsUnambiguousCall 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1554}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cbb42973c510c0b505f0a5b34eb1cb7c1566d1eef43adb4f1bf037b8c243b15"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.HandleRangeConstruction (cyclomatic 21): CallBuilder.HandleRangeConstruction has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":2245}}}],"partialFingerprints":{"codehealthFindingId/v1":"219a1bf8bac8605ba8f2349f02c6f0e1464dd2d2fec7edd7508d3e68ec7d88c8"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedEqualityContract (cyclomatic 21): RecordDecompiler.IsGeneratedEqualityContract has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8f143a0214e2a5de0e3a38840ea27a0e7dc0b5ac1fea3c729fc7f8dd7b75858"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.BetterConversionTarget (cyclomatic 21): CSharpConversions.BetterConversionTarget 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1681}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb198b2a69909f4e883d9427fc18e87cb7f8d9cd92ed3ed07702cc403f0020d9"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.ResolveInvocation (cyclomatic 21): CSharpResolver.ResolveInvocation 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2244}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ffd2c973fd5a5936cd29efa3e58a8e4204d55091ca3d8430093b92b79560a54"}},{"ruleId":"D1","level":"warning","message":{"text":"OverloadResolution.BetterParamsCollectionType (cyclomatic 21): OverloadResolution.BetterParamsCollectionType 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":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":838}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c8e53f9c537850688b77428ec2446a4b4a54c5145a2f252c60e0bcd552c2d0"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertAttributes (cyclomatic 21): TypeSystemAstBuilder.ConvertAttributes has cyclomatic complexity 21 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dd878a6813b9088906d62a292307ec14d817005ff9a1f769473d5c0e12bdefc"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertAccessor (cyclomatic 21): TypeSystemAstBuilder.ConvertAccessor has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2204}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c79071fe199f861e6054118de91d5ff46d21383d544ef13ffc8a151ce5b3c0a"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.TryEvaluateDecimalConstant (cyclomatic 21): ConstructorInitializerAnalyzer.TryEvaluateDecimalConstant has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":781}}}],"partialFingerprints":{"codehealthFindingId/v1":"42ca2fb256f0091d6eac90089b519b7d62d64a0f9cb4717b7a744263e9375f33"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchAsyncEnumeratorCreationPattern (cyclomatic 21): AsyncAwaitDecompiler.MatchAsyncEnumeratorCreationPattern 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4dc6e7bc85636ddba980028a496efe057e13411beee070d8e16c57ebe498156"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchAnalysis.AnalyzeBlock (cyclomatic 21): SwitchAnalysis.AnalyzeBlock 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":"ICSharpCode.Decompiler/IL/ControlFlow/SwitchAnalysis.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22b55e1190d1ef9d4bacb98e8c3333961e35ae561616821877e1dc11e30b6c4"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionTransforms.VisitComp (cyclomatic 21): ExpressionTransforms.VisitComp has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a58aad68e4b90d72537542251a92ad56688c74082f96ceb84fa2d22ad316e2"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalFunctionDecompiler.PropagateClosureParameterArguments (cyclomatic 21): LocalFunctionDecompiler.PropagateClosureParameterArguments has cyclomatic complexity 21 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4619b6d3da78da653451fe125eb4063872037564975ec1818566a19236dd3ff"}},{"ruleId":"D1","level":"warning","message":{"text":"NullableLiftingTransform.LiftCSharpEqualityComparison (cyclomatic 21): NullableLiftingTransform.LiftCSharpEqualityComparison 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"940cb86ce5777e31bd45376431211ac2fa0d5f8059cbd3343e8fba96648a7034"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.MatchStringEqualityComparison (cyclomatic 21): SwitchOnStringTransform.MatchStringEqualityComparison 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1754}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ca95816e105f900a37a1ad1e798da0697c0953364bb29ec3f9856d0fc0656a"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformDisplayClassUsage.ValidateDisplayClassUses (cyclomatic 21): TransformDisplayClassUsage.ValidateDisplayClassUses 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be6ee73d469ef9c769aa2f53399ee75e755e6a85c329938f1850abe85d1054c"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformDisplayClassUsage.VisitStLoc (cyclomatic 21): TransformDisplayClassUsage.VisitStLoc 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"204a36810619e10365e30c581c1d599d04642f5d0e0409a41869dd246aed8d52"}},{"ruleId":"D1","level":"warning","message":{"text":"AttributeListBuilder.ConvertMarshalInfo (cyclomatic 21): AttributeListBuilder.ConvertMarshalInfo 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/AttributeListBuilder.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"01cf2ef623b229f2601ffb3f6d05f54b50f6a73e3e8019b822b75d486dbd5478"}},{"ruleId":"D1","level":"warning","message":{"text":"InheritanceHelper.GetDerivedMember (cyclomatic 21): InheritanceHelper.GetDerivedMember 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":"ICSharpCode.Decompiler/TypeSystem/InheritanceHelper.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e6f5898bb03efcd9d5dfb8eac51c11aef53ac9100fe425aaa77ec45e4e8f9ba"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.BuildArgumentList (cyclomatic 20): CallBuilder.BuildArgumentList 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb07593d52a22ad11a8dba55a403ed58cb9a9fcdbe35116e362984b1f8ae727"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.Decompile (cyclomatic 20): CSharpDecompiler.Decompile 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1286}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5ceb044b6ff708d53d22570beb6370fc44c9be2054f846297a84d32b45f11da"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cyclomatic 20): CSharpDecompiler.DoDecompile has cyclomatic complexity 20 (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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2515}}}],"partialFingerprints":{"codehealthFindingId/v1":"352c539b03fc14ab8f46323ff32f5fc2179c4e6d8b30962dc34c9f6abbfebd6c"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cyclomatic 20): CSharpDecompiler.DoDecompile has cyclomatic complexity 20 (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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2583}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb3616b90ca3065b84111dd1ffe278c4a0f2eb8a7884c771ab64aabc03d166b"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslateStackAllocInitializer (cyclomatic 20): ExpressionBuilder.TranslateStackAllocInitializer 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3773}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e0f3c0a47c0a5b0531acfb62510335af57fa1c9068c4d62d62297d22972be09"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.ImplicitConversion (cyclomatic 20): CSharpConversions.ImplicitConversion 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"44053ac5710345c07dbcd9187882d15b9f5f6c9335d3a1a21d047abe3cddcc95"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.LookInCurrentUsingScope (cyclomatic 20): CSharpResolver.LookInCurrentUsingScope 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1656}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1288650c197f42718150fdaef26197e7433876e7b1a78377c351b66a552f589"}},{"ruleId":"D1","level":"warning","message":{"text":"MemberLookup.CreateResult (cyclomatic 20): MemberLookup.CreateResult has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"e730d7d8a3c2ace48b68fb143cbaae683d16482abd4fb16354e60d7b4909bdf7"}},{"ruleId":"D1","level":"warning","message":{"text":"ReflectionDisassembler.DisassembleType (cyclomatic 20): ReflectionDisassembler.DisassembleType 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1598}}}],"partialFingerprints":{"codehealthFindingId/v1":"91fa1e5b18c9414c8cc5fd0bf26ac0f45b7640962123dce291f6ba4e3eb23b5c"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.ResolveEarlyReturnValue (cyclomatic 20): RuntimeAsyncExceptionRewriteTransform.ResolveEarlyReturnValue 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0df8abf654efda0934048a5b391103410ed98d5fe76f08cac0d2745b44e08b"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.Run (cyclomatic 20): YieldReturnDecompiler.Run 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"462ddd53c80a9df69223ddbca6f9298de9f0dba5304607504c7d17b541a9a836"}},{"ruleId":"D1","level":"warning","message":{"text":"ILReader.Cast (cyclomatic 20): ILReader.Cast 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1398}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26b916e50f7a3129bf8ccc324f059cf1c79338debb40b53e29dacda3b6837ba"}},{"ruleId":"D1","level":"warning","message":{"text":"IntroduceNativeIntTypeOnLocals.Run (cyclomatic 20): IntroduceNativeIntTypeOnLocals.Run 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":"ICSharpCode.Decompiler/IL/Transforms/IntroduceNativeIntTypeOnLocals.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"d96829216dc29d1316447ddd1b314b928c6acb9f73c1c34538788f8abc0f0f4c"}},{"ruleId":"D1","level":"warning","message":{"text":"NullPropagationTransform.IsFallbackBlock (cyclomatic 20): NullPropagationTransform.IsFallbackBlock 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":"ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29d8d047826388ffbc7e44bbb5faa296efd88ef1578b0a65c4cc5ec9aaac3d9"}},{"ruleId":"D1","level":"warning","message":{"text":"ReduceNestingTransform.ReduceSwitchNesting (cyclomatic 20): ReduceNestingTransform.ReduceSwitchNesting 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":"ICSharpCode.Decompiler/IL/Transforms/ReduceNestingTransform.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d1dc6c3ba06ce461cd3a2a583e33420c07ed32593db32f7150bb1eabc9aa4a9"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnNullableTransform.MatchSwitchOnNullable (cyclomatic 20): SwitchOnNullableTransform.MatchSwitchOnNullable 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnNullableTransform.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c6cc92e24e740e1678115fe765d702409477a35aa674c57e2661b12d754235"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnNullableTransform.MatchRoslynSwitchOnNullable (cyclomatic 20): SwitchOnNullableTransform.MatchRoslynSwitchOnNullable 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnNullableTransform.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87fdc8be57bebede03c01581a4e3cc55f971ed26e7e2415943ba5a88fec6878"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.MatchingGetterAndSetterCalls (cyclomatic 20): TransformAssignment.MatchingGetterAndSetterCalls 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0cacfd8dfd1d330e498f8e0edaae3ef043807507dd9c66d98225af0088d2891"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpHighlightingTokenWriter.WriteIdentifier (cyclomatic 20): CSharpHighlightingTokenWriter.WriteIdentifier 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":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ea9f7bd7c8908921e4f297ec1082ae6739b4f55ec99077dd9b97897d9ae959c"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.ConvertField (cyclomatic 19): ExpressionBuilder.ConvertField 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cd93144699a585009967185a5dd3369305c4289ce7ee8002d7cd19b06835c5c"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordDecompiler.MethodIsGenerated (cyclomatic 19): RecordDecompiler.MethodIsGenerated has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c4322cb4b20808b514e7bd3196b6e45d36337c590805f5b4952df6d2626c6e2"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpResolver.ResolveCast (cyclomatic 19): CSharpResolver.ResolveCast 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1397}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf0b2081c7c161da3431ec4864b8f7dfc1d9db71b68a16f26e43b0076621abac"}},{"ruleId":"D1","level":"warning","message":{"text":"MemberLookup.GetAccessibleMembers (cyclomatic 19): MemberLookup.GetAccessibleMembers 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":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae5623f0fe6838dcb02693e1384ca43d0ce90affbfb5c0ccaeae81a27e716644"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeInference.PhaseTwo (cyclomatic 19): TypeInference.PhaseTwo has cyclomatic complexity 19 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a942cb94db3cb3f1cf1c6c3acbcc723b84827914f6def3356dcd14c0b53187e"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeInference.FindTypesInBounds (cyclomatic 19): TypeInference.FindTypesInBounds 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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"a28424a9bf6033037508c0a9d30199bd31a5884327de4518804bd1d35a954a17"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ApplyShortAttributeNameIfPossible (cyclomatic 19): TypeSystemAstBuilder.ApplyShortAttributeNameIfPossible has cyclomatic complexity 19 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":926}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b89de635075494c831a68de7ee2d298daca8318988c05c6644a905436d6b39"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeParameterConstraint (cyclomatic 19): TypeSystemAstBuilder.ConvertTypeParameterConstraint 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2609}}}],"partialFingerprints":{"codehealthFindingId/v1":"c782134bd3552a6123835b102cbdc5c6a9aae2e3c3ce192b1f82b1d6b32c6951"}},{"ruleId":"D1","level":"warning","message":{"text":"InitializerSequence.Analyze (cyclomatic 19): InitializerSequence.Analyze 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":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"4849111965de92aad9bf242f318462e142750cea41afdab26f8e04c5fb6ddeed"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.MoveFieldInitializersToDeclarations (cyclomatic 19): ConstructorInitializerAnalyzer.MoveFieldInitializersToDeclarations 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":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a0ec425af32ff60dc8483e4415f54d0235fbcd9ceb55bc9c1d3a722ea6ca126"}},{"ruleId":"D1","level":"warning","message":{"text":"IdStringProvider.FindMemberInType (cyclomatic 19): IdStringProvider.FindMemberInType has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf31faed84fba94cafb0dcf5443bbf0dd50f71468e742e57e2fa9407606dca50"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.TranslateThisCopyAccess (cyclomatic 19): AsyncAwaitDecompiler.TranslateThisCopyAccess has cyclomatic complexity 19 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"e500309a6cd8eab06eec39c9976375ca24cab26f6c54d768e28e378dd894c1e7"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchDisposeCombinedTokens (cyclomatic 19): AsyncAwaitDecompiler.MatchDisposeCombinedTokens 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"24d25b787b708d14e016f7326adda830eccdbec0379dc2f658e838687ae1a7a7"}},{"ruleId":"D1","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationVB (cyclomatic 19): CachedDelegateInitialization.CachedDelegateInitializationVB 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"24188cc7cb98f63e6c1b83c271609a2c5c25f69bed09ea9b7ef403f700121d8a"}},{"ruleId":"D1","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationVBWithClosure (cyclomatic 19): CachedDelegateInitialization.CachedDelegateInitializationVBWithClosure 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"28338d2f62afa2c39e6edc390c83c91855de245a91d09a051c0ab21c938368d2"}},{"ruleId":"D1","level":"warning","message":{"text":"ILInlining.FindLoadInNext (cyclomatic 19): ILInlining.FindLoadInNext 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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"7406745cbd1b416e8dafb8c84b705559d52f21b57b848a4c3bba39099616f956"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexRangeTransform.HandleLdElema (cyclomatic 19): IndexRangeTransform.HandleLdElema 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":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"f357db5b88bab95bf79c74a50e75b18ebd6677ecaa24b4d8d0d871e707b20e21"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformDisplayClassUsage.ResolveVariableToPropagate (cyclomatic 19): TransformDisplayClassUsage.ResolveVariableToPropagate 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f7e6b743f3797143500ff3e0f46605cb2b6054c60cefa3e9cdb22c0da65e409"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerTypeSystem.GetOptions (cyclomatic 19): DecompilerTypeSystem.GetOptions 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":"ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bfb4e0f86fe52cea9f7a93a4cc2317a83af8248c1c59910275091bf4eb01b73"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataModule.ResolveMethodReference (cyclomatic 19): MetadataModule.ResolveMethodReference has cyclomatic complexity 19 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a44a091f05ab2be84d4717600383c47f9f81a7e4e26a52bbf91221504ec19ef"}},{"ruleId":"D1","level":"warning","message":{"text":"Lexer.Next (cyclomatic 19): Lexer.Next 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":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d96827b68dd970e31c5445126b2f03865185da074c651436e20c33f1a1c3637"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoEventDecompiler.MatchCompareExchangeLoopMcs (cyclomatic 18): AutoEventDecompiler.MatchCompareExchangeLoopMcs 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":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"92a53152a5f169d66f550c9eaef182b68f390d357eee62c453ebe0e04eed89ab"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.ImplicitConstantExpressionConversion (cyclomatic 18): CSharpConversions.ImplicitConstantExpressionConversion has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a12283c3825dfea900f565dd5d45e4a58958fd26af964af6b255f63a1665066"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.UserDefinedExplicitConversion (cyclomatic 18): CSharpConversions.UserDefinedExplicitConversion has cyclomatic complexity 18 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3ba97aa54f3a185332abfce10f3383e09ca184a3f4384c39d6331abe9da5eed"}},{"ruleId":"D1","level":"warning","message":{"text":"SequencePointBuilder.GetSequencePoints (cyclomatic 18): SequencePointBuilder.GetSequencePoints 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":"ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1638d47bc751d930ddff9c7b46abbbd18f78cf804ce789386a2f099c5516b3a"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertNamespace (cyclomatic 18): TypeSystemAstBuilder.ConvertNamespace 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"5418d88cf22740f2204f4d0b70861fdd8322f2d516777f827054b3d53b415c50"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertConstantValue (cyclomatic 18): TypeSystemAstBuilder.ConvertConstantValue 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d6a505afb7ed0b3a0811d8ea78d0ac4e337387b375ee54d62878795635cbe57"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertMethod (cyclomatic 18): TypeSystemAstBuilder.ConvertMethod 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2359}}}],"partialFingerprints":{"codehealthFindingId/v1":"73794c43ec95fc93c0889db7318b27cb252324d286dc90452d274a92c462a45f"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternStatementTransform.TransformAutomaticProperty (cyclomatic 18): PatternStatementTransform.TransformAutomaticProperty has cyclomatic complexity 18 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"afe17a96a808863ad0511265a4267dfa5ae22a26ce53675b9042a4f9ca1d47ba"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerException.GetStackTrace (cyclomatic 18): DecompilerException.GetStackTrace 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":"ICSharpCode.Decompiler/DecompilerException.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"19642bbe7549991a326d6b106fa7c85fafe420a10d557146bbfa4a3e85c800ec"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.CheckSetResultReturnBlock (cyclomatic 18): AsyncAwaitDecompiler.CheckSetResultReturnBlock 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":870}}}],"partialFingerprints":{"codehealthFindingId/v1":"be0f3a92dac405e466e7363a5445289c0c9ba8572298cb99b6f2776b04538709"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectPinnedRegions.IsNullSafeArrayToPointerPattern (cyclomatic 18): DetectPinnedRegions.IsNullSafeArrayToPointerPattern 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"874ed1e6156fd2e29e57e63367ebc7573b8a2b2ca3827e95ab245dc75e32e8d9"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.Run (cyclomatic 18): RuntimeAsyncExceptionRewriteTransform.Run 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"21feb73a54e49b052234f0d50fb08b2077b1ba8ec41451ca1cbad2e0dd87aef2"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.TranslateFieldsToLocalAccess (cyclomatic 18): YieldReturnDecompiler.TranslateFieldsToLocalAccess 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1151}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db48673d8b6f2b256f6e8ee8979c1300c613db0024114f6950c22229eb9dca7"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.CleanSkipFinallyBodies (cyclomatic 18): YieldReturnDecompiler.CleanSkipFinallyBodies 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1409}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f0371382bba425335480ecad656a65ab740bee0732ba5ec5ecdc052f476800"}},{"ruleId":"D1","level":"warning","message":{"text":"AssignVariableNames.GetNameFromInstruction (cyclomatic 18): AssignVariableNames.GetNameFromInstruction 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":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba41b02aad28233953e6d875f4ad8af283812872ed49d557b6823bdb2ad5a57"}},{"ruleId":"D1","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationWithLocal (cyclomatic 18): CachedDelegateInitialization.CachedDelegateInitializationWithLocal has cyclomatic complexity 18 (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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d17f0b542156861252fe70b7b132536b93bc6a4d4ce076301d1478ec2dab2d0"}},{"ruleId":"D1","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationRoslynInStaticWithLocal (cyclomatic 18): CachedDelegateInitialization.CachedDelegateInitializationRoslynInStaticWithLocal has cyclomatic complexity 18 (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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fee4962bd6ea944ac277431e6ea9f67e56441418ce01487085cee78dba596f2"}},{"ruleId":"D1","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationRoslynWithLocal (cyclomatic 18): CachedDelegateInitialization.CachedDelegateInitializationRoslynWithLocal has cyclomatic complexity 18 (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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d636ab56ab4e7176c8eafb1ac81fbecd84fc1623b6825c586cb1fdc898293fc"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicCallSiteTransform.MakeDynamicInstruction (cyclomatic 18): DynamicCallSiteTransform.MakeDynamicInstruction 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":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"d694fb9b0b868e20412e002efb93a1fe817f84f496c2ba366a5d9488ebda4ad0"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexMethods.IndexMethods.ctor (cyclomatic 18): IndexMethods.IndexMethods.ctor has cyclomatic complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b9b00074880162746701a2fca0992a4f313a1fd54e784bf193ff42ea4ae10cb"}},{"ruleId":"D1","level":"warning","message":{"text":"IntroduceDynamicTypeOnLocals.Run (cyclomatic 18): IntroduceDynamicTypeOnLocals.Run 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":"ICSharpCode.Decompiler/IL/Transforms/IntroduceDynamicTypeOnLocals.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7fbf41bbe330cb15916dea273e007d2934047fcec68412646b1163bc387a5ea"}},{"ruleId":"D1","level":"warning","message":{"text":"NullableLiftingTransform.LiftNormal (cyclomatic 18): NullableLiftingTransform.LiftNormal 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"417edaf0b3370d31e0c20e7fd56123b63ccb2d377961f3d112b24af05d782c02"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.ExtractStringValuesFromInitBlock (cyclomatic 18): SwitchOnStringTransform.ExtractStringValuesFromInitBlock 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"5796ad3828b9e4d2f5031c70180afbe12614aca107ced0fdcc4091665527b8ee"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformArrayInitializers.HandleCpblkInitializer (cyclomatic 18): TransformArrayInitializers.HandleCpblkInitializer 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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7833296e1be8a6515151da633afb44a6c1e57948c92f8623fd73d0f2ab1ff17"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformAssignment.IsCompoundStore (cyclomatic 18): TransformAssignment.IsCompoundStore 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c04a57cbdbbceec24b31943f88166aa7900c0dce1c9da8f28958aa2ae3e3d2f"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformExpressionTrees.ConvertCall (cyclomatic 18): TransformExpressionTrees.ConvertCall 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"53cf0aa5daa55c0fcff2e77c103e8fb4c98b80c15a24ee8cfa1b347e77c88949"}},{"ruleId":"D1","level":"warning","message":{"text":"UsingTransform.TransformUsing (cyclomatic 18): UsingTransform.TransformUsing 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":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"828aacedb74cf09862bee24a3a2d063cf2bb9cd23cd049e1a6c1e1a74d8d7d94"}},{"ruleId":"D1","level":"warning","message":{"text":"TextTokenWriter.GetCurrentLocalDefinition (cyclomatic 18): TextTokenWriter.GetCurrentLocalDefinition 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":"ICSharpCode.Decompiler/Output/TextTokenWriter.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"b271f369d88103850ac527c1a9b83794fcf6f8e2466be985199d1cdfedfa79bd"}},{"ruleId":"D1","level":"warning","message":{"text":"TextTokenWriter.WriteToken (cyclomatic 18): TextTokenWriter.WriteToken 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":"ICSharpCode.Decompiler/Output/TextTokenWriter.cs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8ca36c9d065ac2f89b6d4f68a7bb75614940d2057fadd01a407f9757105a17d"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataTypeDefinition.GetFilteredAccessors (cyclomatic 18): MetadataTypeDefinition.GetFilteredAccessors has cyclomatic complexity 18 (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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"3780665fe2faf04ef338e6ab90ee15157b34589491cae45a479a70304ae51553"}},{"ruleId":"D1","level":"warning","message":{"text":"XamlPathDeserializer.Deserialize (cyclomatic 18): XamlPathDeserializer.Deserialize has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Xaml/XamlPathDeserializer.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"b680973d0c96d31eff36816cc226bc91ec637a170eb971927737c461c66ea28a"}},{"ruleId":"D1","level":"warning","message":{"text":"CompareEngine.CreateEntityTree (cyclomatic 18): CompareEngine.CreateEntityTree 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":"ILSpy/CompareEngine.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"80eb4677e24ec78163d3b0e61aed7cb0b093875d10fadddd6e3c7b6e971c82bf"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectCtorTransform.Run (cyclomatic 18): SelectCtorTransform.Run 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"73dbd7ebb9809a54e3360bb8fd4533819046f4b3a7eba1bb856f18ec11d4b42a"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerTextView.GetLineForBookmark (cyclomatic 18): DecompilerTextView.GetLineForBookmark 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":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"24db4f4eb51a46b6deb8196ec3bbf4f3d32c46bf75e321712abeff9b43ff63ec"}},{"ruleId":"D1","level":"warning","message":{"text":"AssemblyTreeNode.LoadChildren (cyclomatic 18): AssemblyTreeNode.LoadChildren has cyclomatic complexity 18 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"ILSpy/TreeNodes/AssemblyTreeNode.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f0600d59f9db132fe235d8dd9c861bb2df6cb891738ee26c1660e1b3f3b2129"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoEventDecompiler.MatchCompareExchangeLoop (cyclomatic 17): AutoEventDecompiler.MatchCompareExchangeLoop 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":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"f10fe907b3eebe61804f1149ea596dccf7885435e7c919a6b5104c39a6796b87"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.DetectBestEnumValueDisplayMode (cyclomatic 17): CSharpDecompiler.DetectBestEnumValueDisplayMode 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1975}}}],"partialFingerprints":{"codehealthFindingId/v1":"e978ce09726208170eae5763bc1ed3adc96fffa98f33828ead77db7c58fd984e"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cyclomatic 17): CSharpDecompiler.DoDecompile 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2383}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36070b4b35ec5e8e1f0ccb3b36572f35960adf1e03199b4946d70f19a28ca19"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.VisitStLoc (cyclomatic 17): ExpressionBuilder.VisitStLoc 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea1d16964a05e968a81d490d27ceb8b3165973f2ba1916651d65ecb41a20509"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.VisitComp (cyclomatic 17): ExpressionBuilder.VisitComp 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":871}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2eeac7bc2747d05bb4b37a4bdb0661b384e93118cd1a57aa3c7d5aee4a21505"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.HandlePointerArithmetic (cyclomatic 17): ExpressionBuilder.HandlePointerArithmetic 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"2409f3a9988432e1e23e0c9456bc4539662a95702189fbb1aec203ea0da6f0b3"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.HandleShift (cyclomatic 17): ExpressionBuilder.HandleShift 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1850}}}],"partialFingerprints":{"codehealthFindingId/v1":"377b1901209b0d736e7bb7bb7f6eb9701cdeab6b42832594952ddbaa7c84481f"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpOutputVisitor.VisitTypeDeclaration (cyclomatic 17): CSharpOutputVisitor.VisitTypeDeclaration 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":1561}}}],"partialFingerprints":{"codehealthFindingId/v1":"c89a6d75570ea9440329650fb231efe18cdf550a7cef0e90d6394f68b2c01549"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpOutputVisitor.VisitPropertyDeclaration (cyclomatic 17): CSharpOutputVisitor.VisitPropertyDeclaration 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":2651}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cc933d48ad344ba5ceedb1c0d8efa615b1415fd15d4f7e166d2dbe4a2761b6c"}},{"ruleId":"D1","level":"warning","message":{"text":"ILStructure.ILStructure.ctor (cyclomatic 17): ILStructure.ILStructure.ctor has cyclomatic complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ILStructure.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"4655a19d0f303a2e93bfdd3f45c37d5f4a7176afdc8e14d15caa6fb173698c7f"}},{"ruleId":"D1","level":"warning","message":{"text":"IdStringProvider.AppendTypeName (cyclomatic 17): IdStringProvider.AppendTypeName 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":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"288f5cf780423df2d530dcfd2f5592850c65d0a4822944e9b4e1babbf67ef4f3"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchVisualBasicStateMachineFieldAssignements (cyclomatic 17): AsyncAwaitDecompiler.MatchVisualBasicStateMachineFieldAssignements 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"05694b696686d091b3734dded2e3ef24448da1efd52bf5d0ed8342026dc1fa08"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.MatchIfChainDispatch (cyclomatic 17): RuntimeAsyncExceptionRewriteTransform.MatchIfChainDispatch 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"c861b8d72140f7fc3197f48c2e58afe186c638d319025b2deea7991385f750ca"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchDetection.InlineSwitchExpressionDefaultCaseThrowHelper (cyclomatic 17): SwitchDetection.InlineSwitchExpressionDefaultCaseThrowHelper has cyclomatic complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/SwitchDetection.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd6b34ca1e38d1c65ef23cbd79d125efce1e2cf5feb4304c26a80ed9ffa56b3"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.ConstructExceptionTable (cyclomatic 17): YieldReturnDecompiler.ConstructExceptionTable has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a0317bdf4741e9541888c6f2d34d7ba5898e222b82f18d24ab2de9f92c9f1e8"}},{"ruleId":"D1","level":"warning","message":{"text":"YieldReturnDecompiler.ReconstructTryFinallyBlocks (cyclomatic 17): YieldReturnDecompiler.ReconstructTryFinallyBlocks 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1247}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d1f96882bae55500eb51412b8c045d3295310da98837fe76d0358b6a32a058"}},{"ruleId":"D1","level":"warning","message":{"text":"ILReader.ReadBlock (cyclomatic 17): ILReader.ReadBlock 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"d005a2165bddbf2bdaadf88be6faa7eb29707c43cb9113cd484b5bd5fdf71086"}},{"ruleId":"D1","level":"warning","message":{"text":"CachedReadOnlySpanInitialization.DoTransform (cyclomatic 17): CachedReadOnlySpanInitialization.DoTransform 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/CachedReadOnlySpanInitialization.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"89d8135f4576c07a4aa234d611bd2f4bef63bfe5e36b10da6efafde93e7eed21"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionTransforms.VisitBinaryNumericInstruction (cyclomatic 17): ExpressionTransforms.VisitBinaryNumericInstruction has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"25e2854c249c3e47b8fafa1cd79bf18b5312eaaea0334f40c01c30e5db4f6ff8"}},{"ruleId":"D1","level":"warning","message":{"text":"HighLevelLoopTransform.MatchForLoop (cyclomatic 17): HighLevelLoopTransform.MatchForLoop 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":"ICSharpCode.Decompiler/IL/Transforms/HighLevelLoopTransform.cs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c7cf66435ff6c890a53c44fe535387f54a77d4896dcea2a3f5cfede5db7c3dd"}},{"ruleId":"D1","level":"warning","message":{"text":"InterpolatedStringTransform.IsKnownCall (cyclomatic 17): InterpolatedStringTransform.IsKnownCall has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/InterpolatedStringTransform.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"8934a380e183b626438a0fcc1fb34a1ad3cd8242e13aa0311fcb2d9e116a3c50"}},{"ruleId":"D1","level":"warning","message":{"text":"NullCoalescingTransform.TransformRefTypes (cyclomatic 17): NullCoalescingTransform.TransformRefTypes 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/NullCoalescingTransform.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f0aa5ec96f2b41a504e24cd9f786ca8a2cee5dd9da32f1847ed4f95e96d730"}},{"ruleId":"D1","level":"warning","message":{"text":"NullPropagationTransform.TransformNullPropagationOnUnconstrainedGenericExpression (cyclomatic 17): NullPropagationTransform.TransformNullPropagationOnUnconstrainedGenericExpression 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f9e6e48f14a1bf816186b1c34766d66741388f63140a0d8c78592d3b475ad7"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.ScanHashtableInitializerBlocks (cyclomatic 17): SwitchOnStringTransform.ScanHashtableInitializerBlocks 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce597c84b4413c36c45ba5b29bc43f3270a32443ce32abb9e19a664fd47dd41"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.MatchRoslynEmptyStringCaseBlockHead (cyclomatic 17): SwitchOnStringTransform.MatchRoslynEmptyStringCaseBlockHead 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1654}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d089ddd42737269d25a4f519fcef5b913051806692292c5f8d97030bd9e0dc8"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformDisplayClassUsage.ValidateConstructor (cyclomatic 17): TransformDisplayClassUsage.ValidateConstructor 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3675ae3a2ac79473cc9c1df5060cee6ba252e6ba9aad708f8df9a4af52510f9"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformDisplayClassUsage.HandleMonoStateMachine (cyclomatic 17): TransformDisplayClassUsage.HandleMonoStateMachine has cyclomatic complexity 17 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbb714b3f7b47a58940b88e1ea17800d569f194271f62f397b28590c04eb02aa"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformExpressionTrees.ConvertBinaryNumericOperator (cyclomatic 17): TransformExpressionTrees.ConvertBinaryNumericOperator has cyclomatic complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaa49d2d36029a7661275e1616d5d0cd09da72480326f13dbfb1c73a901d8c64"}},{"ruleId":"D1","level":"warning","message":{"text":"UsingTransform.MatchNullCheckOrTypeCheck (cyclomatic 17): UsingTransform.MatchNullCheckOrTypeCheck 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":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"0821b43684b2ce6d6f356973ff41627ca8953703024282f07b313d147f634c06"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionPointerType.FromSignature (cyclomatic 17): FunctionPointerType.FromSignature 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":"ICSharpCode.Decompiler/TypeSystem/FunctionPointerType.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfbd771cdb2945f1acac1c852e8e39f7656a80ec1b7468c130d52c0d8253a2b2"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataTypeDefinition.GetAttributes (cyclomatic 17): MetadataTypeDefinition.GetAttributes 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"b82bda13b3f6523be2969e853447d08a3494c216767e78a6c8c709566c86dc67"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataModule.GuessFakeMethodAccessor (cyclomatic 17): MetadataModule.GuessFakeMethodAccessor 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":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff90c6af01ccc786a3413f80810bba0642e19af1332bdba1b9f43fd7aa23f5b"}},{"ruleId":"D1","level":"warning","message":{"text":"ResourcesFile.ResourcesFile.ctor (cyclomatic 17): ResourcesFile.ResourcesFile.ctor 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":"ICSharpCode.Decompiler/Util/ResourcesFile.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c5637487594f57892c2fc8612a6504f17080f88efe5c34f7e574d51e0a07b9b"}},{"ruleId":"D1","level":"warning","message":{"text":"SharpTreeNode.OnChildrenChanged (cyclomatic 17): SharpTreeNode.OnChildrenChanged 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":"ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a48da782deeb108ebec8b5e7ca261a06a383431b8d77cc5d69ff081790522ab"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataColumnBuilder.BuildHeader (cyclomatic 17): MetadataColumnBuilder.BuildHeader has cyclomatic complexity 17 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. 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":"ILSpy/Metadata/MetadataColumnBuilder.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea0b3450cf81573479634e616fd4b001cc33bf7a1091c99105e327574431a73"}},{"ruleId":"D1","level":"warning","message":{"text":"MainMenu.AppendTabSection (cyclomatic 17): MainMenu.AppendTabSection has cyclomatic complexity 17 (threshold 15). Most of this is not in the body itself: 7 of the 17 points are its own statements and the rest belongs to one function literal inside it that branches (line 380). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Views/MainMenu.axaml.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e6c1d40eb3923f06d877cffffef095af212c61cf589aab107c4308bb807bd2"}},{"ruleId":"D1","level":"warning","message":{"text":"CallBuilder.TokenizeFormatString (cyclomatic 16): CallBuilder.TokenizeFormatString 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f0b4f5c4c5cb68e6dbe48d531c13651dddded21786d2a1a2885fb41c404d901"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.HandlePointerSubtraction (cyclomatic 16): ExpressionBuilder.HandlePointerSubtraction 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1545}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb62daea7d6abd0b500d6510fe5f23302312c171af7185be501ccf43d139e06c"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.AdjustConstantToType (cyclomatic 16): ExpressionBuilder.AdjustConstantToType 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3874}}}],"partialFingerprints":{"codehealthFindingId/v1":"567ad0135f3fe1f62fea0987e7fd7799faa6c3363966b332c526618736894cbc"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionBuilder.TranslateSwitchValue (cyclomatic 16): ExpressionBuilder.TranslateSwitchValue 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":4059}}}],"partialFingerprints":{"codehealthFindingId/v1":"60ed539fca6aa93d2a768983594325c4e33d2338533f90a7503b20c919301b91"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpOutputVisitor.VisitIndexerDeclaration (cyclomatic 16): CSharpOutputVisitor.VisitIndexerDeclaration 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":2486}}}],"partialFingerprints":{"codehealthFindingId/v1":"28dcdf586cf3d5f5461e0aec3e1efca0e153bd5177e25af6f9eb2d0173d26f26"}},{"ruleId":"D1","level":"warning","message":{"text":"InsertRequiredSpacesDecorator.WriteToken (cyclomatic 16): InsertRequiredSpacesDecorator.WriteToken has cyclomatic complexity 16 (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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertRequiredSpacesDecorator.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"37f0508e0a517d01809cf15b904a7bb0e3570dda6d202ce45a00b9847f03480e"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.StandardImplicitConversion (cyclomatic 16): CSharpConversions.StandardImplicitConversion 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"c258f452cf42f8470fd8a17e49440e6fe6e1274a75b6170cfcf9b72f736728fa"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpConversions.ImplicitNumericConversion (cyclomatic 16): CSharpConversions.ImplicitNumericConversion has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3bdd736b883682a0657994a8a09e2ec7999ffaf8a2b8cc2ad5c16f0bbed1b82"}},{"ruleId":"D1","level":"warning","message":{"text":"MemberLookup.Lookup (cyclomatic 16): MemberLookup.Lookup has cyclomatic complexity 16 (threshold 15). Of this number, 13 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"6239f9dea1ddc7f2a814e585c86f739bdf94a221b928775021208f48569a1902"}},{"ruleId":"D1","level":"warning","message":{"text":"OverloadResolution.ValidateConstraints (cyclomatic 16): OverloadResolution.ValidateConstraints has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"302d5ffe62a44fecd944a2d0c23db4044ffb3801cd3686e5f2acad6d39769a7a"}},{"ruleId":"D1","level":"warning","message":{"text":"StatementBuilder.CanBeDeconstructedInForeach (cyclomatic 16): StatementBuilder.CanBeDeconstructedInForeach 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f1859b6c285255514e31b1e26a66b6cb5caa538663b4272a98ef8f32c9d2e7"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSystemAstBuilder.IsSpecialConstant (cyclomatic 16): TypeSystemAstBuilder.IsSpecialConstant 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f29c2c2b232938c43c4597d08d78d5e6048f527f05e96ae258b52c6ce22e199"}},{"ruleId":"D1","level":"warning","message":{"text":"TranslatedExpression.ConvertToBoolean (cyclomatic 16): TranslatedExpression.ConvertToBoolean has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"975e64b90f12fa0fb0d6230d6c702273485df62fae3fc4ee2bec2a404fe8feb0"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerSettings.SetLanguageVersion (cyclomatic 16): DecompilerSettings.SetLanguageVersion 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":"ICSharpCode.Decompiler/DecompilerSettings.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b7313d0c1540094e9ab7fc49d116d0a345847010dcb83e912898ecd441e43aa"}},{"ruleId":"D1","level":"warning","message":{"text":"DisassemblerHelpers.EscapeString (cyclomatic 16): DisassemblerHelpers.EscapeString 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":"ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ced4e22ab6b51efeacc4a461138c1a09327f00de87bcf249f0658fdb085d6c1"}},{"ruleId":"D1","level":"warning","message":{"text":"ILStructure.AddNestedStructure (cyclomatic 16): ILStructure.AddNestedStructure 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":"ICSharpCode.Decompiler/Disassembler/ILStructure.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"53085a13ee033fe3b4efc854d7320e4cc4fe33047eb8af1192eff1613d74ddbf"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncAwaitDecompiler.CleanUpBodyOfMoveNext (cyclomatic 16): AsyncAwaitDecompiler.CleanUpBodyOfMoveNext has cyclomatic complexity 16 (threshold 15). Of this number, 9 points are the body\u0027s own statements and 7 belong to 3 function literals inside it that branch. To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3cbb05493cf639e9046e5ce6f0ad2d96b2d675a637fb855c4e081de82142cab"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectPinnedRegions.IsNullSafeArrayToPointerNotNullBlock (cyclomatic 16): DetectPinnedRegions.IsNullSafeArrayToPointerNotNullBlock 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"f421ace9f3145c9f79035273f7c1614f54f779a59adb6322d0c02b9fde7a44d6"}},{"ruleId":"D1","level":"warning","message":{"text":"DetectPinnedRegions.ReplacePinnedVar (cyclomatic 16): DetectPinnedRegions.ReplacePinnedVar has cyclomatic complexity 16 (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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":825}}}],"partialFingerprints":{"codehealthFindingId/v1":"2522de9d493da39f2d4f27f98bac4ea70d1a9a1160c57128174755b9938bc076"}},{"ruleId":"D1","level":"warning","message":{"text":"LoopDetection.FindExitPoint (cyclomatic 16): LoopDetection.FindExitPoint 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":"ICSharpCode.Decompiler/IL/ControlFlow/LoopDetection.cs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f9d01591d358e2cfeee1635500ed62b3863b79f632421f745258bb4db44a1b1"}},{"ruleId":"D1","level":"warning","message":{"text":"LoopDetection.PrepareReverseCFG (cyclomatic 16): LoopDetection.PrepareReverseCFG 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":"ICSharpCode.Decompiler/IL/ControlFlow/LoopDetection.cs"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"53f604cc9aa23ddd77051ef371b746e4070da753837bdd99519730e257e0a1e3"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteTryFinally (cyclomatic 16): RuntimeAsyncExceptionRewriteTransform.TryRewriteTryFinally 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d42aaf16498fbb723dfbe97cf757408ff203cc59a95db883f69471492d6cf7"}},{"ruleId":"D1","level":"warning","message":{"text":"DeconstructInstruction.CheckInvariant (cyclomatic 16): DeconstructInstruction.CheckInvariant 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":"ICSharpCode.Decompiler/IL/Instructions/DeconstructInstruction.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"c434c73b6db4071af790cb944e74ca14dce10db4265d9ebab3c30f6e10e6a3bd"}},{"ruleId":"D1","level":"warning","message":{"text":"CopyPropagation.CanPerformCopyPropagation (cyclomatic 16): CopyPropagation.CanPerformCopyPropagation has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"21678871968e558421cf718bbbaae1a7c6b1feb1e0e760f403dd2cdb7bbb1f9a"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionTransforms.TransformDynamicAddAssignOrRemoveAssign (cyclomatic 16): ExpressionTransforms.TransformDynamicAddAssignOrRemoveAssign 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":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e6f6043d3c01c18720a36168616452d0b6892e98d5f6bfafce6a1e7ab8cfd1"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionTransforms.TransformCatchVariable (cyclomatic 16): ExpressionTransforms.TransformCatchVariable 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":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1a54718d4e69677d11dbd62110af4f82fca8ce26d1a4adba0f39414ba99a517"}},{"ruleId":"D1","level":"warning","message":{"text":"ILInlining.IsGeneratedTemporaryForAddressOf (cyclomatic 16): ILInlining.IsGeneratedTemporaryForAddressOf 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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37162f9b050e1d55b9b150894e353147a77cefcc6c43fbc5d1886d25b0a1d35"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalFunctionDecompiler.DetermineCaptureAndDeclarationScope (cyclomatic 16): LocalFunctionDecompiler.DetermineCaptureAndDeclarationScope 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":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"8671e07da6a9c3dd3e648708fc0296e48983b9e15abc72f82277ce373d944cfb"}},{"ruleId":"D1","level":"warning","message":{"text":"SwitchOnStringTransform.FindHashtableInitBlock (cyclomatic 16): SwitchOnStringTransform.FindHashtableInitBlock 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":968}}}],"partialFingerprints":{"codehealthFindingId/v1":"d133664ba1e69b4938da9dcf3e23d1fba1bf194bc850bc8f7654f8054a2e4046"}},{"ruleId":"D1","level":"warning","message":{"text":"ApplyAttributeTypeVisitor.VisitParameterizedType (cyclomatic 16): ApplyAttributeTypeVisitor.VisitParameterizedType 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":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02175a98039c9ff579b69196fc6ab5d8e5264bfe7b16802932761132bb02efa"}},{"ruleId":"D1","level":"warning","message":{"text":"LoadedAssembly.LoadCoreAsync (cyclomatic 16): LoadedAssembly.LoadCoreAsync 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":"ICSharpCode.ILSpyX/LoadedAssembly.cs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd077b8d325b31152895292e550cb132bf74dbacea3bca7132c9ab76531bee3"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractSearchStrategy.IsMatch (cyclomatic 16): AbstractSearchStrategy.IsMatch 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":"ICSharpCode.ILSpyX/Search/AbstractSearchStrategy.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"79c61a82ad5cf5b5c863e5837f647671cc89e22f21d2db2583518f8bd8421b98"}},{"ruleId":"D1","level":"warning","message":{"text":"GuessFileType.IsUTF8 (cyclomatic 16): GuessFileType.IsUTF8 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":"ICSharpCode.ILSpyX/Util/GuessFileType.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1bae63fe775cbdb0243c8462cb30bf38c4c81aec6662e819defb0dff4dd8b25"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyWithExtensionHandler.Translate (cyclomatic 16): PropertyWithExtensionHandler.Translate 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":"ICSharpCode.BamlDecompiler/Handlers/Records/PropertyWithExtensionHandler.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b6972e5e84fea514461724969cd039308fcb45523fd6004ae438c2ca0b181c2"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpHighlightingTokenWriter.GetCurrentMemberReference (cyclomatic 16): CSharpHighlightingTokenWriter.GetCurrentMemberReference has cyclomatic complexity 16 (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":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"742b6473110951e7efba083262d103c86be637acf0c05b5e334a0494c238adfa"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.MatchRoslynSwitchOnStringUsingLengthAndChar (cognitive 172): SwitchOnStringTransform.MatchRoslynSwitchOnStringUsingLengthAndChar has cognitive complexity 172 (threshold 15). Of this number, 171 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1195}}}],"partialFingerprints":{"codehealthFindingId/v1":"4979d6c9315ca18dd6b09236cb6099d056467cace007f204f974d28463af80f8"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicCallSiteTransform.ScanCallSiteInitBlock (cognitive 162): DynamicCallSiteTransform.ScanCallSiteInitBlock has cognitive complexity 162 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"d25a0d86d5037a16244b12dcdcd812a85a724e4db663f81f3d53ac838c8af97c"}},{"ruleId":"D2","level":"warning","message":{"text":"TranslatedExpression.ConvertTo (cognitive 149): TranslatedExpression.ConvertTo has cognitive complexity 149 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d9ad1d467ff2193152ceb78c9262c2e4b0588109772273f22c837d65222156"}},{"ruleId":"D2","level":"warning","message":{"text":"UsingTransform.MatchDisposeCheck (cognitive 133): UsingTransform.MatchDisposeCheck has cognitive complexity 133 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"1048bfc9d3ee1e1a80c182a3932d4083cfcaabae7363f9731c0d0cc6ca467ed0"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveBinaryOperator (cognitive 128): CSharpResolver.ResolveBinaryOperator has cognitive complexity 128 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc02c3514551515ba4299b2c04d69b0bacfc33757a125f6bada55a85eb4f9ce"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.ReadCodeMappingInfo (cognitive 117): CSharpDecompiler.ReadCodeMappingInfo has cognitive complexity 117 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f8f6c50c35c11ad278630679053afa4beba403e26214169692f6ad248f2f046"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.MemberIsHidden (cognitive 116): CSharpDecompiler.MemberIsHidden has cognitive complexity 116 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"84832ee8e64c05b8ba638daab0dda918f4e218e2be921d6b02b32108dffbd493"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cognitive 111): CSharpDecompiler.DoDecompile has cognitive complexity 111 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1630}}}],"partialFingerprints":{"codehealthFindingId/v1":"925e3086d68a1a571c09ede65fcbe0664ce87451195e4d99f9c95991dc4ae0e0"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableScope.VariableScope.ctor (cognitive 111): VariableScope.VariableScope.ctor has cognitive complexity 111 (threshold 15). Of this number, 108 points are the body\u0027s own statements and 3 belong to 3 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"c919a5ea07129709ff724a1f307dfa5606e60a905664ee7930e5ec87ea53ade3"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedEquals (cognitive 100): RecordDecompiler.IsGeneratedEquals has cognitive complexity 100 (threshold 15). Of this number, 99 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b455ad9ad4a4b4475b5e58bc1e8a5a9ac0a1fb256993bb741e561c2c0217d23"}},{"ruleId":"D2","level":"warning","message":{"text":"Lexer.ReadDigit (cognitive 100): Lexer.ReadDigit has cognitive complexity 100 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0f00dfc3a14c28a52146d2b41fa67df24c0e816df01f24255e45ed9ef39f38e"}},{"ruleId":"D2","level":"warning","message":{"text":"ILAmbience.ConvertSymbol (cognitive 99): ILAmbience.ConvertSymbol has cognitive complexity 99 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILAmbience.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a59faee74cd248b3edaade4078d996a82f5e41ff7cd16dcb2b12c77825d96a9"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexRangeTransform.Run (cognitive 98): IndexRangeTransform.Run has cognitive complexity 98 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"a879b3195a987a3dfb4aba01b19edb28c6a67d65373ffc50622ed83f36cf96a1"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.DetectPrimaryConstructor (cognitive 92): RecordDecompiler.DetectPrimaryConstructor has cognitive complexity 92 (threshold 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4dde2b4c1713e5d4fd76fb2a91a144d03edec3c8659fdc40b9ad239441119ce"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralSearchStrategy.MethodIsLiteralMatch (cognitive 90): LiteralSearchStrategy.MethodIsLiteralMatch has cognitive complexity 90 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/LiteralSearchStrategy.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed5da0d199187578443001645c4b713c15a5a64626fc5fb4f16008667a748841"}},{"ruleId":"D2","level":"warning","message":{"text":"AwaitInCatchTransform.Run (cognitive 88): AwaitInCatchTransform.Run has cognitive complexity 88 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"89be0ef9b60f6ec81d10bcc033368f34dda40a133e5fda4d0f1d3117b96844b3"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedPrintMembers (cognitive 86): RecordDecompiler.IsGeneratedPrintMembers has cognitive complexity 86 (threshold 15). Of this number, 85 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d1b394afb4c3c1a7d3cf832a747d81cff918ca0c3455dbceae5db37e4fb97b7"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformArrayInitializers.HandleSimpleArrayInitializer (cognitive 86): TransformArrayInitializers.HandleSimpleArrayInitializer has cognitive complexity 86 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"5704215a04f3a9b9f1b2f7dcf8ff6dd9c8c4216cd57f1ee31dc374db1ca68b22"}},{"ruleId":"D2","level":"warning","message":{"text":"IntroduceQueryExpressions.DecompileQuery (cognitive 85): IntroduceQueryExpressions.DecompileQuery has cognitive complexity 85 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd9914851562333bbec601e7703033debb33d6110d79ba70e3f5107f66d421f"}},{"ruleId":"D2","level":"warning","message":{"text":"FileUtility.NormalizePath (cognitive 85): FileUtility.NormalizePath has cognitive complexity 85 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/FileUtility.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"805900df6f66a526ab924e2bf80c7e08a52090ee68bc91cddf1ad698904351f8"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodBodyDisassembler.WriteInstruction (cognitive 82): MethodBodyDisassembler.WriteInstruction has cognitive complexity 82 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e66a7ec1536c8b939f7870049ccfa3562c3814a936d70390b43e9a4cc8360dd"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.Analyze (cognitive 80): ConstructorInitializerAnalyzer.Analyze has cognitive complexity 80 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"54198889bcd5a5f97ba053cf8acbd53280b01a31f37e39145b80cedc8da25318"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.ConvertBody (cognitive 80): YieldReturnDecompiler.ConvertBody has cognitive complexity 80 (threshold 15). Of this number, 79 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":855}}}],"partialFingerprints":{"codehealthFindingId/v1":"baf0d53f3f6f505623680655f6b7591dc4c222ec35a69d6dc225ba1047693bc3"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchTaskCreationPattern (cognitive 79): AsyncAwaitDecompiler.MatchTaskCreationPattern has cognitive complexity 79 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a5755edc8c306e0e44ae731c32bfe381763cfa6be97827ac4907af3c4a3201"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.AddMembers (cognitive 77): MemberLookup.AddMembers has cognitive complexity 77 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a1ea81cd46f36373f4eb246612b7d9476c24d02f3d6216024e6391aeb2c8611"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpBracketSearcher.SearchBracketBackward (cognitive 77): CSharpBracketSearcher.SearchBracketBackward has cognitive complexity 77 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1783a78d6d5b6b2da8679d9b171af2315e7031acd65101dced278aaa9ce4708b"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.GetRequiredTransformationsForCall (cognitive 76): CallBuilder.GetRequiredTransformationsForCall has cognitive complexity 76 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"080e55de110bdc824c3f4371bcb761d6ee10b037262e3fc3863e29f65f9200e1"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpBracketSearcher.SearchBracketForward (cognitive 76): CSharpBracketSearcher.SearchBracketForward has cognitive complexity 76 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"009aa0d4a570c365a863a2d4e10d999188f6375dcaeec9fd13857f2548b77cb2"}},{"ruleId":"D2","level":"warning","message":{"text":"RemoveCompilerGeneratedAssemblyAttributes.Run (cognitive 75): RemoveCompilerGeneratedAssemblyAttributes.Run has cognitive complexity 75 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/EscapeInvalidIdentifiers.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb8deeddf1b4ae984e76d681dccbfe5810ad9d74134bc7bf339001ff491ba69"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableLiftingTransform.Lift (cognitive 75): NullableLiftingTransform.Lift has cognitive complexity 75 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"5510904e3c70128483fe991386e5b3d44dc912340b68634aea03bfc4f8114b06"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.Build (cognitive 74): CallBuilder.Build has cognitive complexity 74 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"1035a05178db99aec69fde572df305a27d69d36c9ce30da8ffa932f5d77052be"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.LookupSimpleNameOrTypeName (cognitive 73): CSharpResolver.LookupSimpleNameOrTypeName has cognitive complexity 73 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1472}}}],"partialFingerprints":{"codehealthFindingId/v1":"af0da97decfa2443b6b5ba259ec0d6bc47f7da02e14c8012b0a9871ad98d5865"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataTableDumper.LoadRows (cognitive 71): MetadataTableDumper.LoadRows has cognitive complexity 71 (threshold 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":"ICSharpCode.ILSpyCmd/MetadataTableDumper.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb23dd4291d9ec29bd714184af51836cbace242775337a85da295cfa281682fe"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeHelper (cognitive 70): TypeSystemAstBuilder.ConvertTypeHelper has cognitive complexity 70 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"62f83ca014484284683dff1cb698d14dab8609d0749c86c7ec40fcf740122b02"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpAmbience.ConvertSymbol (cognitive 69): CSharpAmbience.ConvertSymbol has cognitive complexity 69 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1227ef68a0fd92fb24d938693b49f6145b8189916b06e5d8644a712a850f31"}},{"ruleId":"D2","level":"warning","message":{"text":"InstructionOutputExtensions.WriteTo (cognitive 69): InstructionOutputExtensions.WriteTo has cognitive complexity 69 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"97bc20d2b4e2ecaba7c6a58d5b1f95757610cbbcec9c6f7656f0e3f25b7112fd"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.SimplifyCascadingIfStatements (cognitive 69): SwitchOnStringTransform.SimplifyCascadingIfStatements has cognitive complexity 69 (threshold 15). Of this number, 68 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7b7397b81286652ed2eaefcf38f46da2de080990930db940657a5d5bf99c3fa"}},{"ruleId":"D2","level":"warning","message":{"text":"AccessPathElement.GetAccessPath (cognitive 69): AccessPathElement.GetAccessPath has cognitive complexity 69 (threshold 15). Of this number, 67 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"d36ee20aebcb58db8ed843b071a0d7570fdf4b692b337554becdc8f117f0ae28"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveUnaryOperator (cognitive 68): CSharpResolver.ResolveUnaryOperator has cognitive complexity 68 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b8e6e1532f82caa0e1da4c211e7522b3c868570b657ac3ed03d5011b83306c8"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtensionInfo.ExtensionInfo.ctor (cognitive 65): ExtensionInfo.ExtensionInfo.ctor has cognitive complexity 65 (threshold 15). Of this number, 64 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ExtensionInfo.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a271444ca43c60dccd2a18c361a8c7148644df56be0e66a0ae841a9b05b3bce"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.MatchLegacySwitchOnStringWithDict (cognitive 64): SwitchOnStringTransform.MatchLegacySwitchOnStringWithDict has cognitive complexity 64 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"91c1fa51c87c76281936807e9a3bbb517d93208eb8a7e6d0225b0b962122edc8"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.HandleCompoundAssign (cognitive 64): TransformAssignment.HandleCompoundAssign has cognitive complexity 64 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"66f2f66e964f33d1bb4f885c90d9b57830552f9b90f5e1c67a8c4cd1c898bf6b"}},{"ruleId":"D2","level":"warning","message":{"text":"AwaitInCatchTransform.MatchAwaitCatchHandler (cognitive 63): AwaitInCatchTransform.MatchAwaitCatchHandler has cognitive complexity 63 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"27e76576b871b3ddc8519a8ab66605610f3c00726f1d2283c1f3a7b06d3fb8c5"}},{"ruleId":"D2","level":"warning","message":{"text":"DeclareVariables.InsertVariableDeclarations (cognitive 62): DeclareVariables.InsertVariableDeclarations has cognitive complexity 62 (threshold 15). Of this number, 55 points are the body\u0027s own statements and 7 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbfdb93fac9538b35b7bb8064dcd270043e40c0f2a4d06920513150623e2c442"}},{"ruleId":"D2","level":"warning","message":{"text":"NullPropagationTransform.IsValidAccessChain (cognitive 62): NullPropagationTransform.IsValidAccessChain has cognitive complexity 62 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"a278c123e8eadb6f7046f43e4c45e0caac7273cc6399c4c298b6ff1ab84b5e4a"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpPrimitiveCast.CSharpPrimitiveCastChecked (cognitive 62): CSharpPrimitiveCast.CSharpPrimitiveCastChecked has cognitive complexity 62 (threshold 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":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"2069d8c501001b69dc97df4948e009f6833abe6ff053be47b73f0cc2c4223c93"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpPrimitiveCast.CSharpPrimitiveCastUnchecked (cognitive 62): CSharpPrimitiveCast.CSharpPrimitiveCastUnchecked has cognitive complexity 62 (threshold 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":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e38f51e63d2a651b94f15f869a1bf4b818612ff73c3913b1f15e79460bf3727"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertEnumValue (cognitive 61): TypeSystemAstBuilder.ConvertEnumValue has cognitive complexity 61 (threshold 15). Of this number, 60 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1306}}}],"partialFingerprints":{"codehealthFindingId/v1":"8236b7eed1d901c428828ec8521bc072666df122c2fa99326e0dd1749164877a"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.AnalyzeMoveNext (cognitive 61): YieldReturnDecompiler.AnalyzeMoveNext has cognitive complexity 61 (threshold 15). Of this number, 59 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f625e0594bbafea4380854aa6ebf86160aa0f4f8ec29538f252daa973819660"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.IsAccessorInterfaceImplementationRuntimeHelper (cognitive 60): CSharpDecompiler.IsAccessorInterfaceImplementationRuntimeHelper has cognitive complexity 60 (threshold 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"558c8207c21e1b93db404694fdc3769dfbf8bff62956dfc492b20bf3f9cf9372"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeDefinition (cognitive 60): TypeSystemAstBuilder.ConvertTypeDefinition has cognitive complexity 60 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1897}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b589fdbd75bc8acca57a7eb82b03c91f13192e799e36fd319ca6eaef5cd5008"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.CreatePinnedRegion (cognitive 60): DetectPinnedRegions.CreatePinnedRegion has cognitive complexity 60 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"c28496c28c3a23d9fc2120061fe03930f15a29a567d6b03d3befaa56f92bc583"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.TransformInlineAssignmentStObjOrCall (cognitive 60): TransformAssignment.TransformInlineAssignmentStObjOrCall has cognitive complexity 60 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3078944dae6142fec453cd215e8bafb274762cbc33d935f8c6af4b63804d8e9"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberSearchStrategy.Search (cognitive 60): MemberSearchStrategy.Search has cognitive complexity 60 (threshold 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":"ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bf0c95fc5cce94a086afc1d2ede82ecc9db436c57236470c1994ac91369d680"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.BetterFunctionMember (cognitive 59): OverloadResolution.BetterFunctionMember has cognitive complexity 59 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"eebbb0d1ef239abeddaa77dbb7f4cc8a3abe05d0dcc0bd9c1e02541698bdedb8"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertConstantValue (cognitive 59): TypeSystemAstBuilder.ConvertConstantValue has cognitive complexity 59 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"075bd054edd2e255a3141a9f460e7e22a764e7bb532a910a265b7f2c49d810b1"}},{"ruleId":"D2","level":"warning","message":{"text":"ReplaceMethodCallsWithOperators.ProcessInvocationExpression (cognitive 58): ReplaceMethodCallsWithOperators.ProcessInvocationExpression has cognitive complexity 58 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ac59e7b4d5ac4f44f1a5d3ab98990293aab3a5d504fcfb7b2993bd11b4a7f9"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerTypeSystem.InitializeCoreAsync (cognitive 58): DecompilerTypeSystem.InitializeCoreAsync has cognitive complexity 58 (threshold 15). Of this number, 57 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f5ff4992310fa4def2330c73718dcf507a7afa96ff6fe1ea511a02a1e05d20"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformCollectionAndObjectInitializers.Run (cognitive 57): TransformCollectionAndObjectInitializers.Run has cognitive complexity 57 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"4505dde40b6c27ae50567f20184d4db68a5f65a8765d7db120a7d7cdaa7bc048"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionHelper.ResolveTypeName (cognitive 57): ReflectionHelper.ResolveTypeName has cognitive complexity 57 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ReflectionHelper.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3b04e716f2459de9b7fc37e147a891f6c9dd3333b28897816469cdb99dc8a1"}},{"ruleId":"D2","level":"warning","message":{"text":"AwaitInFinallyTransform.Run (cognitive 56): AwaitInFinallyTransform.Run has cognitive complexity 56 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInFinallyTransform.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"28ec687eb7f5aba11cf08f740cde63acdee2e142ce83d7ad88d55336bb796beb"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.HandleBinaryNumeric (cognitive 54): ExpressionBuilder.HandleBinaryNumeric has cognitive complexity 54 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1619}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab9a51c074f086450db8f19cd631153abcca1bde699749be024fd0f056d67f7"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.LookInCurrentUsingScope (cognitive 54): CSharpResolver.LookInCurrentUsingScope has cognitive complexity 54 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1656}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e9f9d712b61eb4a388d8c624af4a9fffc8fff3f720b756242c2485b208d6204"}},{"ruleId":"D2","level":"warning","message":{"text":"XmlDocumentationElement.CreateElements (cognitive 53): XmlDocumentationElement.CreateElements has cognitive complexity 53 (threshold 15). Of this number, 52 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/XmlDocumentationElement.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"90cf0f61091bc7a73cebbc578295601c2ed137b58598889d56d39d4ea8aa5fef"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionTransforms.HandleSwitchExpression (cognitive 53): ExpressionTransforms.HandleSwitchExpression has cognitive complexity 53 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ddd162a642f6b13f4bd95e266ee52d9b7530a24dcd07dd9ec7bedeeabd2a4c7"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.ExplicitReferenceConversion (cognitive 52): CSharpConversions.ExplicitReferenceConversion has cognitive complexity 52 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"b909e12879ed8db661a01d7a4f40681c35d4f67c094221239d29897128f7122a"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeHelper (cognitive 52): TypeSystemAstBuilder.ConvertTypeHelper has cognitive complexity 52 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"813a2dae0f386653ab565f925067ac2608ec110ceef2c8895405451323dc20b8"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.GetMemberModifiers (cognitive 52): TypeSystemAstBuilder.GetMemberModifiers has cognitive complexity 52 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2535}}}],"partialFingerprints":{"codehealthFindingId/v1":"54df3e5ef10fd8fee936d65ed339ac9b60a6506550ddede542443ec29abe19d5"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyAttributeTypeVisitor.ApplyAttributesToType (cognitive 52): ApplyAttributeTypeVisitor.ApplyAttributesToType has cognitive complexity 52 (threshold 15). Of this number, 50 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"426de3289072b45d61f3ed9191e40e180f2016188d110c44e275220d991e0174"}},{"ruleId":"D2","level":"warning","message":{"text":"ILSpyCmdProgram.OnExecuteAsync (cognitive 52): ILSpyCmdProgram.OnExecuteAsync has cognitive complexity 52 (threshold 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":"ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b46b40074e62de0fd250abb85710d06f0d4c802f398cc80386520e60a1415e"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteMultiHandlerTryCatch (cognitive 50): RuntimeAsyncExceptionRewriteTransform.TryRewriteMultiHandlerTryCatch has cognitive complexity 50 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"4466600a340b85909c7a7de93b842322b3a170bcade5b540c567b16d95b3e195"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.MatchRoslynSwitchOnString (cognitive 50): SwitchOnStringTransform.MatchRoslynSwitchOnString has cognitive complexity 50 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1014}}}],"partialFingerprints":{"codehealthFindingId/v1":"651bfd5349a1da0467f863467817cd260a37aaebbb06b9215006ffcf98fe88e1"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.CheckApplicability (cognitive 49): OverloadResolution.CheckApplicability has cognitive complexity 49 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"721194b827dc4210abbd122257b4cbefeaa63d61b5fe71a56778006b5114cc74"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteFlagBasedEarlyReturn (cognitive 49): RuntimeAsyncExceptionRewriteTransform.TryRewriteFlagBasedEarlyReturn has cognitive complexity 49 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"99efa21cf4cec9bf18b8e143633a90c8cb07cf26e352c7c2d13943644dc84b91"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternMatchingTransform.DetectPropertySubPattern (cognitive 49): PatternMatchingTransform.DetectPropertySubPattern has cognitive complexity 49 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"30f787217907673bf1be4ebb3fffec94209044fa4e085a924f69c9dee072718c"}},{"ruleId":"D2","level":"warning","message":{"text":"TextWriterTokenWriter.WritePrimitiveValue (cognitive 48): TextWriterTokenWriter.WritePrimitiveValue has cognitive complexity 48 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/TextWriterTokenWriter.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"fde22efb0540562b2679f28afcae195632bda5a29d607f27bdeb41bab7386188"}},{"ruleId":"D2","level":"warning","message":{"text":"RequiredNamespaceCollector.CollectNamespacesFromMethodBody (cognitive 48): RequiredNamespaceCollector.CollectNamespacesFromMethodBody has cognitive complexity 48 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"609971d1d3d9dd189486399d0fd7da1384eb30aaaaed7b4d853a73b9b8ce33a9"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.TranslateSwitch (cognitive 48): StatementBuilder.TranslateSwitch has cognitive complexity 48 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"028ec703243a12955cb585d817cacfece6de330c2c3425d0765bc98044e87f63"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertNamespace (cognitive 48): TypeSystemAstBuilder.ConvertNamespace has cognitive complexity 48 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"78851994faea4e6d76b5a8aa8390c6ab544944a6a84dd82770cf4b178d665b21"}},{"ruleId":"D2","level":"warning","message":{"text":"DeclareVariables.FindInsertionPoints (cognitive 48): DeclareVariables.FindInsertionPoints has cognitive complexity 48 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab44fcd053d74cd8483e8791d054ddc33543a6b44f32ad715cecacf540596fdf"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableScope.GenerateNameForVariable (cognitive 48): VariableScope.GenerateNameForVariable has cognitive complexity 48 (threshold 15). Of this number, 46 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"772319e1c4d5157b0d78444643ae4726d58cd70e7bd1071c2ef96bd01a5c3ffa"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.MakeLowerBoundInference (cognitive 47): TypeInference.MakeLowerBoundInference has cognitive complexity 47 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"f475cfae3fe04065fbd3c851f22980802b5968de9db9fa8cf7a35c18fdf707d2"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.DetectAwaitPattern (cognitive 47): AsyncAwaitDecompiler.DetectAwaitPattern has cognitive complexity 47 (threshold 15). Of this number, 46 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1803}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e04aa6f40f2d92942044c15195b7d6a1ee55268630c228209c821b5280e745"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.BetterConversion (cognitive 45): CSharpConversions.BetterConversion has cognitive complexity 45 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1540}}}],"partialFingerprints":{"codehealthFindingId/v1":"68010b47431333089c2818dd41a630778b680b8fcde95ed41b3ca45cb88c9dca"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveInvocation (cognitive 45): CSharpResolver.ResolveInvocation has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2244}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fc0663e3e9b9b0ec5b7ad432395a85fa906341dc17db0b2e9c7cd3b4b873750"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.MoveFieldInitializersToDeclarations (cognitive 45): ConstructorInitializerAnalyzer.MoveFieldInitializersToDeclarations has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"b06729e6752a374e6568d80da127c1f3eb09ec7a3c69962702d45bb099d42127"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstructorInitializerAnalyzer.RemoveImplicitConstructor (cognitive 45): ConstructorInitializerAnalyzer.RemoveImplicitConstructor has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"28793cc0506698f94425332c7f4cceae45fa55b1335b776d3ea41c9538bc4bc6"}},{"ruleId":"D2","level":"warning","message":{"text":"ConditionDetection.CompareBlockExitPriority (cognitive 45): ConditionDetection.CompareBlockExitPriority has cognitive complexity 45 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"b52641bfc07c10dd349b0e132b5bf151cfca7b1ba9ce5610a0ea084a11ee736f"}},{"ruleId":"D2","level":"warning","message":{"text":"RunningSearch.ParseInput (cognitive 45): RunningSearch.ParseInput has cognitive complexity 45 (threshold 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":"ILSpy/Search/RunningSearch.cs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d029752ef26f8b52774a7b41f596da01fdb90e48f1293402414c51faf885d13"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerException.GetStackTrace (cognitive 44): DecompilerException.GetStackTrace has cognitive complexity 44 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/DecompilerException.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"93601a86b52989f44239a1592786a80b03beea531b12028181558ad2094ba882"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtractionContext.Extract (cognitive 44): ExtractionContext.Extract has cognitive complexity 44 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ILExtraction.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd85135126c4c7c8587921b2a00ea82a5dbdd5463e488146f382ef446ab08fc2"}},{"ruleId":"D2","level":"warning","message":{"text":"RemoveDeadVariableInit.Run (cognitive 44): RemoveDeadVariableInit.Run has cognitive complexity 44 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/RemoveDeadVariableInit.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5cd4f275878f16b9545ba2f029815ef6d0046dcc2271b674edcaf20b6260a59"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSyntaxTreeGenerator.GetAstNodeAdditions (cognitive 44): DecompilerSyntaxTreeGenerator.GetAstNodeAdditions has cognitive complexity 44 (threshold 15). Of this number, 43 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"e46ac06f3e7b1a5a27f59733fb91fdbdf148398ddddef8e58521eaff60bdb785"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitConv (cognitive 43): ExpressionBuilder.VisitConv has cognitive complexity 43 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2227}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f71443986fa4b2ce111d353ee8005f79c5ad6ea2898a09d017e9a3b1480f785"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslateSwitchValue (cognitive 43): ExpressionBuilder.TranslateSwitchValue has cognitive complexity 43 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":4059}}}],"partialFingerprints":{"codehealthFindingId/v1":"557553879368fce132e94ebab6499a3d75782fa49fb0fa29b6c25905a0f306a0"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.GetAccessibleMembers (cognitive 43): MemberLookup.GetAccessibleMembers has cognitive complexity 43 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d5460156fd410993ee1e2e2aed54ebcd5c59a9bb74c06a1991365e668547b8"}},{"ruleId":"D2","level":"warning","message":{"text":"SequencePointBuilder.GetSequencePoints (cognitive 43): SequencePointBuilder.GetSequencePoints has cognitive complexity 43 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"911d081ec0f68672b90f85891bd87e210f3a6cfaf186eb5e53f5cec7b728cd2a"}},{"ruleId":"D2","level":"warning","message":{"text":"Block.CheckInvariant (cognitive 43): Block.CheckInvariant has cognitive complexity 43 (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":"ICSharpCode.Decompiler/IL/Instructions/Block.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"05333ed14648d00836c70cf323f9fd1c49823e27bd16611e6027dcd7816574b0"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.TryGetStringInterpolationTokens (cognitive 42): CallBuilder.TryGetStringInterpolationTokens has cognitive complexity 42 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":770}}}],"partialFingerprints":{"codehealthFindingId/v1":"522869a23651403e85b02613bf85a7a2ddf493bf8f406900716854d54f1e9704"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.DisambiguateDelegateReference (cognitive 42): CallBuilder.DisambiguateDelegateReference has cognitive complexity 42 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":2015}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a4e4118a292f158872f31be7e45e3625129fa78a8360e8f28cbe748fbe37063"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.MatchEnumeratorCreationPattern (cognitive 42): YieldReturnDecompiler.MatchEnumeratorCreationPattern has cognitive complexity 42 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df24f4d51e70dbe5a25a31439874180e5df87c31b3d490962d90b12daa89cd1"}},{"ruleId":"D2","level":"warning","message":{"text":"InheritanceHelper.GetDerivedMember (cognitive 42): InheritanceHelper.GetDerivedMember has cognitive complexity 42 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/InheritanceHelper.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"17376b5e760031d12f6b7e0f2861efb923a2f65a70e5a60db808984512004ccd"}},{"ruleId":"D2","level":"warning","message":{"text":"StateRangeAnalysis.AssignStateRanges (cognitive 41): StateRangeAnalysis.AssignStateRanges has cognitive complexity 41 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/StateRangeAnalysis.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"4078f34755bc50fe38a99bf440c7617afe8ae4459e804629e57ad650417ce1ab"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicCallSiteTransform.TransformCallSites (cognitive 41): DynamicCallSiteTransform.TransformCallSites has cognitive complexity 41 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d27cca5ab033bb75f6cd1ceeea42714cb5865432c85d28e8c6b4a5097b2849"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableLiftingTransform.DoLift (cognitive 41): NullableLiftingTransform.DoLift has cognitive complexity 41 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaa97f504badcf6477c2c231ad03957c44d4313765aaea08892697339f4d9018"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.Run (cognitive 41): SwitchOnStringTransform.Run has cognitive complexity 41 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"fecfe182d34d01f1dad09ea8731be6da9c2653d0f3721e856c55a632e178c9bd"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformDisplayClassUsage.VisitStLoc (cognitive 41): TransformDisplayClassUsage.VisitStLoc has cognitive complexity 41 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"56312f045b8e6c73a6a518e9da396853baf914dc97c8524517b174b765b7c5f1"}},{"ruleId":"D2","level":"warning","message":{"text":"UserDefinedLogicTransform.TransformDynamic (cognitive 41): UserDefinedLogicTransform.TransformDynamic has cognitive complexity 41 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/UserDefinedLogicTransform.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"692c7a7ee309750ddb344c992db3692fc77a6fc940b62de55774d23786196617"}},{"ruleId":"D2","level":"warning","message":{"text":"Lexer.ReadIdent (cognitive 41): Lexer.ReadIdent has cognitive complexity 41 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"53666a0d620f2528ad605762f20b82ce9cb454497dba02b0e507811e73919c56"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.MakeUpperBoundInference (cognitive 40): TypeInference.MakeUpperBoundInference has cognitive complexity 40 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"467a29267a568e5081a1afd0c2b3465e1c65a9db08feaec52212cda128fd8f8b"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.AnalyzeStateMachine (cognitive 40): AsyncAwaitDecompiler.AnalyzeStateMachine has cognitive complexity 40 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1306}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb2313e17427384299f0a4e3f6f222b9c893fabdb95590276c5a8899e47e39c4"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformDisplayClassUsage.ResolveVariableToPropagate (cognitive 40): TransformDisplayClassUsage.ResolveVariableToPropagate has cognitive complexity 40 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d62e0dc50f8c6ad7b4e67093987101982857978ae3842c6a9c74711920e3c1"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataModule.ResolveMethodReference (cognitive 40): MetadataModule.ResolveMethodReference has cognitive complexity 40 (threshold 15). Of this number, 39 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"232043f051157fc9ecb32603baf5365dae105a5d77b75b06da134e3f49060e97"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslateCeq (cognitive 39): ExpressionBuilder.TranslateCeq has cognitive complexity 39 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f9a26541e8001d4599b02a916aceba589a9a8465938fde4941d097b0619cdd7"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslateTarget (cognitive 39): ExpressionBuilder.TranslateTarget has cognitive complexity 39 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2734}}}],"partialFingerprints":{"codehealthFindingId/v1":"d719192dc474c84cf1ebbd17260eb0855cfbb5a7dcfa220cce4fa5d592539163"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslatePattern (cognitive 39): ExpressionBuilder.TranslatePattern has cognitive complexity 39 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":5008}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b0faed6b3d94ff396181b98f9a60289d070b520d932c7bf817d03717ed5aae"}},{"ruleId":"D2","level":"warning","message":{"text":"PrettifyAssignments.VisitAssignmentExpression (cognitive 39): PrettifyAssignments.VisitAssignmentExpression has cognitive complexity 39 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PrettifyAssignments.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a4d19c7b04bc1134d5876163ea9455e7211ede297f26da144e0e7d231032237"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.CheckResumeBlock (cognitive 39): AsyncAwaitDecompiler.CheckResumeBlock has cognitive complexity 39 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":2001}}}],"partialFingerprints":{"codehealthFindingId/v1":"c16261cf8dbf3f98d6fe60e140e8fa42b887fd7ed4e21f886e613be07e827b33"}},{"ruleId":"D2","level":"warning","message":{"text":"Conv.GetConversionKind (cognitive 39): Conv.GetConversionKind has cognitive complexity 39 (threshold 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":"ICSharpCode.Decompiler/IL/Instructions/Conv.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2c2ca69c56a4e5ba0b8384b95a332ca0ed7bee94c94c9d9223efa3335212113"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.TransformPostIncDecOperator (cognitive 39): TransformAssignment.TransformPostIncDecOperator has cognitive complexity 39 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":1032}}}],"partialFingerprints":{"codehealthFindingId/v1":"860cfde400e729fab1f91b3ae08f10fffa2733462ee07a255b4a731c7af4e3aa"}},{"ruleId":"D2","level":"warning","message":{"text":"BamlDecompilerTypeSystem.BamlDecompilerTypeSystem.ctor (cognitive 39): BamlDecompilerTypeSystem.BamlDecompilerTypeSystem.ctor has cognitive complexity 39 (threshold 15). Of this number, 38 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/BamlDecompilerTypeSystem.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f9c5e4da401e5ba8e4e048444a7cc9d34bde28d1b03116458aa4285981933b"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.DetectAutomaticProperties (cognitive 38): RecordDecompiler.DetectAutomaticProperties has cognitive complexity 38 (threshold 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"097e9481260b33efc0fd9e1646a8776a77a25789ca7d97d7ba98d94384639b08"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedCopyConstructor (cognitive 38): RecordDecompiler.IsGeneratedCopyConstructor has cognitive complexity 38 (threshold 15). Of this number, 37 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9bf8d76a58316953ba7160944653a65f5a0b0a3877eb6987cf0c26a9d11e21"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.ConvertLoop (cognitive 38): StatementBuilder.ConvertLoop has cognitive complexity 38 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1325}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bb53ccab2570b218eeec94b62eadad797ee5284b057abfb970c10aacebd4ba1"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.TryExtractExpression (cognitive 38): TypeSystemAstBuilder.TryExtractExpression has cognitive complexity 38 (threshold 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1586}}}],"partialFingerprints":{"codehealthFindingId/v1":"2449daa9681a69b9440a5053366bd3714e2359f207c8d81229af275cc6dc6443"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.IsCustomRefPinPattern (cognitive 38): DetectPinnedRegions.IsCustomRefPinPattern has cognitive complexity 38 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"e606ddfa2187942f15268a783b985806c27933d8b802f81f48aa84514b919cba"}},{"ruleId":"D2","level":"warning","message":{"text":"DeconstructionTransform.MatchAssignments (cognitive 38): DeconstructionTransform.MatchAssignments has cognitive complexity 38 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 7 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/DeconstructionTransform.cs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"82c9190c85f2159d338ca591737fdd6ca4f83fa52c8a99e9c9e99e20069c3fed"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalFunctionDecompiler.PropagateClosureParameterArguments (cognitive 38): LocalFunctionDecompiler.PropagateClosureParameterArguments has cognitive complexity 38 (threshold 15). Of this number, 37 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8c15f22225285044384dda2b1910ababe5583cc0f4a54d257b29ef1f5562314"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.CheckImplicitTruncation (cognitive 38): TransformAssignment.CheckImplicitTruncation has cognitive complexity 38 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"279bc0819e12a7623fbd3ba90d0b70eed878948896ab4c93364ae9f86498461a"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpBracketSearcher.GetStartType (cognitive 38): CSharpBracketSearcher.GetStartType has cognitive complexity 38 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0286350609c19d4e7de65f01388a588d219d8a1fdc03b72658d72f99316f32a"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitIfInstruction (cognitive 37): ExpressionBuilder.VisitIfInstruction has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3956}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd5a38b6eafe9fe5b039408ab88c6e30748d36169ac02b20362f9a678c2f81b1"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.UserDefinedExplicitConversion (cognitive 37): CSharpConversions.UserDefinedExplicitConversion has cognitive complexity 37 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd424c91d994eb446b537ffc63b7f2c97ddbf18fbcbdfbd1e02db6f7e9a0901b"}},{"ruleId":"D2","level":"warning","message":{"text":"ILStructure.ILStructure.ctor (cognitive 37): ILStructure.ILStructure.ctor has cognitive complexity 37 (threshold 15). Of this number, 36 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ILStructure.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c736ee4b053afa0e6b1fc100f688b215ae8fea969370bae34217664053a0ece"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringProvider.AppendTypeName (cognitive 37): IdStringProvider.AppendTypeName has cognitive complexity 37 (threshold 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":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87535c29a7bbd4109570a000e9656480059593b95d51b1827770c8f1757ee79"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchAsyncEnumeratorCreationPattern (cognitive 37): AsyncAwaitDecompiler.MatchAsyncEnumeratorCreationPattern has cognitive complexity 37 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"08badb6a603a93680fb697cc6c2651b7b4d9b4864e44164ed65cda89d033f2e7"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternMatchingTransform.MatchNullableHasValueCheckPattern (cognitive 37): PatternMatchingTransform.MatchNullableHasValueCheckPattern has cognitive complexity 37 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcedcb225acdef05005b04942122557d81afaa9cd41c8f0dd53e104545eb12dd"}},{"ruleId":"D2","level":"warning","message":{"text":"RemoveUnconstrainedGenericReferenceTypeCheck.Run (cognitive 37): RemoveUnconstrainedGenericReferenceTypeCheck.Run has cognitive complexity 37 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/RemoveUnconstrainedGenericReferenceTypeCheck.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"84ed46696af1d1108c78244b9eee8ebb275f4db3840673c2defaf01d99667934"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformArrayInitializers.HandleSequentialLocAllocInitializer (cognitive 37): TransformArrayInitializers.HandleSequentialLocAllocInitializer has cognitive complexity 37 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"a424fb10a747575eb073536e0d32fa03529a7b68f1e51d8afec53b5a784cfa50"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpLanguage.DecompileAssembly (cognitive 37): CSharpLanguage.DecompileAssembly has cognitive complexity 37 (threshold 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"23b09328dadd5d92a95feae5d13d09cdb997c6b9e3b024a140eb7c8475b4fe87"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.BuildArgumentList (cognitive 36): CallBuilder.BuildArgumentList has cognitive complexity 36 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"a248833889582262c3f7000a3573ca0cadd8291e0c3c61ae998266dd2d601726"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.HandleAccessorCall (cognitive 36): CallBuilder.HandleAccessorCall has cognitive complexity 36 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1712}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dbeafe50ae0c7f4e17134d89d1dca702df5ab82d7007d62369ffcce3882e428"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.GetExtensionMethods (cognitive 36): CSharpResolver.GetExtensionMethods has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2065}}}],"partialFingerprints":{"codehealthFindingId/v1":"5af1d8f5eb33b38a855400ade25a4455425176f61c2970375e3f4a6f46a0e9df"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringProvider.FindMemberInType (cognitive 36): IdStringProvider.FindMemberInType has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a8f7d82dbff78410d8dd004aa527808cbc4ff53754c43b434b3c9b24da5af2"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternMatchingTransform.PatternMatchRefTypes (cognitive 36): PatternMatchingTransform.PatternMatchRefTypes has cognitive complexity 36 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"72930fe4ba70fe1f61bef57f4d603b504e50b804dceb058bc78a11ea22b1cb49"}},{"ruleId":"D2","level":"warning","message":{"text":"ReduceNestingTransform.ComputeStats (cognitive 36): ReduceNestingTransform.ComputeStats has cognitive complexity 36 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ReduceNestingTransform.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b02bfac99fcc32a88fbf466727fc9160c13911257e7dabd1c463483534d8c5"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataMethod.GetAttributes (cognitive 36): MetadataMethod.GetAttributes has cognitive complexity 36 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"f90fd482fcb3a6d889396a811c336e5aa0d770171ae8a2824dd501adc4832954"}},{"ruleId":"D2","level":"warning","message":{"text":"CompareEngine.CalculateDiff (cognitive 36): CompareEngine.CalculateDiff has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/CompareEngine.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f82afeec96bd1d16c97ba76fd1f5c03819b60bbaee6d9dbea78056bd5e539bf"}},{"ruleId":"D2","level":"warning","message":{"text":"MainMenu.AppendRegistryCommands (cognitive 36): MainMenu.AppendRegistryCommands has cognitive complexity 36 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Views/MainMenu.axaml.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"355838e7fdc9da0cf9351caba961940bcdc60a2efce4eb183dccf52d6da54983"}},{"ruleId":"D2","level":"warning","message":{"text":"RequiredNamespaceCollector.CollectNamespaces (cognitive 35): RequiredNamespaceCollector.CollectNamespaces has cognitive complexity 35 (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":"ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"15cc8c2165e7b98e2e1b2e8346ba68a7c1b4dd7e4ebb6d39f9c17cecb14edd07"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.BinaryNumericPromotion (cognitive 35): CSharpResolver.BinaryNumericPromotion has cognitive complexity 35 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1f93a3b734723979f34c12cfaf2374c59aceece545a3300fc54994e6ecbe414"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveCast (cognitive 35): CSharpResolver.ResolveCast has cognitive complexity 35 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1397}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bb57ac0fe234d32369e2ddc169a7e0af81cf6c98dbbd4126efc254dd9363b72"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.SplitBlocksAtWritesToPinnedLocals (cognitive 35): DetectPinnedRegions.SplitBlocksAtWritesToPinnedLocals has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"3164d10314f4750aaec29beff3667bd42a7733455ef9b6864ebdc2a53c810688"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncManualAwaitTransform.DetectRuntimeAsyncManualAwait (cognitive 35): RuntimeAsyncManualAwaitTransform.DetectRuntimeAsyncManualAwait has cognitive complexity 35 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncManualAwaitTransform.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1a9d93114b20079cd2eabe242677ad0f6f7d3b0e97587304b93f522df2239db"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolicEvaluationContext.Eval (cognitive 35): SymbolicEvaluationContext.Eval has cognitive complexity 35 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/SymbolicExecution.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b0233f79af58e8a1eaf254aaa7e611c128c434312f9632d0616bc1a40d7e089"}},{"ruleId":"D2","level":"warning","message":{"text":"IntroduceDynamicTypeOnLocals.Run (cognitive 35): IntroduceDynamicTypeOnLocals.Run has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IntroduceDynamicTypeOnLocals.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bcb712efd5fd73ea59270c0f6f2b25688d70ab4d39592c446d2ade616df6084"}},{"ruleId":"D2","level":"warning","message":{"text":"SharpTreeNode.OnChildrenChanged (cognitive 35): SharpTreeNode.OnChildrenChanged has cognitive complexity 35 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"886d3bc90c730050d111c940fed1b982af7331a4ad30ff396e1596ac585bd2c2"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.IsUnambiguousCall (cognitive 34): CallBuilder.IsUnambiguousCall has cognitive complexity 34 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1554}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8d5206c4a1f07cac9bb71345ef573fbb120bc42c9e2a6262101f4fd5ac1d096"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslateFunction (cognitive 34): ExpressionBuilder.TranslateFunction has cognitive complexity 34 (threshold 15). Of this number, 33 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2493}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ae19d7da14d2eab02d6f15c895b83f58bddd4cbb6d2d818640ced3916407377"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedDeconstruct (cognitive 34): RecordDecompiler.IsGeneratedDeconstruct has cognitive complexity 34 (threshold 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":1171}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cbfd720656e59404d28bfb4d14e6c52130dbd3006d8902864f6bf56d944ff65"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.AnonymousFunctionConversion (cognitive 34): CSharpConversions.AnonymousFunctionConversion has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1280}}}],"partialFingerprints":{"codehealthFindingId/v1":"213216d9b880fa70d3c44569d5252eb7329f3045a20755c5f57d31b2ff30a43e"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.RemoveInterfaceMembersHiddenByClassMembers (cognitive 34): MemberLookup.RemoveInterfaceMembersHiddenByClassMembers has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"72e97069e9c3dc951ea08e6ebc5980a9a98fa4577876eef9277284a2d2719476"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.DisassembleMethodHeaderInternal (cognitive 34): ReflectionDisassembler.DisassembleMethodHeaderInternal has cognitive complexity 34 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6534632777f52e6f0ad74965bf184175ae9d8f2ab60d21671b910b08a7e3e67"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.FindYieldBreakTarget (cognitive 34): AsyncAwaitDecompiler.FindYieldBreakTarget has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1433}}}],"partialFingerprints":{"codehealthFindingId/v1":"66f2ce3e9726b75306cb17d7d312d5dfc865cf515ed99026fd80a5df772b3f53"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.AnalyzeAwaitBlock (cognitive 34): AsyncAwaitDecompiler.AnalyzeAwaitBlock has cognitive complexity 34 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"b15bb35d7caecf3d2d6e5b68e3bc3e3b317ba81834d2d84ac4118d06c9262684"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.HandleStringToPointer (cognitive 34): DetectPinnedRegions.HandleStringToPointer has cognitive complexity 34 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"a23c1ca7407bd7275916f23f90c6a4edb7b9cd44ddc799661b2e85f483bbe3d6"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectCatchWhenConditionBlocks.MatchCatchWhenEntryPoint (cognitive 34): DetectCatchWhenConditionBlocks.MatchCatchWhenEntryPoint has cognitive complexity 34 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"76a7271399a389567255cd9d88050324111aa05202ea6fd6ae0166b244cf3378"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.MatchLegacySwitchOnStringWithHashtable (cognitive 34): SwitchOnStringTransform.MatchLegacySwitchOnStringWithHashtable has cognitive complexity 34 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d10e7b0db52111b318c44a07f2f725e7471ae5f0f6a6b50e2d9881a0b1fcf9e"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.TransformPreIncDecOperatorWithInlineStore (cognitive 34): TransformAssignment.TransformPreIncDecOperatorWithInlineStore has cognitive complexity 34 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb930000723178a07cf3949ec06f14bd76333644e8cc7c2b6bb996b217cc3b5"}},{"ruleId":"D2","level":"warning","message":{"text":"GuessFileType.IsUTF8 (cognitive 34): GuessFileType.IsUTF8 has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Util/GuessFileType.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"7909a642ad122b1c892e48e5010905f6192960c921847d1667ef707250d32bf2"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectionIdRewritePass.DecompileConnections (cognitive 34): ConnectionIdRewritePass.DecompileConnections has cognitive complexity 34 (threshold 15). Of this number, 33 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b80724e7ec9067218efc3af5ab643277719fbb92890a13ad259e7db1cfbb976"}},{"ruleId":"D2","level":"warning","message":{"text":"SharpTreeView.OnKeyDown (cognitive 34): SharpTreeView.OnKeyDown has cognitive complexity 34 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Controls/TreeView/SharpTreeView.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d655de8474216725a0aa24cf7b25df5c8271c0d84f5ff60a45e79ccda06d230"}},{"ruleId":"D2","level":"warning","message":{"text":"InsertParenthesesVisitor.VisitCastExpression (cognitive 33): InsertParenthesesVisitor.VisitCastExpression has cognitive complexity 33 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"becddd6af84e01ab545234e2c5565f13a26904a83ca5c37e3eaeb7ccab8af1ef"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.ImplicitConversion (cognitive 33): CSharpConversions.ImplicitConversion has cognitive complexity 33 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef70601b74ea8564571d1e5a2f975aaad986463dd84d65bb1c190edfecca96e6"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.Run (cognitive 33): RuntimeAsyncExceptionRewriteTransform.Run has cognitive complexity 33 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c89c49eae92346706c98b74cea4ec366aa329c146e1df7ac3d58c9f7ffc236"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericCompoundAssign.IsBinaryCompatibleWithType (cognitive 33): NumericCompoundAssign.IsBinaryCompatibleWithType has cognitive complexity 33 (threshold 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":"ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"38572c161afded6c0ad35c61f5bdadf5609cb8ae3cbbb55acba450d18bb3ef7d"}},{"ruleId":"D2","level":"warning","message":{"text":"HighLevelLoopTransform.MatchForLoop (cognitive 33): HighLevelLoopTransform.MatchForLoop has cognitive complexity 33 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/HighLevelLoopTransform.cs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f421dd6279601f5266ccb1a440d350d0e403431517e04fa85c1a7ddc499a4d8"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyAttributeTypeVisitor.VisitParameterizedType (cognitive 33): ApplyAttributeTypeVisitor.VisitParameterizedType has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"b000f68e5d76c5e8b139dd4e3c9e0f8856c95787102a54f15ae22b37597d3a64"}},{"ruleId":"D2","level":"warning","message":{"text":"AttributeListBuilder.ConvertMarshalInfo (cognitive 33): AttributeListBuilder.ConvertMarshalInfo has cognitive complexity 33 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/AttributeListBuilder.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbfc31d71a483a2f485134e2787ed77dfabd3319404982fa2fea141e31d09b65"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataTokenSearchStrategy.Search (cognitive 33): MetadataTokenSearchStrategy.Search has cognitive complexity 33 (threshold 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":"ICSharpCode.ILSpyX/Search/MetadataTokenSearchStrategy.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"51efa76f35c2677188185df12aec052bf6e5d7f6d271c507ca8699b84a37738e"}},{"ruleId":"D2","level":"warning","message":{"text":"SharpTreeNode.SetIsChecked (cognitive 33): SharpTreeNode.SetIsChecked has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1f2e6b06e945fde2ae1fc920b7ba583a64a0d3f64b728395ca7e5d4f2baaeb"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpLanguage.GetEntityName (cognitive 33): CSharpLanguage.GetEntityName has cognitive complexity 33 (threshold 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1526aeb8da37be173a20424e435927eb11466637e9f771f289b814f553dc6809"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpAmbience.WriteMemberDeclarationName (cognitive 32): CSharpAmbience.WriteMemberDeclarationName has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d220611c8557e537286b1a7ca92f46e7831a9036af497c6e4eceeb08455d8c6"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.GetApplicableConversionOperators (cognitive 32): CSharpConversions.GetApplicableConversionOperators has cognitive complexity 32 (threshold 15). Of this number, 29 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1173}}}],"partialFingerprints":{"codehealthFindingId/v1":"df2e6b6b86d05ed4131add9f9437cc6064cbdbcb4c629b8a3bb21a80b2663ed7"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.BetterConversionTarget (cognitive 32): CSharpConversions.BetterConversionTarget has cognitive complexity 32 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1681}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd725967754b757059a48ac30320076557dbf379eb3e02bb3e76cf52059bcfd3"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.PhaseTwo (cognitive 32): TypeInference.PhaseTwo has cognitive complexity 32 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"98375131af77d99836e30c8907238e1b86ee5583e877b481fd426dae43bf69f6"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.MakeOutputTypeInference (cognitive 32): TypeInference.MakeOutputTypeInference has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"9468122eacc4477d1488ff238d2cadbba91355eba1ff9f06133412ed0815e0b6"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.FindTypesInBounds (cognitive 32): TypeInference.FindTypesInBounds has cognitive complexity 32 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"052f7f734ab07ef973714a09102eb572399c2c07e39cb5372b566c00a0faecd6"}},{"ruleId":"D2","level":"warning","message":{"text":"InitializerSequence.Analyze (cognitive 32): InitializerSequence.Analyze has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"717cf4674ff1eda6543a5d16c59c2fa5718f9f54309ce3fef41e9dddfb3fa9e3"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.WriteTypeParameters (cognitive 32): ReflectionDisassembler.WriteTypeParameters has cognitive complexity 32 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1755}}}],"partialFingerprints":{"codehealthFindingId/v1":"14602eb63f85319e5fede70310c18980d5183f6d704e7930a53b7882be3a1e55"}},{"ruleId":"D2","level":"warning","message":{"text":"ILReader.Comparison (cognitive 32): ILReader.Comparison has cognitive complexity 32 (threshold 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1874}}}],"partialFingerprints":{"codehealthFindingId/v1":"a18055b210de257d75e70a44fb452d8a7233ec7c0e79591d8a60fa9b012b7084"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformCollectionAndObjectInitializers.IsPartOfInitializer (cognitive 32): TransformCollectionAndObjectInitializers.IsPartOfInitializer has cognitive complexity 32 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"418182024980132ba9ccaa8eee0353bf4a7da84ac9a7ea3e3fef26fa90291ca0"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.SetNewModifier (cognitive 31): CSharpDecompiler.SetNewModifier has cognitive complexity 31 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 6 belong to 5 function literals inside it that branch. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1549}}}],"partialFingerprints":{"codehealthFindingId/v1":"761a127a8a236e7c1f9ff23e8ff372194e49460202a2826b7dab4b680567e82d"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.HandleCompoundAssignment (cognitive 31): ExpressionBuilder.HandleCompoundAssignment has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2076}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bdd7d335c1d60a73329a08519d6b68f9204f159ffc84f99ab49d6a0224ca0a6"}},{"ruleId":"D2","level":"warning","message":{"text":"InsertParenthesesVisitor.GetPrecedence (cognitive 31): InsertParenthesesVisitor.GetPrecedence has cognitive complexity 31 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0049fdcef285d29fdaba457c4759df951ab35a31a33da4dad142ed198550c4b"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchAnalysis.AnalyzeBlock (cognitive 31): SwitchAnalysis.AnalyzeBlock has cognitive complexity 31 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/SwitchAnalysis.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"88371901526b587958c8196210e13e086b40a0f98c944824f372870d05737229"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.ReconstructTryFinallyBlocks (cognitive 31): YieldReturnDecompiler.ReconstructTryFinallyBlocks has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1247}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aab1269c5829aafb5b260bcf79ffdff7a396fcaab75ad7271a62de3c82b088f"}},{"ruleId":"D2","level":"warning","message":{"text":"IntroduceNativeIntTypeOnLocals.Run (cognitive 31): IntroduceNativeIntTypeOnLocals.Run has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IntroduceNativeIntTypeOnLocals.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"93853bfcbc48dd37e0ecce92c690661a2fc377442ff3b7443f3abbabd93b5005"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.SimplifyCSharp1CascadingIfStatements (cognitive 31): SwitchOnStringTransform.SimplifyCSharp1CascadingIfStatements has cognitive complexity 31 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d7a2987f5b022df0b5ef92c7e169fd4a40a45c26af7f6a1d5bb3e035388c4a5"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.IsCompoundStore (cognitive 31): TransformAssignment.IsCompoundStore has cognitive complexity 31 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aeab6f2fc422e9ccd566e85c31a8f74033e0816e11ea6aace35e256445d181d"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerTextView.GetLineForBookmark (cognitive 31): DecompilerTextView.GetLineForBookmark has cognitive complexity 31 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"975bcb2dd4fcfc129354c509b8a0ff72955202e2f4f693460039312fe695f1e6"}},{"ruleId":"D2","level":"warning","message":{"text":"DocumentationRenderer.AddDocumentationElement (cognitive 31): DocumentationRenderer.AddDocumentationElement has cognitive complexity 31 (threshold 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":"ILSpy/TextView/DocumentationRenderer.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8adead5fe7ee6352f1bf95c4f523e63a6cd61759cd34375689a19e41774f9a8"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpOutputVisitor.VisitTypeDeclaration (cognitive 30): CSharpOutputVisitor.VisitTypeDeclaration has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":1561}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8b262613fb15c3943c87215addd0b0da56c1e56fd583fbf2fd312bbab8e3b6a"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.IdentityOrVarianceConversion (cognitive 30): CSharpConversions.IdentityOrVarianceConversion has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":630}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f835b8d365387f97cc5c61177a3d6dbeca2074bdf531817e39149a88dddcab1"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.DisassembleType (cognitive 30): ReflectionDisassembler.DisassembleType has cognitive complexity 30 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1598}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e66ff55bd247f1d0c86dd5314bc27b6efb63b8a4b63ad3431fa39ed1e8f5a1"}},{"ruleId":"D2","level":"warning","message":{"text":"LoopDetection.FindExitPoint (cognitive 30): LoopDetection.FindExitPoint has cognitive complexity 30 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/LoopDetection.cs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d5ea01f2d09ad4b3b80e019b2ed967fe05650c92d8276a930f76474ff9ea86a"}},{"ruleId":"D2","level":"warning","message":{"text":"ILInlining.NonAggressiveInlineInto (cognitive 30): ILInlining.NonAggressiveInlineInto has cognitive complexity 30 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":648}}}],"partialFingerprints":{"codehealthFindingId/v1":"455a788f13ac7e55467ab496f27d8302a8ccfacda9aa0c6dda9b0888cdb8de05"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.TransformPostIncDecOperatorWithInlineStore (cognitive 30): TransformAssignment.TransformPostIncDecOperatorWithInlineStore has cognitive complexity 30 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"17b98ae2a06774be3074cbf80d297015769e143a30c49bb0f4e49b67a1e97d6a"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslateArrayInitializer (cognitive 29): ExpressionBuilder.TranslateArrayInitializer has cognitive complexity 29 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3685}}}],"partialFingerprints":{"codehealthFindingId/v1":"b21c21916ee38c176e05518e8b7cdfb6fc279d592c5cb8e4b4a6cc7590b17e50"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedToString (cognitive 29): RecordDecompiler.IsGeneratedToString has cognitive complexity 29 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"230ba9f0ac4788d970adbba8521b34d721998aada88ea44e48507606c49c8743"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpInvocationResolveResult.GetArgumentsForCall (cognitive 29): CSharpInvocationResolveResult.GetArgumentsForCall has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpInvocationResolveResult.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f40845acfaa2762a4aad10cf9e018c651583c5190d3445ba60ce56742c7887"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.CreateResult (cognitive 29): MemberLookup.CreateResult has cognitive complexity 29 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ee49cd915ace7efe371585a8eb0a9a2c5732980cb0016cbd817d5cdf178b3c"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.MapCorrespondingParameters (cognitive 29): OverloadResolution.MapCorrespondingParameters has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"9abf9f7ea2d7efce0a14c5f581d54490335f3a6d1ca00ac7831faf38f23006ad"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.VisitLeave (cognitive 29): StatementBuilder.VisitLeave has cognitive complexity 29 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"377d4b6521113ea2d3bd01bc15ef44660f3a9ece75244ffc73e4a2c35b67a02f"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertAttributes (cognitive 29): TypeSystemAstBuilder.ConvertAttributes has cognitive complexity 29 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"a894b73cb0bbf6ae2a8118b3bdd10a4e2401c0d7f39e7fa88821a1de8c6fc9a0"}},{"ruleId":"D2","level":"warning","message":{"text":"LoopDetection.PrepareReverseCFG (cognitive 29): LoopDetection.PrepareReverseCFG has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/LoopDetection.cs"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1a7d9639f04a77a130bbe1b2fcccacf5006a3ca8a2af5de0c1af3642b77c609"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.IsMatchingCompoundLoad (cognitive 29): TransformAssignment.IsMatchingCompoundLoad has cognitive complexity 29 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61913f1bad3a9cadd2bdb94b2f529aa5f49e4cbe7af2aaa4f82412e43206045"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertInstruction (cognitive 29): TransformExpressionTrees.ConvertInstruction has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"8606c3697cd5d8ce0962edcfd6ac00e48aa2dd3500fdb904c394de55c3ebc454"}},{"ruleId":"D2","level":"warning","message":{"text":"TextTokenWriter.WriteToken (cognitive 29): TextTokenWriter.WriteToken has cognitive complexity 29 (threshold 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":"ICSharpCode.Decompiler/Output/TextTokenWriter.cs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe1dba66e99ddc10232bdcb5de8b36b0561b675533b59d674be8e610ba641560"}},{"ruleId":"D2","level":"warning","message":{"text":"GetMembersHelper.GetNestedTypesImpl (cognitive 29): GetMembersHelper.GetNestedTypesImpl has cognitive complexity 29 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/GetMembersHelper.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"062183300c3603488d19941390bc2822e872f0b069bb2d2e793912804a566cb1"}},{"ruleId":"D2","level":"warning","message":{"text":"SharpTreeNode.UpdateIsVisible (cognitive 29): SharpTreeNode.UpdateIsVisible has cognitive complexity 29 (threshold 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":"ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf81f4da904863e6b4cae0f1989127bdb8ae470c07e1a5df587f0e21c25f1508"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectionIdRewritePass.MatchEventSetterCreation (cognitive 29): ConnectionIdRewritePass.MatchEventSetterCreation has cognitive complexity 29 (threshold 15). 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":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a1ae6836cb5d5b35cbddb7d297501f0e346557688f8ab04fff51da991c351a"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.TokenizeFormatString (cognitive 28): CallBuilder.TokenizeFormatString has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"a540ee433bf8fba86de0fe50502923fb3e672af564159b40b491d6451548c22d"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.Decompile (cognitive 28): CSharpDecompiler.Decompile has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1286}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e1003eafc6fd413f47dd5515801cf30fb6df694bdbb8de0ac09d46198ccedb"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.HandleManagedPointerArithmetic (cognitive 28): ExpressionBuilder.HandleManagedPointerArithmetic has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1386}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b68918c34a0f473399165ce867dea46cad44b99596b04aeb9e90adf21770cea"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedGetHashCode (cognitive 28): RecordDecompiler.IsGeneratedGetHashCode has cognitive complexity 28 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"d10d941161ddf9f7e4bb14a4c772f05ea7910f31f95f988801b04dc5d8d3a0be"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.UserDefinedImplicitConversion (cognitive 28): CSharpConversions.UserDefinedImplicitConversion has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1030}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e17b1dc51da758628b83b14f08552ae99955ac63ac251884bbc66b0b0280655"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.TransformToForeach (cognitive 28): StatementBuilder.TransformToForeach has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"6942edb6d29d8c00f9df51a78fdbf46289c6e762a50b5474795278b29e5f5912"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertConstantValue (cognitive 28): TypeSystemAstBuilder.ConvertConstantValue has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b28a1ea7830adfa665b83d60501ae1528964e2c3eafbda09653e6bad22b8032"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternStatementTransform.TransformForeachOnMultiDimArray (cognitive 28): PatternStatementTransform.TransformForeachOnMultiDimArray has cognitive complexity 28 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aaf35bff9ccce059e3145ebafc7698e326b95556ae879e74044391a3b4d38ab"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSettings.GetMinimumRequiredVersion (cognitive 28): DecompilerSettings.GetMinimumRequiredVersion has cognitive complexity 28 (threshold 15). 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":"ICSharpCode.Decompiler/DecompilerSettings.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"9719510d6f3eda109b4502eae16c26f1bcbee30183e422ff16066f7b508ac6b2"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.WriteNativeType (cognitive 28): ReflectionDisassembler.WriteNativeType has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b732175fb3d8ab97377d5f79b83af38d66fbdb8ae9aefe5315a0e43d2f3d334"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalFunctionDecompiler.DetermineCaptureAndDeclarationScopes (cognitive 28): LocalFunctionDecompiler.DetermineCaptureAndDeclarationScopes has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"c50601f4caf3074723374d2627f17c574e55985521cb9098d6dc5cc525d0378b"}},{"ruleId":"D2","level":"warning","message":{"text":"UsingTransform.MatchNullCheckOrTypeCheck (cognitive 28): UsingTransform.MatchNullCheckOrTypeCheck has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"58b494050087423768d9e83705d0a18de48c6e0b12fe21fc255b9aaf4847bd95"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionPointerType.FromSignature (cognitive 28): FunctionPointerType.FromSignature has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/FunctionPointerType.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d18cf973354ef1f581abce2546b03833a8a6e4e14fc657b7aa71ff6cc613149"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataModule.GuessFakeMethodAccessor (cognitive 28): MetadataModule.GuessFakeMethodAccessor has cognitive complexity 28 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a33419d554cf49cd3cfd8c435693d01d961e252eaa455a37e99a22017fe8dd3"}},{"ruleId":"D2","level":"warning","message":{"text":"LoadedAssembly.LoadCoreAsync (cognitive 28): LoadedAssembly.LoadCoreAsync has cognitive complexity 28 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/LoadedAssembly.cs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aa639420f0510a9e45d01a66eaccbb768d42fc03624c0a190779378e7e61f39"}},{"ruleId":"D2","level":"warning","message":{"text":"FlagsSchemaInferer.Build (cognitive 28): FlagsSchemaInferer.Build has cognitive complexity 28 (threshold 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":"ILSpy/Metadata/FlagsSchemaInferer.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd0df63b40744f3410d82c45fdd592f92615bddde19299605308dafac3d95ed5"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ApplyShortAttributeNameIfPossible (cognitive 27): TypeSystemAstBuilder.ApplyShortAttributeNameIfPossible has cognitive complexity 27 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":926}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5a7abcd3243fa57fc177ddbfeba5447a3a5fefbad89e78e32e123955d22959"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.NormalizeAwaitOnCompletedDualBranch (cognitive 27): AsyncAwaitDecompiler.NormalizeAwaitOnCompletedDualBranch has cognitive complexity 27 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1532}}}],"partialFingerprints":{"codehealthFindingId/v1":"e746cfdc0d55569a3480b009a09341deb86020d1f313b0b4272ca90756781695"}},{"ruleId":"D2","level":"warning","message":{"text":"PointerArithmeticOffset.Detect (cognitive 27): PointerArithmeticOffset.Detect has cognitive complexity 27 (threshold 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":"ICSharpCode.Decompiler/IL/PointerArithmeticOffset.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"34df0bed3f89c7ec593326aab9ddcaa6cb7a282e7f106dbbd406a305e2cd0569"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpHighlightingTokenWriter.WriteKeyword (cognitive 27): CSharpHighlightingTokenWriter.WriteKeyword has cognitive complexity 27 (threshold 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":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8adaf047ab53c2ecda3030b6e9f57184aa8434ed0122228aa5557120bc0c14"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.BetterParamsCollectionType (cognitive 26): OverloadResolution.BetterParamsCollectionType has cognitive complexity 26 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":838}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd4012ed4c6abd2b167b53849f6f47502a5a2518585ff12ee95bba669536ab9"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.CalculateDependencyMatrix (cognitive 26): TypeInference.CalculateDependencyMatrix has cognitive complexity 26 (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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"739dbb92b7996fd4d3b5264b1b03bb686a56c5b8acdda6abaf410bb1004326e8"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.ConvertBlockContainer (cognitive 26): StatementBuilder.ConvertBlockContainer has cognitive complexity 26 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1529}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad063dbbc7ab38b449b19fced8d29cf67bbba78633c6718e07fce424dbf0939b"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertFloatingPointLiteral (cognitive 26): TypeSystemAstBuilder.ConvertFloatingPointLiteral has cognitive complexity 26 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1499}}}],"partialFingerprints":{"codehealthFindingId/v1":"84b32a563053eaa1ba0601ca4130e881a0f9111383b825049783a5db7eefd531"}},{"ruleId":"D2","level":"warning","message":{"text":"AddCheckedBlocks.GetResult (cognitive 26): AddCheckedBlocks.GetResult has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/AddCheckedBlocks.cs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd11c4c1af33cdd2f150155ca2a8738f73f5c5b87f632e3123c14d695f54c2d1"}},{"ruleId":"D2","level":"warning","message":{"text":"SecurityDeclarationDecoder.ResolveType (cognitive 26): SecurityDeclarationDecoder.ResolveType has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d414bf1afabea44237fcffaab83634763619b40eff95e592a6ca0ff557f7efa"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringSignatureTypeProvider.GetGenericInstantiation (cognitive 26): IdStringSignatureTypeProvider.GetGenericInstantiation has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"d242d64a5daa0f2d021f02060a027923783c2ee04a6dcb75a470e06be6655b27"}},{"ruleId":"D2","level":"warning","message":{"text":"Dominance.ComputeDominance (cognitive 26): Dominance.ComputeDominance has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/FlowAnalysis/Dominance.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"17947b0400996999981469b198c6440a366c2774df673610f9cac2406ea0259f"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.ValidateCatchBlock (cognitive 26): AsyncAwaitDecompiler.ValidateCatchBlock has cognitive complexity 26 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"55755d67f8bd535b99440e85b6d92076f2b54e2d635bace1501dd09f1af25346"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.Run (cognitive 26): YieldReturnDecompiler.Run has cognitive complexity 26 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2f2477c651e7227a908d18f907b8ad3441ae39bb2911166e662a6e3e35248ac"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.TranslateFieldsToLocalAccess (cognitive 26): YieldReturnDecompiler.TranslateFieldsToLocalAccess has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1151}}}],"partialFingerprints":{"codehealthFindingId/v1":"37cf19ede706c1c9c52cb05b4cf2b5c3abbb3b87b0017318db938da7c94342c4"}},{"ruleId":"D2","level":"warning","message":{"text":"ILInlining.FindLoadInNext (cognitive 26): ILInlining.FindLoadInNext has cognitive complexity 26 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"b080d8c9ef15eee9178c2664ae8c678b0f5abe0e89a0e3291aa49e98fac918f7"}},{"ruleId":"D2","level":"warning","message":{"text":"ReduceNestingTransform.Visit (cognitive 26): ReduceNestingTransform.Visit has cognitive complexity 26 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ReduceNestingTransform.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"a34e9d2d499bf6c632b40574fc05522f2c1b0259978f5cc85671f125718c23e8"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformDisplayClassUsage.ValidateDisplayClassUses (cognitive 26): TransformDisplayClassUsage.ValidateDisplayClassUses has cognitive complexity 26 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9373059cfabd5c3876b058688a7c583aac55fd02662b1079a36f38aa223461e"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertComparison (cognitive 26): TransformExpressionTrees.ConvertComparison has cognitive complexity 26 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 4 belong to 4 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"0284fd5668bb240de9b17d540e9a5242d7caa315538b2377e34d22c70dc2209d"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeParameterSubstitution.ToString (cognitive 26): TypeParameterSubstitution.ToString has cognitive complexity 26 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/TypeParameterSubstitution.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"acd16ca18b27442afb501b3c4fa077e73c3aa2f123c9da2c911c5a72738f7640"}},{"ruleId":"D2","level":"warning","message":{"text":"CompareEngine.CreateEntityTree (cognitive 26): CompareEngine.CreateEntityTree has cognitive complexity 26 (threshold 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":"ILSpy/CompareEngine.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1b42b6586377baf25012757381bbc2bc3000b1345fbbcc79d706c5dcb8ac2cc"}},{"ruleId":"D2","level":"warning","message":{"text":"DockWorkspace.OnAssemblyListChanged (cognitive 26): DockWorkspace.OnAssemblyListChanged has cognitive complexity 26 (threshold 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":"ILSpy/Docking/DockWorkspace.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"a00e500370250dda3de02451e9dc675609966223b66f64081c070ac1eceb6986"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectCtorTransform.Run (cognitive 26): SelectCtorTransform.Run has cognitive complexity 26 (threshold 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3c889b0fc748e951f5cf15c4dbee7669cb1e92155dc955b859b7f711449967f"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.HandleConstructorCall (cognitive 25): CallBuilder.HandleConstructorCall has cognitive complexity 25 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1836}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fa819f29eda503b6ee3ab210909df5298138c0eb41c38b1a3db0c9542ac0e00"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.TranslateStackAllocInitializer (cognitive 25): ExpressionBuilder.TranslateStackAllocInitializer has cognitive complexity 25 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3773}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed2f2ac0aaf9b647fe9fcffc2415189ca5941f22bfb84a1d5bf133c88e188268"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.AddMethodLists (cognitive 25): OverloadResolution.AddMethodLists has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09574918423a1b2996868eae3a6279dee83e23b7e2ab2e23b8c5c30d138c6e3"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternStatementTransform.TransformAutomaticProperty (cognitive 25): PatternStatementTransform.TransformAutomaticProperty has cognitive complexity 25 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f93b95cbe898fcb509b6b97375f6bf6980968b68dec15fd10e09248dcacba3"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringProvider.ResolveTypeInModule (cognitive 25): IdStringProvider.ResolveTypeInModule has cognitive complexity 25 (threshold 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":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":1143}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0aa0d50b2a57088944ae11de34def017384020def40a0f996b69c6f034c52b1"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.AnalyzeMoveNext (cognitive 25): AsyncAwaitDecompiler.AnalyzeMoveNext has cognitive complexity 25 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"80c854104fc2fcfb202ce47cc96c6f7287f2de947a276a41eb7ad9a045c1134c"}},{"ruleId":"D2","level":"warning","message":{"text":"ControlFlowSimplification.SimplifyBranchChains (cognitive 25): ControlFlowSimplification.SimplifyBranchChains has cognitive complexity 25 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/ControlFlowSimplification.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"8829721f1c7033c92e722bb195d4dbc08935f1d9f16eafd0bff2b93f24449ffa"}},{"ruleId":"D2","level":"warning","message":{"text":"ILReader.DecodeCall (cognitive 25): ILReader.DecodeCall has cognitive complexity 25 (threshold 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1731}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9409a7605b70db0d2ea9283dbb3d67c3c03b80b06127c8569301cd5f5c03b47"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAssignment.MatchingGetterAndSetterCalls (cognitive 25): TransformAssignment.MatchingGetterAndSetterCalls has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b8d83e58928a978980c9c23656f1b81591bfd12d2c19de43f207e972059acd5"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformDisplayClassUsage.AnalyzeFunction (cognitive 25): TransformDisplayClassUsage.AnalyzeFunction has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6acbeb57968ec629dd5692a4f127bd99a7496690cbc17fc912f3d0943098d27"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertBinaryNumericOperator (cognitive 25): TransformExpressionTrees.ConvertBinaryNumericOperator has cognitive complexity 25 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"a667d0650561a4af585a0c2f2a2dce22bbc5242d85c872a02a9f0a28b15e739c"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertCall (cognitive 25): TransformExpressionTrees.ConvertCall has cognitive complexity 25 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc047fc37b4fb64be9a92633685f83a67010d9e4611a6793bc7580aed8f16677"}},{"ruleId":"D2","level":"warning","message":{"text":"GetMembersHelper.GetMethodsImpl (cognitive 25): GetMembersHelper.GetMethodsImpl has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/GetMembersHelper.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa87f48f6f311be43a4666a47b64af4ba8dbe134f02d3fb10a0e08d971b32113"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyWithExtensionHandler.Translate (cognitive 25): PropertyWithExtensionHandler.Translate has cognitive complexity 25 (threshold 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":"ICSharpCode.BamlDecompiler/Handlers/Records/PropertyWithExtensionHandler.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfac2f2e0e9145c9d80aa8e1291909e809102eee2cbddc5c36bd7924e8a12676"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.BuildArrayInitializerExpression (cognitive 24): ExpressionBuilder.BuildArrayInitializerExpression has cognitive complexity 24 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3533}}}],"partialFingerprints":{"codehealthFindingId/v1":"1406c78b8b5e285242b51acdee67bda5c4439defd7dcec1405a9dcda0554100f"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.RunTypeInference (cognitive 24): OverloadResolution.RunTypeInference has cognitive complexity 24 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc468acc40dd9f8f81d2f6b34443ab00f98fa7bcd51ebadb8ea47c5f57918a19"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteTryCatch (cognitive 24): RuntimeAsyncExceptionRewriteTransform.TryRewriteTryCatch has cognitive complexity 24 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d2c8aea691d6156981a576bdcc4048f88c6ebd364a5e142bf216082bd0a56b8"}},{"ruleId":"D2","level":"warning","message":{"text":"ILReader.ReadBlock (cognitive 24): ILReader.ReadBlock has cognitive complexity 24 (threshold 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d4786f55836f816c41b1e5ff8f5633e8233c144f357ac14b65a27a45dab2416"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionTransforms.TransformCatchVariable (cognitive 24): ExpressionTransforms.TransformCatchVariable has cognitive complexity 24 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"d85c2007309daf8c88e10c819ebe2db415c91282b46dcaa09f60d0736bff2ac3"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementTransform.Run (cognitive 24): StatementTransform.Run has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/StatementTransform.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a72aeac9d431ee5a5b00b8d3b76e3d27cace6aa342893011b8addbff4722f1"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnNullableTransform.MatchRoslynSwitchOnNullable (cognitive 24): SwitchOnNullableTransform.MatchRoslynSwitchOnNullable has cognitive complexity 24 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnNullableTransform.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"36638e9d1de63a8517cdf6d979e990f1f513c21a8a56ba4da003393a20fc388c"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSearchStrategy.IsMatch (cognitive 24): AbstractSearchStrategy.IsMatch has cognitive complexity 24 (threshold 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":"ICSharpCode.ILSpyX/Search/AbstractSearchStrategy.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1af5a693d187a8a862957e3b026b23b9af1e59903a9079b32a89825f0a5f766"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyCustomHandler.Deserialize (cognitive 24): PropertyCustomHandler.Deserialize has cognitive complexity 24 (threshold 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":"ICSharpCode.BamlDecompiler/Handlers/Records/PropertyCustomHandler.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e032305dd8b0c2438dc414ea9e1b87566bd4b289d49c72ef869730361dfee5af"}},{"ruleId":"D2","level":"warning","message":{"text":"MixedMethodBodyDisassembler.WriteInstruction (cognitive 24): MixedMethodBodyDisassembler.WriteInstruction has cognitive complexity 24 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpILMixedLanguage.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"32c55040004bdd62d5b626208b764f59b6b6293cfdaa644bf13b601305aa62f1"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoEventDecompiler.MatchSimpleCombineAssignment (cognitive 23): AutoEventDecompiler.MatchSimpleCombineAssignment has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"162969994e2e6c49d66676f2faeab9a260b5cb300d0505f0118f1e9d36f6ae7c"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitDeconstructInstruction (cognitive 23): ExpressionBuilder.VisitDeconstructInstruction has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":4891}}}],"partialFingerprints":{"codehealthFindingId/v1":"26c0c32cab3b55e4bb3e3f88eed1393e462fd9cba2e246c4f71008b6399c1f05"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.GetArgumentsWithConversions (cognitive 23): OverloadResolution.GetArgumentsWithConversions has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":1110}}}],"partialFingerprints":{"codehealthFindingId/v1":"90d72a1fff06ab04c015e4d2d482972532d88f56f75649988643d83ae6a1fc44"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertMethod (cognitive 23): TypeSystemAstBuilder.ConvertMethod has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2359}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b311fa3d701bb2a7b6c726f669daf931f8190154ff9b304d59f262bcad304f"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.DetectNullSafeArrayToPointerOrCustomRefPin (cognitive 23): DetectPinnedRegions.DetectNullSafeArrayToPointerOrCustomRefPin has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"91ead98a2fe289423f6fa4c955c19d49a681df9f44f3b193a4e0e656d0097f1d"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.MatchIfChainDispatch (cognitive 23): RuntimeAsyncExceptionRewriteTransform.MatchIfChainDispatch has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"33447aa2204fe42b95a8ce203c3a79adff5b1076c4b78092fc182f5ff674e41a"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchDetection.InlineSwitchExpressionDefaultCaseThrowHelper (cognitive 23): SwitchDetection.InlineSwitchExpressionDefaultCaseThrowHelper has cognitive complexity 23 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/SwitchDetection.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf8282da7fd46457fdc4b451439a9f6b43e9e8bc4be78680cd3bfae3653474d8"}},{"ruleId":"D2","level":"warning","message":{"text":"ILReader.Cast (cognitive 23): ILReader.Cast has cognitive complexity 23 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1398}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a3c7279b821c84f46bce8ea19f1e88fa07112499898f3044eeec1a8bb43c0df"}},{"ruleId":"D2","level":"warning","message":{"text":"ILTypeExtensions.InferType (cognitive 23): ILTypeExtensions.InferType has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/IL/ILTypeExtensions.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a648157c9b29cbb4bc1467935bd316aed7bde28da9a02d9b2a0d2adf65c8aa"}},{"ruleId":"D2","level":"warning","message":{"text":"CachedDelegateInitialization.Run (cognitive 23): CachedDelegateInitialization.Run has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f14414c850e1af5a7c3c76e3a65edbe1a4919e352ae7d191d24c58878041858"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexMethods.IndexMethods.ctor (cognitive 23): IndexMethods.IndexMethods.ctor has cognitive complexity 23 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe29c42e83023e3064eaf8f8d6e310207aa03efada94c53a338f5815e8c7fb68"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableLiftingTransform.LiftNormal (cognitive 23): NullableLiftingTransform.LiftNormal has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"765e93b5a7ce8eda74a82b6d8260c7ae4914bbb3645f6cb60e482e64918aa9c8"}},{"ruleId":"D2","level":"warning","message":{"text":"ProxyCallReplacer.Run (cognitive 23): ProxyCallReplacer.Run has cognitive complexity 23 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/ProxyCallReplacer.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"675467e6c8e63030c5bd2b65ff88a1132bd0355ab91d31a4e04769681e7dbb95"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertListInit (cognitive 23): TransformExpressionTrees.ConvertListInit has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":940}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b484963246d83e55c3de6a206916e67cdaccf3d3ea79cfa85ac5ba179e7628e"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataMethod.MetadataMethod.ctor (cognitive 23): MetadataMethod.MetadataMethod.ctor has cognitive complexity 23 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6660d516947cc9ceb5116b1a078d13ed7a392c067997e5caffb544fb07ec04c2"}},{"ruleId":"D2","level":"warning","message":{"text":"Lexer.Next (cognitive 23): Lexer.Next has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7e46d5816445203184bbce7373cf304fbc5d9429c02eaf54c15dbd607cbe01f"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectionIdRewritePass.ProcessConnectionIds (cognitive 23): ConnectionIdRewritePass.ProcessConnectionIds has cognitive complexity 23 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"8412da0e574a6f9c753aada18edcfa3634a22d5883f838b607bd906bace15a1f"}},{"ruleId":"D2","level":"warning","message":{"text":"CompiledFilter.Compile (cognitive 23): CompiledFilter.Compile has cognitive complexity 23 (threshold 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":"ILSpy/Metadata/CompiledFilter.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cf0ab85e054f800f20def55453697c132be7b271acd28ae703e35c52f825c28"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.HandlePointerArithmetic (cognitive 22): ExpressionBuilder.HandlePointerArithmetic has cognitive complexity 22 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"584578523a06a473b98096f0411725b8d3e26aa8f1245041d1c188199f6fa814"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitStObj (cognitive 22): ExpressionBuilder.VisitStObj has cognitive complexity 22 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2968}}}],"partialFingerprints":{"codehealthFindingId/v1":"93658e06c449b3b7ba6676139955bbe6a3d7ea073952686b84348dededa89b79"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpOutputVisitor.VisitPropertyDeclaration (cognitive 22): CSharpOutputVisitor.VisitPropertyDeclaration has cognitive complexity 22 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":2651}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb16fc8396a19b59b385e54459f5cd6c612ca2b46412f1f25833c2157a360c6"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.LookInCurrentType (cognitive 22): CSharpResolver.LookInCurrentType has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1614}}}],"partialFingerprints":{"codehealthFindingId/v1":"599e79f918e76a8579e324def28fc74bfa8284b6c58a1d41f8362057166bd172"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.CreateParameters (cognitive 22): CSharpResolver.CreateParameters has cognitive complexity 22 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2341}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0a7ac2f1575ea2dc47541f4e27ee6732baf9115194f72b843f8d452ba4b655b"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodGroupResolveResult.PerformOverloadResolution (cognitive 22): MethodGroupResolveResult.PerformOverloadResolution has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MethodGroupResolveResult.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dc9f8210f2b8a29e0985735fb3203cf7b1faebe97d735c87bd2b40db26eb724"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.CanBeDeconstructedInForeach (cognitive 22): StatementBuilder.CanBeDeconstructedInForeach has cognitive complexity 22 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"df3b9eb37cb7d803f55de6a325e8809d6391e7f66bb457fa54f1e8a523ce1c5e"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertAttribute (cognitive 22): TypeSystemAstBuilder.ConvertAttribute has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0f6b26804be395a7fa77ed6ab42257d38fa710386a3031a29bd06df0b642fe1"}},{"ruleId":"D2","level":"warning","message":{"text":"DeclareVariables.InsertDeconstructionVariableDeclarations (cognitive 22): DeclareVariables.InsertDeconstructionVariableDeclarations has cognitive complexity 22 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b40f3518f5972aa73e2003184a8f3587f91f5e65f484c0aeaea98ef5d5d76f"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.WriteParameters (cognitive 22): ReflectionDisassembler.WriteParameters has cognitive complexity 22 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1107}}}],"partialFingerprints":{"codehealthFindingId/v1":"9520581fc3b653640c65089a87b3cdcfc45d7376c372d88f2e3b9f8225d2ba9c"}},{"ruleId":"D2","level":"warning","message":{"text":"LoopDetection.ExtendLoop (cognitive 22): LoopDetection.ExtendLoop has cognitive complexity 22 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/LoopDetection.cs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"95b27210cc7c4fb0e090145dc2dcd9da37347545c616011518ed32b458ba90d9"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertValue (cognitive 22): TransformExpressionTrees.ConvertValue has cognitive complexity 22 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"604b47d10e73745696a6f38910bc1b0581fab0e78d6bbd755f2721abfbdc8fda"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataTypeDefinition.GetFilteredAccessors (cognitive 22): MetadataTypeDefinition.GetFilteredAccessors has cognitive complexity 22 (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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e08f146fcc4128b332597dd41a8428a3c653476b9fb03d8d48fe316ab46399c"}},{"ruleId":"D2","level":"warning","message":{"text":"BamlNode.Parse (cognitive 22): BamlNode.Parse has cognitive complexity 22 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Baml/BamlNode.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"fca1d5476624999330be764190c6fcc0148a62ca5ac327c2fa20926f50cf2340"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlType.ResolveNamespace (cognitive 22): XamlType.ResolveNamespace has cognitive complexity 22 (threshold 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":"ICSharpCode.BamlDecompiler/Xaml/XamlType.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf76eb5a63ad75ec0164151456f14cba6bee7f8729be83d12b7ab6c9bfff650"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cognitive 21): CSharpDecompiler.DoDecompile has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2383}}}],"partialFingerprints":{"codehealthFindingId/v1":"82499bdce45c208644ca1f83d3051fbf18833eb9dca59f128edec1f88c2b8d6d"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitLdFlda (cognitive 21): ExpressionBuilder.VisitLdFlda has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3118}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cab6d0b9fe969749f84034ba90d91f57a25f442dbfdbbfed49b7fbc997efed7"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.MakeExactInference (cognitive 21): TypeInference.MakeExactInference has cognitive complexity 21 (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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa732ccc95006d0dacd342a13037001479ea5804a78d7434a81bba89026d260"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertTypeParameterConstraint (cognitive 21): TypeSystemAstBuilder.ConvertTypeParameterConstraint has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2609}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2afd41142fa0ce0f75e0013d6adc659e8f04642b020683f9519a31d0d4ad456"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternStatementTransform.TransformForeachOnInlineArray (cognitive 21): PatternStatementTransform.TransformForeachOnInlineArray has cognitive complexity 21 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e89833ea86f24b54c1c2fd5719f41795eba61c3232db92ad79ea61e78583621"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.TryDecodeSecurityDeclaration (cognitive 21): ReflectionDisassembler.TryDecodeSecurityDeclaration has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"d32a4faf86e6351182af6fcf57b15d5bf2a16c4ccf9b5ffd4a8d396a66ea27e6"}},{"ruleId":"D2","level":"warning","message":{"text":"AwaitInCatchTransform.MatchExceptionCaptureBlock (cognitive 21): AwaitInCatchTransform.MatchExceptionCaptureBlock has cognitive complexity 21 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f52c8e294ce53e29e1e9052ac3d4bec5c223b099ef3f96baff00774ec168cdc"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.CleanSkipFinallyBodies (cognitive 21): YieldReturnDecompiler.CleanSkipFinallyBodies has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1409}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a29093b6a07c4752e06919fb923706a9cc241a113e0f113631d91486884eb77"}},{"ruleId":"D2","level":"warning","message":{"text":"DeconstructInstruction.CheckInvariant (cognitive 21): DeconstructInstruction.CheckInvariant has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/Instructions/DeconstructInstruction.cs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"cef67004f5f5c5fec5ebe15e9a229f3616a08d35c68c400ec2001c4773a8ba87"}},{"ruleId":"D2","level":"warning","message":{"text":"ILInlining.DoInline (cognitive 21): ILInlining.DoInline has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f40ea9ca1c2d0c7d1424c9a87d97d0e0c0b7bad32fe113c9d7f15b04c641993"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexRangeTransform.HandleLdElema (cognitive 21): IndexRangeTransform.HandleLdElema has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0ac1bb66bb83afd4abe861c75d514a492d7da53e94f2bffe08088cde19b5786"}},{"ruleId":"D2","level":"warning","message":{"text":"InlineArrayTransform.MatchSpanIndexerWithInlineArrayAsSpan (cognitive 21): InlineArrayTransform.MatchSpanIndexerWithInlineArrayAsSpan has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/InlineArrayTransform.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f215e6128998dba0be1d782e48d2dc3d2c5bba7acbbdab6daebe098e9e88464"}},{"ruleId":"D2","level":"warning","message":{"text":"ReduceNestingTransform.ReduceSwitchNesting (cognitive 21): ReduceNestingTransform.ReduceSwitchNesting has cognitive complexity 21 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/ReduceNestingTransform.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4c5d8ca96e3cfc5622cca0f311c46d6669736f4de342d35c08ea0ff150dd37f"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.ScanHashtableInitializerBlocks (cognitive 21): SwitchOnStringTransform.ScanHashtableInitializerBlocks has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcef3bc9f5dd1ab8e7e1c38a5f437df6e1b365accf7530673e7f13a10570beb4"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.MatchStringEqualityComparison (cognitive 21): SwitchOnStringTransform.MatchStringEqualityComparison has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1754}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f33828c5b7101a130304bbf88b740d55cda4cf0d5957ccbf8e1c9760b8b5cce"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyAttributeTypeVisitor.VisitTypeDefinition (cognitive 21): ApplyAttributeTypeVisitor.VisitTypeDefinition has cognitive complexity 21 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1ce8dde92cba01763d2d94745898e6cd895c4c4302cd3fa976a4162be94f911"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataMethod.DecodeSignature (cognitive 21): MetadataMethod.DecodeSignature has cognitive complexity 21 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"1653c6b2a6c4163f551fa8f19ca21389c893a2e376b7d428a5e10541083df5ea"}},{"ruleId":"D2","level":"warning","message":{"text":"InheritanceHelper.GetBaseMembers (cognitive 21): InheritanceHelper.GetBaseMembers has cognitive complexity 21 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/InheritanceHelper.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"1454bc9e239c507a1e858ff272c55cd803cb6d1464b653cabec75654021a8482"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlPathDeserializer.Deserialize (cognitive 21): XamlPathDeserializer.Deserialize has cognitive 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":"ICSharpCode.BamlDecompiler/Xaml/XamlPathDeserializer.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ecb1eca180a3f8e98db6adcfd9e08f11391fccfff9f9735886a117a3e8b49ca"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtractPackageEntryContextMenuEntry.CollectAllFiles (cognitive 21): ExtractPackageEntryContextMenuEntry.CollectAllFiles has cognitive complexity 21 (threshold 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":"ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce14e887c98693d656212d2f4a58b20fb2f9bbb28f4ce4e4504533a00c9b5efc"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataColumnBuilder.BuildHeader (cognitive 21): MetadataColumnBuilder.BuildHeader has cognitive complexity 21 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. 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":"ILSpy/Metadata/MetadataColumnBuilder.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ae5d6a616145f6e0ffe3b98b74d63d3f7b846c18e6d30572b8b3c4ae7f424ee"}},{"ruleId":"D2","level":"warning","message":{"text":"MainMenu.AppendTabSection (cognitive 21): MainMenu.AppendTabSection has cognitive complexity 21 (threshold 15). Most of this is not in the body itself: 6 of the 21 points are its own statements and the rest belongs to one function literal inside it that branches (line 380). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Views/MainMenu.axaml.cs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59fcc38a50b88032bec01ed1642b72993afe29b43613d977c7fd8a60c974203"}},{"ruleId":"D2","level":"warning","message":{"text":"ManageAssemblyListsDialog.GetPreconfiguredAssemblyLists (cognitive 21): ManageAssemblyListsDialog.GetPreconfiguredAssemblyLists has cognitive complexity 21 (threshold 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":"ILSpy/Views/ManageAssemblyListsDialog.axaml.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ca038c521e4a438ecf8735c342b1b13640e0e04e1eb707ebdafdfe450d341d"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.HandleRangeConstruction (cognitive 20): CallBuilder.HandleRangeConstruction has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":2245}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b193a5020e586b4ea3db12a86a58b7fe135608383865958eba6845076cb52ee"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DetectBestEnumValueDisplayMode (cognitive 20): CSharpDecompiler.DetectBestEnumValueDisplayMode has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1975}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db01074e6bd491d9ea656cb6db0d79a52ab60503d0cd8c22722e0a507aec37d"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cognitive 20): CSharpDecompiler.DoDecompile has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2036}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0d328449e4c15b077a6d59e0e448608016ed51600b8e82abe7af0acd5762bc"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.ConvertField (cognitive 20): ExpressionBuilder.ConvertField has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"478a9821f98ac93e3fe783c6b7cc8ac318f0976ee883ae828671b378fd4777e0"}},{"ruleId":"D2","level":"warning","message":{"text":"InsertParenthesesVisitor.VisitBinaryOperatorExpression (cognitive 20): InsertParenthesesVisitor.VisitBinaryOperatorExpression has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"8554177ccc2097745eec8e0286334fd6a1660877850ca2bb7e2425fbad20d6da"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.IsEligibleExtensionMethod (cognitive 20): CSharpResolver.IsEligibleExtensionMethod has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2133}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2c220bf8199147e25e40d2a1e2acfe6645efa907df7fdc04f4860bc4e96e4a7"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveConditional (cognitive 20): CSharpResolver.ResolveConditional has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2711}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce7c8b0db8d7c74b6ab18cc56fa540d2dc34540e64ec964dd19f2cf5950b4952"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.VisitPinnedRegion (cognitive 20): StatementBuilder.VisitPinnedRegion has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1201}}}],"partialFingerprints":{"codehealthFindingId/v1":"76f5a098dee4a4148890e88db5f59cb2bc53f03bb2f77afa1323bf6d093dd06e"}},{"ruleId":"D2","level":"warning","message":{"text":"DeclareVariables.ResolveCollisions (cognitive 20): DeclareVariables.ResolveCollisions has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"b779be816605a88436c244edd06f9fc60dcc8726949645825ba953a332e9c5f7"}},{"ruleId":"D2","level":"warning","message":{"text":"FixNameCollisions.Run (cognitive 20): FixNameCollisions.Run has cognitive complexity 20 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"10476ab401f62f05f27bc69cb2dc8b4a486d18d9fa9fc8a6864a18012a3d2d34"}},{"ruleId":"D2","level":"warning","message":{"text":"TranslatedExpression.ConvertToBoolean (cognitive 20): TranslatedExpression.ConvertToBoolean has cognitive complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a56e7db84831cedc377361e4a074c6f702baa3ad82a08d8632eeda72f42a70"}},{"ruleId":"D2","level":"warning","message":{"text":"XmlDocumentationProvider.GetDocumentation (cognitive 20): XmlDocumentationProvider.GetDocumentation has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/Documentation/XmlDocumentationProvider.cs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b0d0ede3477c0c60fa13f72c9d39a7619c4d6af4869b6562e6d66b759e0c843"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.TranslateThisCopyAccess (cognitive 20): AsyncAwaitDecompiler.TranslateThisCopyAccess has cognitive complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7f8d8c2a32d244cc348809021b1dd9a25f6e2f785e2578b007fd918abe9de9"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.IsNullSafeArrayToPointerNotNullBlock (cognitive 20): DetectPinnedRegions.IsNullSafeArrayToPointerNotNullBlock has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"b92effe20327f6b936a565ed2da51f12551a969011d4a9828c2ad6fe746f42ba"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.NormalizeRuntimeAsyncFilter (cognitive 20): RuntimeAsyncExceptionRewriteTransform.NormalizeRuntimeAsyncFilter has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b25cd4e299d7e0c2417921a8bcd5e64ecfd37583ededed371c53b72482c7407"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.TryRewriteTryFinally (cognitive 20): RuntimeAsyncExceptionRewriteTransform.TryRewriteTryFinally has cognitive complexity 20 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"8319c1dad625f60e01093124ffe43ef9c74e1db97d607c75ae6cc41a5a5b6039"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchAnalysis.AnalyzeSwitch (cognitive 20): SwitchAnalysis.AnalyzeSwitch has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/SwitchAnalysis.cs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccfdf6ff95014b718f58209b3a24e02115285a4bd19eed47a83d13a2517cc506"}},{"ruleId":"D2","level":"warning","message":{"text":"ILReader.CheckOutgoingEdges (cognitive 20): ILReader.CheckOutgoingEdges has cognitive complexity 20 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"23225d94ac2d2b24ebe8c6abf41de3a006fffaf67fecb9321fa377972fc89635"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectCatchWhenConditionBlocks.PropagateExceptionVariable (cognitive 20): DetectCatchWhenConditionBlocks.PropagateExceptionVariable has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca17061ab4eb8830c0f0353dc19a3dedbf9c40241d32cb3b488c422063b4c4cc"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionTransforms.TransformSpanTCtorContainingStackAlloc (cognitive 20): ExpressionTransforms.TransformSpanTCtorContainingStackAlloc has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e9147a5360d7c173eb6ec41feffca87a1cd0b11a5833fc9a8ff3d7900b47372"}},{"ruleId":"D2","level":"warning","message":{"text":"NullPropagationTransform.IsFallbackBlock (cognitive 20): NullPropagationTransform.IsFallbackBlock has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa874a9d5e41fa339ad582ca99061bfedc87bbf5001a3f89c6645e828ed0b10a"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertNewObject (cognitive 20): TransformExpressionTrees.ConvertNewObject has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":1171}}}],"partialFingerprints":{"codehealthFindingId/v1":"518ebca8ed84073eeea2d8158988543fc2833d0e058826adcfccdb32e4d7f4e1"}},{"ruleId":"D2","level":"warning","message":{"text":"TextTokenWriter.GetCurrentLocalDefinition (cognitive 20): TextTokenWriter.GetCurrentLocalDefinition has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/Output/TextTokenWriter.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"515b7f925fd97da380dce23ce538fd0807f1d30a46968dab13c9759b53e0ed82"}},{"ruleId":"D2","level":"warning","message":{"text":"ParameterListComparer.Equals (cognitive 20): ParameterListComparer.Equals has cognitive complexity 20 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/ParameterListComparer.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa5fd3624f8657ddd42630e44d8d3fc2926abb6a439b2435a5481462128131d9"}},{"ruleId":"D2","level":"warning","message":{"text":"ILSpyCmdProgram.GetSettings (cognitive 20): ILSpyCmdProgram.GetSettings has cognitive complexity 20 (threshold 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":"ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"923932070e32580edb8c90c5b96e5771d99f7822318063a77bf0c5762d7e878e"}},{"ruleId":"D2","level":"warning","message":{"text":"ContextMenuProvider.BuildLevel (cognitive 20): ContextMenuProvider.BuildLevel has cognitive complexity 20 (threshold 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":"ILSpy/ContextMenuProvider.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bf7043f61ccf7e902c50860f6961e944d58a4ba2ae26899e7b679e8f10012d5"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyTreeNode.LoadChildren (cognitive 20): AssemblyTreeNode.LoadChildren has cognitive complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"ILSpy/TreeNodes/AssemblyTreeNode.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"84da522bc19639e56e814ddc89133f024028afd8c99432cab71de824def02b9c"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.IsUnambiguousAccess (cognitive 19): CallBuilder.IsUnambiguousAccess has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1665}}}],"partialFingerprints":{"codehealthFindingId/v1":"95b7a83f65c3b8f89ba26d4f4e36d1313345b00301e8b06ad38dc98d454d7add"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.LdObj (cognitive 19): ExpressionBuilder.LdObj has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2894}}}],"partialFingerprints":{"codehealthFindingId/v1":"960895003d59f8ec415fb3a7b9356268b2b7fdec96aafab173a432c5db81c2a3"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitLdFtn (cognitive 19): ExpressionBuilder.VisitLdFtn has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":4774}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae97235a33495e6a96214ea15ff212fb941c956810b5ac89e6297d4e96a00a9c"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpOutputVisitor.IsKeyword (cognitive 19): CSharpOutputVisitor.IsKeyword has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"747488f3946e72a8967a5b9edbe2b27370ebdf3e54061d2c8dcd0b260eae488b"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpOutputVisitor.VisitIndexerDeclaration (cognitive 19): CSharpOutputVisitor.VisitIndexerDeclaration has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":2486}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b1a3bfb86748f16abb30526b66ef87ef21e6bd4fa20632031656b9d6608654d"}},{"ruleId":"D2","level":"warning","message":{"text":"InsertRequiredSpacesDecorator.WritePrimitiveValue (cognitive 19): InsertRequiredSpacesDecorator.WritePrimitiveValue has cognitive complexity 19 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertRequiredSpacesDecorator.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"b467384d9bed3e28c91d9735fc6ae0dfab3074297e3e3d80ad8e3967cedcfbb1"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordDecompiler.IsGeneratedEqualityContract (cognitive 19): RecordDecompiler.IsGeneratedEqualityContract has cognitive complexity 19 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"62fea0d0533ee5183f55f970aeafbfc7f20173f732e506459b589060ab04e1be"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.IsDelegateCompatible (cognitive 19): CSharpConversions.IsDelegateCompatible has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1440}}}],"partialFingerprints":{"codehealthFindingId/v1":"f159b3f161c6d5e75d0547144774097e9dcce139a6eb3fb59691438f4616d6dd"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.LookupType (cognitive 19): MemberLookup.LookupType has cognitive complexity 19 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"3125b1d0568c2f7963fdf1d10282874afc099a2609d60749c0ab7ff3ce7ea259"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.Lookup (cognitive 19): MemberLookup.Lookup has cognitive complexity 19 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c05f60798569604f6037ccdc9eeb9555be8cd2421db31157ea3c158c7fcd86a"}},{"ruleId":"D2","level":"warning","message":{"text":"OverloadResolution.ValidateConstraints (cognitive 19): OverloadResolution.ValidateConstraints has cognitive complexity 19 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e003fe903c4d6899656863d062e8dce0ec206a0ac403671a824eda4c15ba0e9"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.WriteModuleHeader (cognitive 19): ReflectionDisassembler.WriteModuleHeader has cognitive complexity 19 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":2119}}}],"partialFingerprints":{"codehealthFindingId/v1":"7da1d4405099499a83d5fef48c13fa2da671071717a47e84025565bb302b3907"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringProvider.RoslynFormBelongsToSibling (cognitive 19): IdStringProvider.RoslynFormBelongsToSibling has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a646b326c4fb5d06fb5fd4d08fc62d2cf100b2ef7f143d6714385c6e62463c2"}},{"ruleId":"D2","level":"warning","message":{"text":"DeconstructInstruction.IsAssignment (cognitive 19): DeconstructInstruction.IsAssignment has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/IL/Instructions/DeconstructInstruction.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d50c01d63b8b172bd7ad7452b25a86edefd3b79d9dfd7f41540b1ae70709966"}},{"ruleId":"D2","level":"warning","message":{"text":"MatchInstruction.IsPatternMatch (cognitive 19): MatchInstruction.IsPatternMatch has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/IL/Instructions/MatchInstruction.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f7ee1e988a32ef78cc23e3d93fe3e72f06fa0c33eec75fd960ae5edbdf76e9"}},{"ruleId":"D2","level":"warning","message":{"text":"AssignVariableNames.GenerateForeachVariableName (cognitive 19): AssignVariableNames.GenerateForeachVariableName has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"49bfbd209c9ce78cc3af9085379159183895f0edd7083ca933a557386b162de2"}},{"ruleId":"D2","level":"warning","message":{"text":"HighLevelLoopTransform.MatchDoWhileConditionBlock (cognitive 19): HighLevelLoopTransform.MatchDoWhileConditionBlock has cognitive complexity 19 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/HighLevelLoopTransform.cs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"16d7edb6c69c3aeebce0e6ce53f1779933bc77558df48edd8c07a82ac10cb8a8"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalFunctionDecompiler.DetermineCaptureAndDeclarationScope (cognitive 19): LocalFunctionDecompiler.DetermineCaptureAndDeclarationScope has cognitive complexity 19 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a71ac52db1f5a26c1ee75bc6f3d32716d61aa24ca4e6e7c4bdc76a3b61bc28e"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataTypeDefinition.MetadataTypeDefinition.ctor (cognitive 19): MetadataTypeDefinition.MetadataTypeDefinition.ctor has cognitive complexity 19 (threshold 15). 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"0530c45a713c14ae760b4a39fae9216c4131cab22df566a9765d873fac5b30e1"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourcesFile.ResourcesFile.ctor (cognitive 19): ResourcesFile.ResourcesFile.ctor has cognitive complexity 19 (threshold 15). 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":"ICSharpCode.Decompiler/Util/ResourcesFile.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef50570aeee5d213acc8d8afa5bdbd612513ce1d2fb533f81ce7b5941c12eb9d"}},{"ruleId":"D2","level":"warning","message":{"text":"MyAssemblyResolver.ResolveModuleAsync (cognitive 19): MyAssemblyResolver.ResolveModuleAsync has cognitive complexity 19 (threshold 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":"ICSharpCode.ILSpyX/LoadedAssembly.cs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bceb57114f7b40ea748f1145a04e4a9a739874ee4c3e4122d3a30a0c7d59cf2"}},{"ruleId":"D2","level":"warning","message":{"text":"Lexer.ReadEscapeSequence (cognitive 19): Lexer.ReadEscapeSequence has cognitive complexity 19 (threshold 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":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddeaee647d2118d00fdd11e908753e056cee2b9a2bb9a0d825b13c11fd33cb2f"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpBracketSearcher.QuickSearchBracketForward (cognitive 19): CSharpBracketSearcher.QuickSearchBracketForward has cognitive complexity 19 (threshold 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":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d6a57b097417dd1ed122634338b440719a4b9e971c2b1a898216a0125e1117"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DecompileBody (cognitive 18): CSharpDecompiler.DecompileBody has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2133}}}],"partialFingerprints":{"codehealthFindingId/v1":"8008cf5dd11324c20a87cdf93e9834690d33ab04d2b4c0ce5e00d3cc2f81fe24"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cognitive 18): CSharpDecompiler.DoDecompile has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2515}}}],"partialFingerprints":{"codehealthFindingId/v1":"27753f89240b894043d62aefe25ef79d1d43ef8789043c69ed8e5344f8dde388"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.DoDecompile (cognitive 18): CSharpDecompiler.DoDecompile has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2583}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9d066a63f798b5485f45738b42ebd5e2e246f16664619bcc017e54f148fd16"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpOutputVisitor.PrintInitializerElements (cognitive 18): CSharpOutputVisitor.PrintInitializerElements has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"01bf50e52600cbde585814fd684a4d6bde936984e8f303439b1c1ff20cbeebd8"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpOutputVisitor.VisitDocumentationReference (cognitive 18): CSharpOutputVisitor.VisitDocumentationReference has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":3090}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d7828dd4b84c5fe1444a3f66ac9a5d78dd4b0d474d84fd1493bbc5fb7172172"}},{"ruleId":"D2","level":"warning","message":{"text":"MemberLookup.AddNestedTypes (cognitive 18): MemberLookup.AddNestedTypes has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2220077ce0087a5e4957973624916c8bd17dc966ca33a78c1e38fa17abdf22d"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.IsSpecialConstant (cognitive 18): TypeSystemAstBuilder.IsSpecialConstant has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ac876aa05e66b9ea5cb96682ed3bdf0f21ef023b3d89b4246be7566469f476"}},{"ruleId":"D2","level":"warning","message":{"text":"IntroduceExtensionMethods.CanTransformToExtensionMethodCall (cognitive 18): IntroduceExtensionMethods.CanTransformToExtensionMethodCall has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/CSharp/Transforms/IntroduceExtensionMethods.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"66b8f77ed47bd278ef54b251a10d7cda66901a02812865ca65d20fb6e967e0e0"}},{"ruleId":"D2","level":"warning","message":{"text":"ILStructure.AddNestedStructure (cognitive 18): ILStructure.AddNestedStructure has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ILStructure.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"3288e3af967e4461c74bf3e83a4dd6f303b171079d88f2ab5aa5432649110b69"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.WriteValue (cognitive 18): ReflectionDisassembler.WriteValue has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b492c201db7ec6a84aec55966669cfa37e68421b3b9a78cefdf1bc44aaa56b"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchVisualBasicStateMachineFieldAssignements (cognitive 18): AsyncAwaitDecompiler.MatchVisualBasicStateMachineFieldAssignements has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd6c12ab447f0c10fcf0b7a4fc309ab3b7c32c5b70f01bccc26d11eb849f54f1"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncAwaitDecompiler.MatchDisposeCombinedTokens (cognitive 18): AsyncAwaitDecompiler.MatchDisposeCombinedTokens has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b244542c3365a67cf24b380e5ac841e81ad878c10637429736111dfbf13243"}},{"ruleId":"D2","level":"warning","message":{"text":"ControlFlowGraph.CreateEdges (cognitive 18): ControlFlowGraph.CreateEdges has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/ControlFlowGraph.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"154a5d13137332ade45ca9074ec3dda23da0df437a78f19bce1d0e656ad892b9"}},{"ruleId":"D2","level":"warning","message":{"text":"YieldReturnDecompiler.ConstructExceptionTable (cognitive 18): YieldReturnDecompiler.ConstructExceptionTable has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d7875314de5029508f60ade95d1d0e3b903717c050d53569208c1127c810ad2"}},{"ruleId":"D2","level":"warning","message":{"text":"AssignVariableNames.GetNameForArgument (cognitive 18): AssignVariableNames.GetNameForArgument has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"c56b228ecb9f76a409bc64e8590e8de3c250efa8b41e48a4ce76f5c0a7fc9b4f"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionTransforms.VisitComp (cognitive 18): ExpressionTransforms.VisitComp has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"6089d7e1f5bdb81887ea52e94fa575e8c19e79037230dda502b0dae81d218086"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexRangeTransform.MatchGetOffset (cognitive 18): IndexRangeTransform.MatchGetOffset has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"20cf6d3eb9e2e462e41c8f7b8970f350c657aa7aa709f72f38413ddbd73f2c46"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableLiftingTransform.LiftCSharpEqualityComparison (cognitive 18): NullableLiftingTransform.LiftCSharpEqualityComparison has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a6d450e70ffb82b011d2e6367a0dee727180d09888743519ba9cdda20dbff14"}},{"ruleId":"D2","level":"warning","message":{"text":"NullableLiftingTransform.LiftCSharpUserEqualityComparison (cognitive 18): NullableLiftingTransform.LiftCSharpUserEqualityComparison has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea11b314b2cbaedbfe27de9c109472b0e66d3f744f12ea0286d181d8dbb39216"}},{"ruleId":"D2","level":"warning","message":{"text":"ReduceNestingTransform.CanDuplicateExit (cognitive 18): ReduceNestingTransform.CanDuplicateExit has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/ReduceNestingTransform.cs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd1ff79bcf2ee931a34ac9fb1031c628253108c2e645d16edb37af5c0f1a95f"}},{"ruleId":"D2","level":"warning","message":{"text":"SplitVariables.HandleCall (cognitive 18): SplitVariables.HandleCall has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/SplitVariables.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"1643408296de3b6608f84bdab9309670ffb30d7cc210b683b13df733ef503984"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnNullableTransform.MatchSwitchOnNullable (cognitive 18): SwitchOnNullableTransform.MatchSwitchOnNullable has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnNullableTransform.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"f181345d02103e1e88d04838ea44b4aae8a341e8153bc9218f6517d60f407d05"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformArrayInitializers.HandleCpblkInitializer (cognitive 18): TransformArrayInitializers.HandleCpblkInitializer has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a11422106648ae21a0b4643747919cdb1a355a0627dccd21aa0bb0f0c09cb98"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerTypeSystem.GetOptions (cognitive 18): DecompilerTypeSystem.GetOptions has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"996dab50d5136994d0492c2dc7e3d4e8027c6ad00eac466eeab9f662b0938c08"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemExtensions.IsUnmanagedType (cognitive 18): TypeSystemExtensions.IsUnmanagedType has cognitive complexity 18 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a932b4e5343d1fb11f044c6de99205c8896c95692316da0ad2247ee9f8dab739"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemExtensions.GetElementTypeFromIEnumerable (cognitive 18): TypeSystemExtensions.GetElementTypeFromIEnumerable has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"41dc3f2e36cefec6309bef64c353af8291ea2cf106b5ce8ecd37b763a7cda722"}},{"ruleId":"D2","level":"warning","message":{"text":"ILSpyCmdProgram.ExtractResource (cognitive 18): ILSpyCmdProgram.ExtractResource has cognitive complexity 18 (threshold 15). 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":"ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b4380239b15c8e8fc84735211cf76f26a92079b62f69e5177c6407ffc429437"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralSearchStrategy.Search (cognitive 18): LiteralSearchStrategy.Search has cognitive complexity 18 (threshold 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":"ICSharpCode.ILSpyX/Search/LiteralSearchStrategy.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"1732444d5eb16af0d4ccb46e5a27c0538506fa3676458418135852553e49db97"}},{"ruleId":"D2","level":"warning","message":{"text":"BamlContext.ConstructContext (cognitive 18): BamlContext.ConstructContext has cognitive complexity 18 (threshold 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":"ICSharpCode.BamlDecompiler/Baml/BamlContext.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"3592c7909fb0acc520316888cb93f49dc97ef5342182098327476fbf5211778c"}},{"ruleId":"D2","level":"warning","message":{"text":"OptimizedStaticResourceHandler.TranslateDefer (cognitive 18): OptimizedStaticResourceHandler.TranslateDefer has cognitive complexity 18 (threshold 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":"ICSharpCode.BamlDecompiler/Handlers/Records/OptimizedStaticResourceHandler.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2b107de1b5136382574439e8e0532fd2290adfc440de4299781699e90eb5f36"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpLanguage.ToCSharpString (cognitive 18): CSharpLanguage.ToCSharpString has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b81b33a339704b1ab6869720f607b262fd7ed53cfa90a501b8a5241d4036220"}},{"ruleId":"D2","level":"warning","message":{"text":"Language.GetEntityName (cognitive 18): Language.GetEntityName has cognitive complexity 18 (threshold 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":"ILSpy/Languages/Language.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"d209e61e07e6d570483231f1b23682c9635393c34cfae238d257323460dd28e8"}},{"ruleId":"D2","level":"warning","message":{"text":"CustomDebugInformationEntry.ParseRowDetails (cognitive 18): CustomDebugInformationEntry.ParseRowDetails has cognitive complexity 18 (threshold 15). 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":"ILSpy/Metadata/DebugTables/CustomDebugInformationTableTreeNode.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"11dbb0adb7c9e86aa9ed73ae610bf8afe98e868b0df904e6f2086ae7b54e953f"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerTabPageModel.DecompileAsync (cognitive 18): DecompilerTabPageModel.DecompileAsync has cognitive complexity 18 (threshold 15). Of this number, 10 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DecompilerTabPageModel.cs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"a341528350fa133d9aa13bbc55b406377650b210cc140fa55644cbbe140a7a0f"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeTreeNode.LoadChildren (cognitive 18): TypeTreeNode.LoadChildren has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TreeNodes/TypeTreeNode.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"56ddb1a3a02c547e49ef3e386a62856545c2544f7e48cf5a50000cfdf8f1c04e"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageListDecoder.ExtractFrame (cognitive 18): ImageListDecoder.ExtractFrame has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Util/ImageListDecoder.cs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"25fa9d237bdd3c46cffbc06319361af1dfe9d3453ec0670935f839712dabe33c"}},{"ruleId":"D2","level":"warning","message":{"text":"DebugStepsPaneModel.ApplyFilter (cognitive 18): DebugStepsPaneModel.ApplyFilter has cognitive complexity 18 (threshold 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":"ILSpy/ViewModels/DebugStepsPaneModel.cs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0c0fc0ab7fe6a1a1d51502c67331cafc274ba9d4879145c5843c1f7fc75045"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.IsUnambiguousMethodReference (cognitive 17): CallBuilder.IsUnambiguousMethodReference has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e04ca41c17a426fa7c6a65e607e4b513c8930907cdea6992a9691127c51773"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpDecompiler.CleanUpMethodDeclaration (cognitive 17): CSharpDecompiler.CleanUpMethodDeclaration has cognitive complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":2246}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f1bfbe2a12f92366c6801a22cc7c11e9746d32e7d702231e99149afd365e0e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.Translate (cognitive 17): ExpressionBuilder.Translate has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"367909758a627f6e1ece68dfc3232e38b6b9f8fd782988aca9610045fd9e7a9f"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitStLoc (cognitive 17): ExpressionBuilder.VisitStLoc has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"462bce6aa278f5e51eecb771268df696977c1f712ffebbc35badd467ae64274e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.HandlePointerSubtraction (cognitive 17): ExpressionBuilder.HandlePointerSubtraction has cognitive complexity 17 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1545}}}],"partialFingerprints":{"codehealthFindingId/v1":"3922cae447a2ea11d73b702a268311ad906e26c7171729e999b9d8f6fa9846c2"}},{"ruleId":"D2","level":"warning","message":{"text":"InsertMissingTokensDecorator.EndNode (cognitive 17): InsertMissingTokensDecorator.EndNode has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertMissingTokensDecorator.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"345d4f4fe79975400e4df06ade0dcef4a4203c541098e00ea724e26bebb58149"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.StandardImplicitConversion (cognitive 17): CSharpConversions.StandardImplicitConversion has cognitive complexity 17 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"5407ff47fb217642d025f6b8c185e6f7a329bc574d8ba420e191e2fc0ba52db6"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.LookInUsingScopeNamespace (cognitive 17): CSharpResolver.LookInUsingScopeNamespace has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1717}}}],"partialFingerprints":{"codehealthFindingId/v1":"5296652649905b514505611cec9e85b290781d5d3cb9507147a3df3fb037fe44"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveForeach (cognitive 17): CSharpResolver.ResolveForeach has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1914}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d81f52775560f79eec859816025b29b0ba8bbbab3e12be7226a3dabd4cfc815"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpResolver.ResolveObjectCreation (cognitive 17): CSharpResolver.ResolveObjectCreation has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2539}}}],"partialFingerprints":{"codehealthFindingId/v1":"309d520918cb87914b7c5bcbbb0e31d4fac41fa71d6a64cbfc8b49641d13c719"}},{"ruleId":"D2","level":"warning","message":{"text":"ILParser.SetBranchTargets (cognitive 17): ILParser.SetBranchTargets has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ILParser.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"16fa9ddb1bf95bf76b179974cb1c108651a24755e680f230ca3d9e65e8dda83d"}},{"ruleId":"D2","level":"warning","message":{"text":"ReflectionDisassembler.DisassembleField (cognitive 17): ReflectionDisassembler.DisassembleField has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1288}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa6b10bc307234892f0b7090caffb652fa740a9998cfe4afa7e3fe870c0edf58"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringProvider.FindDeclaringTypeOfEvent (cognitive 17): IdStringProvider.FindDeclaringTypeOfEvent has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"92352f2eff7ec00d83827c0a8278bb0c181ccf5a6a6b96fc7557d4edd516836a"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchDetection.IsSingleCondition (cognitive 17): SwitchDetection.IsSingleCondition has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/SwitchDetection.cs"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c79cdc693acd267f03cfff8ca19481c0c7fea1e1ef6afa423af21bb374a0ac4"}},{"ruleId":"D2","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationVB (cognitive 17): CachedDelegateInitialization.CachedDelegateInitializationVB has cognitive complexity 17 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ada7a1bda344801a7be2ee0f0ef6b0d66251ec628913072d17dbf575bd443f0"}},{"ruleId":"D2","level":"warning","message":{"text":"DeconstructionTransform.FindIndex (cognitive 17): DeconstructionTransform.FindIndex has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/DeconstructionTransform.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"642147d130565445c54289d0703f9851910ab0b016470835ca0b8bb5330040c2"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicCallSiteTransform.ExtractArgumentInfo (cognitive 17): DynamicCallSiteTransform.ExtractArgumentInfo has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"11e3f66361544791bf483c42682097ec9a1dd18358e083fa3526014928e95bac"}},{"ruleId":"D2","level":"warning","message":{"text":"HighLevelLoopTransform.MatchDoWhileLoop (cognitive 17): HighLevelLoopTransform.MatchDoWhileLoop has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/HighLevelLoopTransform.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fbf6e26ee7f3918f381c59d132d657c8d44a033fd7e8eeadc5883cc7aee0221"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexRangeTransform.CSharpWillGenerateIndexer (cognitive 17): IndexRangeTransform.CSharpWillGenerateIndexer has cognitive complexity 17 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb7f198937ad9c8a7a462244cb14a1041a6f2fdfcc8a715493e184cc8b233bc"}},{"ruleId":"D2","level":"warning","message":{"text":"NullPropagationTransform.RunStatements (cognitive 17): NullPropagationTransform.RunStatements has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f82498f83af5287cbb7ea634a6f7848c1ef8ebff59761a1af123f29a98c3f12"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternMatchingTransform.CheckAllUsesDominatedBy (cognitive 17): PatternMatchingTransform.CheckAllUsesDominatedBy has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec8d3a39e061aaf5e0c009d236664f2bfc1e90efd104429cb7b6b5dc7d150759"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.ExtractStringValuesFromInitBlock (cognitive 17): SwitchOnStringTransform.ExtractStringValuesFromInitBlock has cognitive complexity 17 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"4850a9fa5c93a9a656825a56198389eb0e40a740d9af637ebfaf8ccd6665688f"}},{"ruleId":"D2","level":"warning","message":{"text":"SwitchOnStringTransform.MatchRoslynEmptyStringCaseBlockHead (cognitive 17): SwitchOnStringTransform.MatchRoslynEmptyStringCaseBlockHead has cognitive complexity 17 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1654}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c7e6812fd23b645d16f4ebe88da7300b6bf799cbf907a21aaf2987642e6139"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformArrayInitializers.HandleJaggedArrayInitializer (cognitive 17): TransformArrayInitializers.HandleJaggedArrayInitializer has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e7cc5f90a1bcf996e86b26f01048a8b5c2cef957c4739907aef2b23627ad7e9"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformDisplayClassUsage.DetectDisplayClass (cognitive 17): TransformDisplayClassUsage.DetectDisplayClass has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"43e10cd4625661283cfd88acc7bb05e8a2911e0e88bc3975fe61c8a3d6a95a87"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformDisplayClassUsage.HandleMonoStateMachine (cognitive 17): TransformDisplayClassUsage.HandleMonoStateMachine has cognitive complexity 17 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9cf821fc812db96e4f662051f31428ad0f493f9c7a88b066edf451c253f3e66"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ReadParameters (cognitive 17): TransformExpressionTrees.ReadParameters has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f33eb58304edaab5ef40ff94e26398597259aadd159a08eda9cb4108d06027"}},{"ruleId":"D2","level":"warning","message":{"text":"UsingTransform.TransformUsing (cognitive 17): UsingTransform.TransformUsing has cognitive complexity 17 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"794f668db3968b11a8009a925f8377246331cc39f7c01d9dda1981344c4e0707"}},{"ruleId":"D2","level":"warning","message":{"text":"SRMExtensions.IsKnownType (cognitive 17): SRMExtensions.IsKnownType has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler/SRMExtensions.cs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"d20412883a8b73e2815f3611e4fadcd2c7ac111123690049ff19bbf3e0995043"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataModule.GetInternalsVisibleTo (cognitive 17): MetadataModule.GetInternalsVisibleTo has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"46b8927b3c7d16418d935931ce75ff5afe870283ef2453592efaf88a444c38f0"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataModule.FindMinimumAccessibilityForNRT (cognitive 17): MetadataModule.FindMinimumAccessibilityForNRT has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":997}}}],"partialFingerprints":{"codehealthFindingId/v1":"f299ca34c18bc86b97188fc4face813e827b3070ceac2de213e75fbf3a8268bd"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSyntaxTreeGenerator.WriteSlotProperty (cognitive 17): DecompilerSyntaxTreeGenerator.WriteSlotProperty has cognitive complexity 17 (threshold 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":"ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"d51b1b69a17c2cf57b97a9c8f41927ce07cf7454a588f7308621f0a1143c1023"}},{"ruleId":"D2","level":"warning","message":{"text":"TypesParser.ParseSelection (cognitive 17): TypesParser.ParseSelection has cognitive complexity 17 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyCmd/TypesParser.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"3505ca28a610d09bc0591cfe1764024a12c1a49e3336842f2db31967790836d6"}},{"ruleId":"D2","level":"warning","message":{"text":"MyAssemblyResolver.ResolveCoreAsync (cognitive 17): MyAssemblyResolver.ResolveCoreAsync has cognitive complexity 17 (threshold 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":"ICSharpCode.ILSpyX/LoadedAssembly.cs"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83cad149b5c9b626b2b9920b3df237ae6829dfa7ec8c35cbcbeb510e49a92dd"}},{"ruleId":"D2","level":"warning","message":{"text":"CompareEngine.MergeTrees (cognitive 17): CompareEngine.MergeTrees has cognitive complexity 17 (threshold 15). 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":"ILSpy/CompareEngine.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"1701a804db0da9610384b642be452c8216dd6562e30a466471d77c5cd31bc33a"}},{"ruleId":"D2","level":"warning","message":{"text":"FlagsFilterPopup.OnArrowKeyDown (cognitive 17): FlagsFilterPopup.OnArrowKeyDown has cognitive complexity 17 (threshold 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":"ILSpy/Controls/FlagsFilterPopup.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"268c56fda14486ba656ec062810c5f728160af06a07cc3d6c6a43a5637c0ecbf"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterStatePresenter.Describe (cognitive 17): FilterStatePresenter.Describe has cognitive complexity 17 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Metadata/FilterStatePresenter.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5c4b5f1e362c96cbb12852e3dcad0646be8f561bf7b95a907f10539c14ed89d"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionSettings.LoadFromXml (cognitive 17): SessionSettings.LoadFromXml has cognitive complexity 17 (threshold 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":"ILSpy/SessionSettings.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf625e3cd0ece2ddb9526b8129a4e88c540ef560c7c8e48e3f7615a4709a26c2"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerTextView.ToggleFoldingAt (cognitive 17): DecompilerTextView.ToggleFoldingAt has cognitive complexity 17 (threshold 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":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4764345c910a6ab13fb160bc0f019804acfe9faf2917417ab3f9d1d1311bf72"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoEventDecompiler.MatchCompareExchangeLoopMcs (cognitive 16): AutoEventDecompiler.MatchCompareExchangeLoopMcs has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d0ae934eee0c4e79662618db3e87dd06701ea7d824a8efdbf62c5d8866565cd"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.Build (cognitive 16): CallBuilder.Build has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7f0c0b42232a66481b5a6dc53b70494f149f175762f9322f353b433870fc4cd"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.TransformParamsArgument (cognitive 16): CallBuilder.TransformParamsArgument has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1053}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3db3d3124b323218c4352e0cec9a2ef4ddb8e8d49e251fa5a177fdfa0d68ee0"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.CastArguments (cognitive 16): CallBuilder.CastArguments has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1446}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d3a6fe2298d356a95dc9ac12aec38539f4f2a6a2b7d56a2ced9992ead1bb5f"}},{"ruleId":"D2","level":"warning","message":{"text":"CallBuilder.CanUseDelegateConstruction (cognitive 16): CallBuilder.CanUseDelegateConstruction has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1936}}}],"partialFingerprints":{"codehealthFindingId/v1":"e692f660b1e87895f4281834bdd903e89f6c5020592beae62e7ee993bc8d6de5"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.HandleShift (cognitive 16): ExpressionBuilder.HandleShift has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1850}}}],"partialFingerprints":{"codehealthFindingId/v1":"96bd4c560ae2aba034b5ce574b0f61f31a647cbfeee82360fbb59bad637cde4c"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.AdjustConstantToType (cognitive 16): ExpressionBuilder.AdjustConstantToType has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3874}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e0eb6204401a4199420663e739f5294377eb43fa2a4f5e1870c0a4c30af7a9"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionBuilder.VisitNullCoalescingInstruction (cognitive 16): ExpressionBuilder.VisitNullCoalescingInstruction has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3912}}}],"partialFingerprints":{"codehealthFindingId/v1":"6381be6d1ccbebf01fbec691391b4f7a7839b0e174416ab7bc0a892047071f93"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.MethodGroupConversion (cognitive 16): CSharpConversions.MethodGroupConversion has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1363}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f14091846674cafe1d430cac532189e3b0d9db414d6fb6884363b68e343645"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpConversions.IsExactlyMatching (cognitive 16): CSharpConversions.IsExactlyMatching has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"e894eafdb2019f8ff811f9d886c4256a4468aefdfb478ee11f606339fd85e513"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompiledLambdaResolveResult.IsValid (cognitive 16): DecompiledLambdaResolveResult.IsValid has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/LambdaResolveResult.cs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"220c12efe4ffa56384e5b64380fbb10d53eeea35df66c59c46fd84698125a13d"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeInference.PhaseOne (cognitive 16): TypeInference.PhaseOne has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"03279ace13a078c2929acbf301b22bac1896ffe519444a962ae9265411177402"}},{"ruleId":"D2","level":"warning","message":{"text":"StatementBuilder.VisitUsingInstruction (cognitive 16): StatementBuilder.VisitUsingInstruction has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9bad4dc602491f8669ea2bfb36e75249170b447dda839428bdd4485bd07ea23"}},{"ruleId":"D2","level":"warning","message":{"text":"Enumerator.MoveNext (cognitive 16): Enumerator.MoveNext has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/Syntax/AstNodeCollection.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f53815bb5065b2e1e1e66e0acd0e0f63f6d0f7bdbd32fc023779f3aa178765f"}},{"ruleId":"D2","level":"warning","message":{"text":"DocumentationReference.DoMatch (cognitive 16): DocumentationReference.DoMatch has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/CSharp/Syntax/DocumentationReference.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"43db8e597772f8dcf10e09c04e6beaa6ed1caf762e849a41e37a710732610fca"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSystemAstBuilder.ConvertDelegate (cognitive 16): TypeSystemAstBuilder.ConvertDelegate has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":2091}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0d381eef9b674e1295115f6290374247fc554cc0f3f6c6d6c8823f232d1dd95"}},{"ruleId":"D2","level":"warning","message":{"text":"IdStringProvider.AppendTypeParameters (cognitive 16): IdStringProvider.AppendTypeParameters has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf54f6d507827364c7209e5ff2c9028f1eba2448cf73de337b5b4d3b8c24c00"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectPinnedRegions.IsNullSafeArrayToPointerPattern (cognitive 16): DetectPinnedRegions.IsNullSafeArrayToPointerPattern has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"355fedcf65fef8b64a650f8e8c2924db0f97d0de967f59096d39e8573b765eee"}},{"ruleId":"D2","level":"warning","message":{"text":"DetectExitPoints.VisitBlockContainer (cognitive 16): DetectExitPoints.VisitBlockContainer has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/IL/ControlFlow/ExitPoints.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c14b59f725c17135588c50048d0c09a84fb117d4bbc9cb8d4ef15cbac12747"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeAsyncExceptionRewriteTransform.ResolveEarlyReturnValue (cognitive 16): RuntimeAsyncExceptionRewriteTransform.ResolveEarlyReturnValue has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"65471a5d49319aef56e1725d7d12445af250d9e87e339a697e5ddcb88ee36391"}},{"ruleId":"D2","level":"warning","message":{"text":"CachedDelegateInitialization.CachedDelegateInitializationVBWithClosure (cognitive 16): CachedDelegateInitialization.CachedDelegateInitializationVBWithClosure has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f7e402e2009704e5367d6fef606eba8b41bbb89f0e5c95fc73864863fdc9e25"}},{"ruleId":"D2","level":"warning","message":{"text":"DeconstructionTransform.MatchDeconstruction (cognitive 16): DeconstructionTransform.MatchDeconstruction has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/DeconstructionTransform.cs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"00db99750071cd1766100a2cac1218282b1bc08274d8e9f622af56671bb32643"}},{"ruleId":"D2","level":"warning","message":{"text":"DelegateConstruction.Run (cognitive 16): DelegateConstruction.Run has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fa9fbf9e7b1af945e92140a78ad20f7db305d8abd0d504f3eaf085df439d7c3"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionTransforms.TransformDynamicAddAssignOrRemoveAssign (cognitive 16): ExpressionTransforms.TransformDynamicAddAssignOrRemoveAssign has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"71aea05463cd481319453eb7c76f4b8a249738aece411dbceaf51f9c27ac0651"}},{"ruleId":"D2","level":"warning","message":{"text":"ILInlining.IsGeneratedTemporaryForAddressOf (cognitive 16): ILInlining.IsGeneratedTemporaryForAddressOf has cognitive complexity 16 (threshold 15). 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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"6939e443ef0010e61986037fcc93f771f069b66a3adb3a444aa87ea76b686cb4"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexRangeTransform.MatchSliceLength (cognitive 16): IndexRangeTransform.MatchSliceLength has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"b01825fc3076754ffe94c5f5ba526275d39291494978edd9e6754b848fc5e7d0"}},{"ruleId":"D2","level":"warning","message":{"text":"LockTransform.MatchExitBlock (cognitive 16): LockTransform.MatchExitBlock has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef71704e158a79501ee3f110cff6f08898653243c8d63bd569cd6c24b532b2b"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformExpressionTrees.ConvertLogicOperator (cognitive 16): TransformExpressionTrees.ConvertLogicOperator has cognitive complexity 16 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b0b811243e4fb989aef6ecc42be2961d009f81a9619018c3b785e6621b10ca3"}},{"ruleId":"D2","level":"warning","message":{"text":"AttributeListBuilder.IgnoreAttribute (cognitive 16): AttributeListBuilder.IgnoreAttribute has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/AttributeListBuilder.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"15d061d70f92cfc786dcfc92cedae9d1d0c9142e668a9b1d0c07bcedad7ac991"}},{"ruleId":"D2","level":"warning","message":{"text":"TupleType.GetTupleElementTypes (cognitive 16): TupleType.GetTupleElementTypes has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/TypeSystem/TupleType.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"a85da489734be86a1a0579ee1073c53c91c33229197e2bce92b744320243f5df"}},{"ruleId":"D2","level":"warning","message":{"text":"LongSet.MergeOverlapping (cognitive 16): LongSet.MergeOverlapping has cognitive complexity 16 (threshold 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":"ICSharpCode.Decompiler/Util/LongSet.cs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"27126e74b9fa58b7a68555986ad7700e21d8d8ac3aaf0890a9a98fc3d3e9ab16"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkupExtensionRewritePass.InlineExtension (cognitive 16): MarkupExtensionRewritePass.InlineExtension has cognitive complexity 16 (threshold 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":"ICSharpCode.BamlDecompiler/Rewrite/MarkupExtensionRewritePass.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff0742850015cdb3c28f103597ce5391cad6b33eadc7f95f38af098abdb78dde"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlExtension.ToString (cognitive 16): XamlExtension.ToString has cognitive complexity 16 (threshold 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":"ICSharpCode.BamlDecompiler/Xaml/XamlExtension.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c37844ac7f10b5d6a0394b7dadec36076fa281f523693bb4782f4eee4ac68ef5"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyTreeModel.RestoreSelectedPathAsync (cognitive 16): AssemblyTreeModel.RestoreSelectedPathAsync has cognitive complexity 16 (threshold 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":"ILSpy/AssemblyTree/AssemblyTreeModel.cs"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"601017f899916c15c461c0409363c86149197927d11ec232120c34906541f9cf"}},{"ruleId":"D2","level":"warning","message":{"text":"DockWorkspace.ShowSelectedNode (cognitive 16): DockWorkspace.ShowSelectedNode has cognitive complexity 16 (threshold 15). 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":"ILSpy/Docking/DockWorkspace.cs"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e33772aec356b23ff81231177f3f9113d91e66286a1ca0ca36cc7cc0ad3458e"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpHighlightingTokenWriter.WriteIdentifier (cognitive 16): CSharpHighlightingTokenWriter.WriteIdentifier has cognitive complexity 16 (threshold 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":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"596b02f3842b254de550ce3261301df35575478c7517103eadd150d82ae6e087"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpLanguage.CollectFieldsAndCtors (cognitive 16): CSharpLanguage.CollectFieldsAndCtors has cognitive complexity 16 (threshold 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5393e2b753222846cddda4a2136060e516477c88be1f9e07e06d7ebadefcc73"}},{"ruleId":"D2","level":"warning","message":{"text":"RunningSearch.RunSearch (cognitive 16): RunningSearch.RunSearch has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Search/RunningSearch.cs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"b635ddc4961b71babcb3516b4d407624bada41524a48b3990952e7f4e6c96c2a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CSharpOutputVisitor: TooManyMethods \u2014 1972 significant lines (blank, comment-only and punctuation-only lines excluded), 179 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"318bca02f841be04aae0dd3eecff36936f1c851700a2c6fbe9f4b45ab7ee862d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: CSharp/ExpressionBuilder.cs: FileTooLong \u2014 2975 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad0fe0fcc3a925327ee12c3a42daa8976303f21dc62913ceb2b8978a7f32f3af"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExpressionBuilder: TooManyMethods \u2014 2948 significant lines (blank, comment-only and punctuation-only lines excluded), 164 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a02a0134bad5fc60028c978acf8bc90d6a514ed50754b90650988e803d0d586"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: OutputVisitor/CSharpOutputVisitor.cs: FileTooLong \u2014 1983 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac9f48281b4a788166491aa609a402c7adc5f1ad8d02cf4baa80b166efd623e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CSharpResolver: TooManyMethods \u2014 1499 significant lines (blank, comment-only and punctuation-only lines excluded), 95 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bcca90cd364099dbca4211ff6e399151a6794ce47b6d61b24c7c5c5b3e64990"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DecompilerSettings: ClassTooLong \u2014 1253 significant lines (blank, comment-only and punctuation-only lines excluded), 6 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/DecompilerSettings.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b64be97d5d8f47d7375a8e27215b581ee3d30b150d8f725a7143dec539d7e40"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: CSharp/CSharpDecompiler.cs: FileTooLong \u2014 1557 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"170dcfdafa473268922a457e85c106ca3dcd19e07e83e1b2e10e1cdb093cc530"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Resolver/CSharpResolver.cs: FileTooLong \u2014 1524 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb1f39ccfba66f4c8fb4e0acdec0230c17f2c1fa78e65974857f7ce408b99980"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerTextView: TooManyMethods \u2014 854 significant lines (blank, comment-only and punctuation-only lines excluded), 91 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c60cde66ee9709f59c2b84a98dc76f967f3e3c72a5b8c7673733491b95e319e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Syntax/TypeSystemAstBuilder.cs: FileTooLong \u2014 1485 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2075361098c4dda7cbf9d6d7319ab583a29eb9dc79847ac55f53c5fd5d5a4ea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Disassembler/ReflectionDisassembler.cs: FileTooLong \u2014 1441 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c27b7ed3a3a172b01565a83e12c876367cad9d5ffc0257b636bcc34c45b400e4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: CSharp/CallBuilder.cs: FileTooLong \u2014 1410 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9c5f75dfb55fa8f038e018c90b5b2273d8efb3e3ebf26c3c7e7ad9053ce9738"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: IL/ILReader.cs: FileTooLong \u2014 1391 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee193ef978478acb2f647130dffd58dca60ceec0fd8a5b98bd95c696adc8d50e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SwitchOnStringTransform: ClassTooLong \u2014 1093 significant lines (blank, comment-only and punctuation-only lines excluded), 27 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de94bdb75d0343ee38670ac86bec8dbb67bfb53b4e2738fbc19c9303669f33a3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ControlFlow/AsyncAwaitDecompiler.cs: FileTooLong \u2014 1263 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c2d876ba2bbb21b22b740cf6c962d3f713691526dfc71cf3297e99c1d4969ca"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ICSharpCode.Decompiler/DecompilerSettings.cs: FileTooLong \u2014 1258 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/DecompilerSettings.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"179cf5a2f59bb448d95e591306ca31b2616bd8a9515a9f54462e98748345637f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CSharpDecompiler: TooManyMethods \u2014 1527 significant lines (blank, comment-only and punctuation-only lines excluded), 69 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"777109f6a3d4daf106da794590a5bb84e6bf2f420e38f0d9f63fb62e31058bf5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TypeSystemAstBuilder: TooManyMethods \u2014 1457 significant lines (blank, comment-only and punctuation-only lines excluded), 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"791e3e73b8bdaa05bbc558bab45d830572af428465c2d257cb0b9078f92876fc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AstNode: TooManyMethods \u2014 444 significant lines (blank, comment-only and punctuation-only lines excluded), 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28f88ff59045f170d47be50853fbbc0cc1cef0244a499db3d1b394ddf036ecd5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/SwitchOnStringTransform.cs: FileTooLong \u2014 1101 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"59ed6c76d11965f08252f703ceff08a19e24397a8eb380129dbd8286de39d27d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ILReader: TooManyMethods \u2014 1306 significant lines (blank, comment-only and punctuation-only lines excluded), 64 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9853884c207413199d07f6bbe05a13463a499e0263e6d9852dd34ec6ead5e2a7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DockWorkspace: TooManyMethods \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded), 64 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Docking/DockWorkspace.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26067534540e658489258ac0509cc530ae9318a800e792043e3197e18dd6dc69"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/TransformExpressionTrees.cs: FileTooLong \u2014 1064 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26b3652eb2fa0750faf33532e99a10179eb9d728a5361090f7cd40623303ec4b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CSharpConversions: TooManyMethods \u2014 938 significant lines (blank, comment-only and punctuation-only lines excluded), 61 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4330911d49601224f0c39b52d163de851c7eddddaa73e4bb4159903e7950130"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: CSharp/StatementBuilder.cs: FileTooLong \u2014 993 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87211d3fcaeff2aa1ea379a99053b11b42709dbff6a4611f2a9b70cf5190219"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RecordDecompiler: ClassTooLong \u2014 792 significant lines (blank, comment-only and punctuation-only lines excluded), 25 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b54c5be038bb29efe5c8ae6377fc8477039b89047174a667ec1dedcb3cee8353"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: YieldReturnDecompiler: ClassTooLong \u2014 779 significant lines (blank, comment-only and punctuation-only lines excluded), 26 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"941a125e406baedf619682a10a928570ba2756dae844617f692c027fc2edc1b9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Resolver/CSharpConversions.cs: FileTooLong \u2014 972 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7085005c65de1ed95ada25433918ce8486d84bb576b9f208afd4a35ab4507acb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SharpTreeNode: TooManyMethods \u2014 531 significant lines (blank, comment-only and punctuation-only lines excluded), 55 methods, declared across 2 files: TreeView/SharpTreeNode.cs (36), TreeView/FlatListTreeNode.cs (19). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"89fc2c2800c06cc5d16d3d056a77c2903fda343e0e28c943d281d147011dbf75"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StatementBuilder: TooManyMethods \u2014 979 significant lines (blank, comment-only and punctuation-only lines excluded), 54 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/StatementBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e66a44fb1c75b87da8eebdff8ac51b9edb7bc3eaaa2391c1e76876527b42432e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RuntimeAsyncExceptionRewriteTransform: ClassTooLong \u2014 712 significant lines (blank, comment-only and punctuation-only lines excluded), 25 methods. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0f3b3a633efa5fe742a44134323fc07fa2fe6ce15d014b044ad5ad6e31d398"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TextView/DecompilerTextView.axaml.cs: FileTooLong \u2014 887 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"744debf51d6687d557a3f99167561b0263a01d45847ef08f23460a48f49b4039"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ReflectionDisassembler: TooManyMethods \u2014 1310 significant lines (blank, comment-only and punctuation-only lines excluded), 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34fb2cf818846ea5bfa5391c9e8ae70d2cd5f5313cd2cfaa47fb55706f756739"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CSharpPrimitiveCast: ClassTooLong \u2014 670 significant lines (blank, comment-only and punctuation-only lines excluded), 3 methods. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d80cc8f40edbdf0d7b03ddbafbe5a51a68d2287cbb69079beb626164c7f1c04"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TransformExpressionTrees: TooManyMethods \u2014 1054 significant lines (blank, comment-only and punctuation-only lines excluded), 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ada8ca7e4fa05c243f0da374937c28b6219716b1b1fa6cbc8030b161326d3b51"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncAwaitDecompiler: TooManyMethods \u2014 1249 significant lines (blank, comment-only and punctuation-only lines excluded), 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a21e3d42e543a699c6a68af0c96862973dce2deca112437122bdd89aa2136d5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: CSharp/RecordDecompiler.cs: FileTooLong \u2014 804 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58633f0dbd014605a5849aea7eb9ea5d2a50da8aebda98dfcd378ce0e28db77a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Syntax/DepthFirstAstVisitor.cs: FileTooLong \u2014 801 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88d8e422dd70de925c67909ca9d7929d2ed86a53a10145032f10c6793f38565"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ControlFlow/YieldReturnDecompiler.cs: FileTooLong \u2014 789 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92fcef5541a1f419b164ab123270ed6cdf4c5e8fde3801b1a00b3e3e1d819098"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CallBuilder: TooManyMethods \u2014 1306 significant lines (blank, comment-only and punctuation-only lines excluded), 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda6d372dbeb741c6aed9c5e0716710c723d4cabbaa5328409758c0900aa88be"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerSyntaxTreeGenerator: TooManyMethods \u2014 498 significant lines (blank, comment-only and punctuation-only lines excluded), 45 methods. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"577cb61c77bd9bb502b36f01f2bdaf25a3119796ed11a77a03b23942da77092b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TransformAssignment: ClassTooLong \u2014 593 significant lines (blank, comment-only and punctuation-only lines excluded), 17 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cb12d7ae34f840760641d488688f384769c4e233fb81d66e0b6c0a934190403"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssemblyTreeModel: TooManyMethods \u2014 488 significant lines (blank, comment-only and punctuation-only lines excluded), 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/AssemblyTree/AssemblyTreeModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05853592458e2b816cb193c867fcc161289a9fc83c666b3455dec7873ec62324"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs: FileTooLong \u2014 719 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a18b07300a5ae0234518ae0684fd9ed62ae000c50a98b69391cdb4c013abdd63"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MetadataModule: TooManyMethods \u2014 593 significant lines (blank, comment-only and punctuation-only lines excluded), 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f193a33a6479fe9f76a641a2e49366fbd130f96fc08c663cee97911f48cb3be2"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TypeInference: ClassTooLong \u2014 570 significant lines (blank, comment-only and punctuation-only lines excluded), 29 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"715c8b0300c536da76dfba0a3c7daece9577f5675459fe8d71558fe0f04f54db"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/TransformArrayInitializers.cs: FileTooLong \u2014 710 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fba916ab43f8c3e4d39f4c0fa7e8be2faefe33162d39fb60c01b153e1f0b17e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/PatternStatementTransform.cs: FileTooLong \u2014 698 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"52f373a24b60b9e5f5823ec8ec294ecab27179412f04429343c876afda127f53"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NullableLiftingTransform: ClassTooLong \u2014 545 significant lines (blank, comment-only and punctuation-only lines excluded), 30 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e9b76749682c76b75d571924d649bba3a063d651301a8e785ed78a379eb7e39"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DetectPinnedRegions: ClassTooLong \u2014 544 significant lines (blank, comment-only and punctuation-only lines excluded), 21 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1c64b25c609c2fca5e4cd9eb0804a7e84e7713df83addaa2470c9cba2aeee15"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Util/CSharpPrimitiveCast.cs: FileTooLong \u2014 672 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8214e67599f86cb4e2220b128b047a67f574e4cc36baa315ab7a4e748e67fe8"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ILSpyCmdProgram: ClassTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded), 24 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d38a1c8e729ac93374a1f46d3117f27e2007dfe13c7693108fd999381a0737c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: OverloadResolution: ClassTooLong \u2014 527 significant lines (blank, comment-only and punctuation-only lines excluded), 29 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc7b5e8a30233142ba7ee82e7a31c5d676e65faa12fcd0835daa0364e880b607"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PatternStatementTransform: TooManyMethods \u2014 687 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d665d8f94aafb3c5c163805d3cf8ed38809645717a1e33b46c2faee5276e8119"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataFlowVisitor: TooManyMethods \u2014 287 significant lines (blank, comment-only and punctuation-only lines excluded), 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/FlowAnalysis/DataFlowVisitor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e7cab5d1e10f31dc00ad86874f04ae0f5fef217b2dcd375686494fe598e70fa"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CSharpFormattingOptions: ClassTooLong \u2014 517 significant lines (blank, comment-only and punctuation-only lines excluded), 2 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpFormattingOptions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbef28fcd5214ef27763c38debe12e8070e9af223ee90bc236ac0f529af6df8a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SequencePointBuilder: TooManyMethods \u2014 290 significant lines (blank, comment-only and punctuation-only lines excluded), 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66f4ed580d424bca3bbca7c344cef1bc8708d69f2ba16e4e61d06c746a74014"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Resolver/CSharpOperators.cs: FileTooLong \u2014 630 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78089a38d9f5ef6c1ce5b9b38581bd3c5179676d1e973946b8a25914ca4c52aa"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MetadataTypeDefinition: ClassTooLong \u2014 500 significant lines (blank, comment-only and punctuation-only lines excluded), 30 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c59003796047010a455af76eb09e8cc35558624f063962b77f6267fe272366e6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Documentation/IdStringProvider.cs: FileTooLong \u2014 618 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"828d102d759512a320c0de21720d30c74b84b08850950da5fb82b7fe575055aa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Resolver/TypeInference.cs: FileTooLong \u2014 616 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"feebe5a2da6ee6e322a2cc0d1a8ad379522fe081e8d90e33452581705729b2e9"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LocalFunctionDecompiler: ClassTooLong \u2014 491 significant lines (blank, comment-only and punctuation-only lines excluded), 28 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea883ac5cf55c3044a4888119edced1ed5a8ada9274fa6427cede37302c89338"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Docking/DockWorkspace.cs: FileTooLong \u2014 607 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Docking/DockWorkspace.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8fd125b2067ae506be578c2363ef71831957d4b51138acf8e7a494a3fdeb35d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TypeSystem/MetadataModule.cs: FileTooLong \u2014 605 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb52939ae6a4c794d83a7fe7d8e77b3881bf352cbcf485fc9ce9e3dd340f87c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Search/CSharpLexer.cs: FileTooLong \u2014 603 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6b077bc81fac355b95ce978a8f3f2b35979d1a173e1b35e35834f50d5e58afb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/TransformAssignment.cs: FileTooLong \u2014 601 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4278acadd54a5f785d2e9b391a3e348936e51f59a96d4c965889474cee7d0d9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Resolver/OverloadResolution.cs: FileTooLong \u2014 599 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"422e9c939593cbd66e46c7dd22059708bc66784e749c51e78af9409bf0d73723"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/NullableLiftingTransform.cs: FileTooLong \u2014 594 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d0786d93c0601a8b95b4f78dbc325ab509032d8a47beb60c0bb0408c863edb7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/AssignVariableNames.cs: FileTooLong \u2014 591 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78314cb26bf8f4d61d4f42b37d34b593c489cb11ba8b689c1fbc95448516cad1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IdStringProvider: TooManyMethods \u2014 504 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Documentation/IdStringProvider.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"65b9e66c5bebfb11799b68ff0665b4f181705929258672ba1f3252f00a2c7f40"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/ExpressionTransforms.cs: FileTooLong \u2014 575 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2154f7366eb3934ca1fb4b8864807af957a663032f861547c8844c7d48cf480"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DynamicCallSiteTransform: ClassTooLong \u2014 458 significant lines (blank, comment-only and punctuation-only lines excluded), 9 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"017165e47628f04c81b3be189f4c8aab3a59f5a9a02f983bd7860a4fb2ea0e21"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TransformArrayInitializers: TooManyMethods \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb7ec3fe46f52ab49d806129bd0b1f829dddaf8e022b3ff643adfdff84107ef2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExpressionTransforms: TooManyMethods \u2014 568 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f95fb7381508003442b23b89955b3b5f21225841595a1211cc981beaec1f98c0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ILInlining: TooManyMethods \u2014 464 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"776a3738c67213ecff39d09f28b7d22e0ba0c919ed678ed35696877a6a2142b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SharpTreeView: TooManyMethods \u2014 353 significant lines (blank, comment-only and punctuation-only lines excluded), 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Controls/TreeView/SharpTreeView.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d0b67dcc8f4bcbdb1dee0358b7d23841c162b923c5fcb922fd5d0d83b561b7e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Baml/BamlRecords.cs: FileTooLong \u2014 564 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Baml/BamlRecords.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf41d271786878982bd4dc3a3f36f0bcadc542b297d9a63a3bdbdd744062a709"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs: FileTooLong \u2014 562 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3462834f538d67e85f85bd6a7c1796522b8fd146c7a52a76ad5d12f69766b15e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ControlFlow/DetectPinnedRegions.cs: FileTooLong \u2014 552 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bc0d9fb14f6a124f01cc9172a12abd3a017a35638c576a78804d788b863daa2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/TransformDisplayClassUsage.cs: FileTooLong \u2014 549 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ce4adc06e01a23cc8d5261ff00bbb103f4066402d8dcd22d735227d19608262"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: OutputVisitor/CSharpFormattingOptions.cs: FileTooLong \u2014 544 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpFormattingOptions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c59a730e39660eded9bb67fba945c534a274c50a4cc86c11c2c8a5c938e93e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs: FileTooLong \u2014 537 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a84ecc3f0e885f647993810250bdeb469058a86f13137afae41939de9f1abee"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CSharpHighlightingTokenWriter: ClassTooLong \u2014 427 significant lines (blank, comment-only and punctuation-only lines excluded), 14 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50425d0f4e16b7e9899a9d3d8c49e72bdd0d227a8f7620c9d964eb51693a3f83"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DocumentationRenderer: TooManyMethods \u2014 431 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DocumentationRenderer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ea78cc0cc2072640b5ddf18ecbf7be11864321a762cbedf85a7475b0839345f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CSharpLanguage: TooManyMethods \u2014 430 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods, declared across 2 files: Languages/CSharpLanguage.cs (31), Languages/CSharpLanguage.DebugSteps.cs (1). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d37ecc87a234ec4063b3dcddf650349cca23f260994ae403d6f6f99421fa798e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AstNodeCollection: TooManyMethods \u2014 162 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/AstNodeCollection.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"856e6c846735a4364f1bc739871bda9d637bb77158f5fb684d8e06e00bf2c46c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/LocalFunctionDecompiler.cs: FileTooLong \u2014 529 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"741a9ed11784792c0e3886d8ed4c539ffaf25511e0f9b467266d092db6605385"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Languages/CSharpLanguage.cs: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"105039182835cddff034969926495398b86b30f4cb769eca2102b119cd2b3785"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TransformDisplayClassUsage: TooManyMethods \u2014 503 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e952c71e5d084463ecee755aa2d0c6f4b6df19de61119b767be7e96d5b20b6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AssemblyTree/AssemblyTreeModel.cs: FileTooLong \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/AssemblyTree/AssemblyTreeModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e919bd87179ce7029c44925880ee77b76eaae4138f9eee85136d159ae8ca80"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Lexer: ClassTooLong \u2014 411 significant lines (blank, comment-only and punctuation-only lines excluded), 9 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"46d9926afa4dfc001263db834dd52ef7dce31823f01e1a8bb6ea51f4b0b3e506"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Implementation/MetadataTypeDefinition.cs: FileTooLong \u2014 511 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9a9f24015234fee1f6720cf4d9be91474427c90d423c921cb54919d3df3ad35"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/TransformFieldAndConstructorInitializers.cs: FileTooLong \u2014 510 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1280bb5534ddc871f9c75e037645c5bc1ef9fd4bd17d78f095f9e546f96c95ed"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MethodBodyDisassembler: ClassTooLong \u2014 404 significant lines (blank, comment-only and punctuation-only lines excluded), 12 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"09b839f82a192e75ec7b3dc272f9696b37c82478793ff724d9e4eb6ee756909b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Syntax/AstNode.cs: FileTooLong \u2014 504 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aa877814e7fadc37f0b6823764f6b070a04a719a053a61e7ef4199e988f217f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DeclareVariables: ClassTooLong \u2014 403 significant lines (blank, comment-only and punctuation-only lines excluded), 20 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"314b4c709834ce46abfe333a0b3f5d8fee2d7398c17daa11140bff59b6b6d569"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: IndexRangeTransform: ClassTooLong \u2014 402 significant lines (blank, comment-only and punctuation-only lines excluded), 13 methods. The type holds no instance state, so there is no shared data to group its members by. To reduce it, split it by area instead: give each cohesive family of members its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c778807b644fb6e9df608db1fd96ce081b0db501f3fe09f0e02dfcae33917a50"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Transforms/ILInlining.cs: FileTooLong \u2014 502 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b64b0aeabba41bcff8dec5ae5b3f5a3ce79aadc734e4ca7d94d78c975b59b48c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs:827-847 | ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs:931-951 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs:827\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":827}}}],"partialFingerprints":{"codehealthFindingId/v1":"142b48b37b7b9cd321858126970d41b48c7c5ab2744875f5c2c3bdaaacffbcb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs:382-402 | ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs:409-429 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs:382\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8f14ae7f71b1ca99273b7d0506d994642f10ea738f5308555268b719407c7f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): ILSpy/Languages/CSharpBracketSearcher.cs:189-207 | ILSpy/Languages/CSharpBracketSearcher.cs:289-307 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ILSpy/Languages/CSharpBracketSearcher.cs:189\u0060 it begins part-way through the construct above it, so those exact 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":"ILSpy/Languages/CSharpBracketSearcher.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"32114770f5697e996a579b69b5df5cad6a736b474dff696e7852a597b0d73a93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs:359-375 | ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs:442-458 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs:359\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a635eac8f6b0185df164181efbfa841704e9b9d87403b0338e9c80a1980065"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): ICSharpCode.Decompiler/Util/CollectionExtensions.cs:330-346 | ICSharpCode.Decompiler/Util/CollectionExtensions.cs:372-388 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/Util/CollectionExtensions.cs:330\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":"ICSharpCode.Decompiler/Util/CollectionExtensions.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"a598652a273b8611a472bb4df9752bca81aa2762b0dcff1a61736172046e2db6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs:800-814 | ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs:904-918 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs:800\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs"},"region":{"startLine":800}}}],"partialFingerprints":{"codehealthFindingId/v1":"46c727517fbb91bb6f237566b928fd6d68617c307c039dc67af776834ac669b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs:191-205 | ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs:279-293 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/BinaryNumericInstruction.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26e6d757fd63b945d3fd96faacf8cd9f072b2b95e9126a3a0aa75aa911c0575"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/InlineArrayTransform.cs:99-113 | ICSharpCode.Decompiler/IL/Transforms/InlineArrayTransform.cs:119-133 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/InlineArrayTransform.cs:99\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.Decompiler/IL/Transforms/InlineArrayTransform.cs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"029033ba80a1a16e58f8fc862652cd0f8e0cb0b4083e807e7e5c5a776bde3e4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): ICSharpCode.BamlDecompiler/Handlers/Records/PropertyWithStaticResourceIdHandler.cs:44-58 | ICSharpCode.BamlDecompiler/Handlers/Records/StaticResourceIdHandler.cs:32-46 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Handlers/Records/PropertyWithStaticResourceIdHandler.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"6171d3aa72bef007d98795c0d04746c27563367d4faa8a66f919fd6ea1646f7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): ILSpy/TreeNodes/IconResourceEntryNode.cs:62-76 | ILSpy/TreeNodes/ImageResourceEntryNode.cs:66-80 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TreeNodes/IconResourceEntryNode.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ff288d187bcc4559696583c29fefc7ae656439e05b67d65ea8a798cf4735e58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs:393-408 | ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs:501-514 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs:393\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"51709514535b1add7c362b989eaa4524306f32ac0e25b9d44ced00b6d12bec34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs:1416-1429 | ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs:1480-1493 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs:1416\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":"ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs"},"region":{"startLine":1416}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3bb0029c356e40773177287353044cd6ab89335049b9fbf274b6262869752c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs:51-64 | ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs:413-426 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs:51\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":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d161ead03b40ac37b932e47fd3de61695c2d555da06c8c6fba9d1e7c88b1a2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): ILSpy/TreeNodes/CursorResourceEntryNode.cs:59-71 | ILSpy/TreeNodes/IconResourceEntryNode.cs:59-71 | ILSpy/TreeNodes/ImageResourceEntryNode.cs:63-75 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ILSpy/TreeNodes/CursorResourceEntryNode.cs:59\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":"ILSpy/TreeNodes/CursorResourceEntryNode.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"c71b194bc65919614a79c559fb14e0d67660b5f14019c703ec00fddb3def3a49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs:905-916 | ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs:1095-1106 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"56b4921952e8c7f8c53762f4d5dd55c0e4c2dec15a5bd627bc84deae79cd5b05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:471-484 | ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:638-649 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:471\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"a34670b457484195352e173d53f931c7892ac1aaceb0900d6c6a385b0c579aa7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): ICSharpCode.Decompiler/IL/ILAmbience.cs:160-171 | ICSharpCode.Decompiler/IL/ILAmbience.cs:286-297 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/ILAmbience.cs:160\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":"ICSharpCode.Decompiler/IL/ILAmbience.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df272cf7e011ba825e0863b409b2a9efffaa3eff104bc9bbce413da874e5edf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): ICSharpCode.Decompiler/Util/BitSet.cs:203-214 | ICSharpCode.Decompiler/Util/BitSet.cs:240-251 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/Util/BitSet.cs: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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/BitSet.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9c62e414e7074bd21ef2ed9f0b97f9148a61f5e77d2dcf803ed254c51414d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): ILSpy/Analyzers/AnalyzerTreeView.axaml.cs:56-67 | ILSpy/Search/SearchPane.axaml.cs:65-76 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ILSpy/Analyzers/AnalyzerTreeView.axaml.cs:56\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":"ILSpy/Analyzers/AnalyzerTreeView.axaml.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4adfc1bc8baa62d2c426850fcf06a57b5a5e47d06b4eb681aa210987361bb1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs:51-61 | ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs:66-76 | ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs:81-91 | ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs:96-106 \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 \u0060ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs:51\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/MemberSearchStrategy.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"88ecc1a0b266fed148f50a55c3bd8d22c832950ab916ce3011e8f67270e3eabd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:446-456 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:503-513 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:533-543 \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":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"a26bfedba12cda20e14908bcd8085b4071ae710eb74b36ab4ce8cf00a8aa5469"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs:703-713 | ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs:750-760 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs:703\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"19bc62d004d1654ead761d0ba89abc426809003e99d0d4fcce31ab4bfd3f87b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs:728-738 | ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs:743-753 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"22333c1541a6494b164be5cc152a6f16bda22de3c20f471b85022f413a01fcbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): ICSharpCode.Decompiler/TypeSystem/ParameterizedType.cs:150-160 | ICSharpCode.Decompiler/TypeSystem/ParameterizedType.cs:418-428 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/TypeSystem/ParameterizedType.cs:150\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/ParameterizedType.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"795b0cad310a373afc733ec107c435c010d22b79bd3154023b109fca56c04207"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): ICSharpCode.ILSpyX/Search/CSharpLexer.cs:1023-1033 | ICSharpCode.ILSpyX/Search/CSharpLexer.cs:1042-1052 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.ILSpyX/Search/CSharpLexer.cs:1023\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":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb9b535cfb3407314ffafd642f4e74be12f9eec79d3472c370543dbd767cc589"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:376-385 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:454-463 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:541-550 \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. 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":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce32a77b706ec29263c5c964644d98334614a3635da4658de13bff9e5565fd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs:538-547 | ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs:651-660 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"62a1ce6bdaf04ee4b3189b95d5b1253b0eabd0e08d8557ba89f817c231b2fd71"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs:1683-1692 | ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs:1699-1708 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs:1683\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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff41d8b460e4ebf9cd55ec231a5c92f547ef52575a4a298d5eb167f3d2ec3b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs:852-861 | ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs:872-881 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e2467f6a9cba2fc819733045ed911792a964c05f05cb7a411e2d219f63cb7be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs:1120-1129 | ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs:1159-1168 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs:1120\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":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":1120}}}],"partialFingerprints":{"codehealthFindingId/v1":"720d5439e7e94ee8ff76edf69b8ad08290f109a83a0b5d1624ed43437628b9aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs:156-165 | ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs:257-266 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs:156\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":"ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"5191b9d3631e13404bc2bec63a5139bc398cd288dc9c69e202f7082e676ced10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:229-238 | ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:302-311 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:229\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d6ce51aa08213551fb10b0697df21dd86a71a720dac8402cacb903a21672684"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs:230-239 | ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs:88-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs:230\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e1624cb4aa6fde1e3ef2b559278925b6e219bf540105a6a216a2891d851fa50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.Decompiler/Util/TreeTraversal.cs:48-57 | ICSharpCode.Decompiler/Util/TreeTraversal.cs:95-104 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/Util/TreeTraversal.cs:48\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/TreeTraversal.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3fb1a1c3163d638595d1894c78203afcaec8b999908d26f83e237313aa64e26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs:316-325 | ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs:332-341 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs:316\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a10bfdc7dc6c1e315b07bef29db2b1233617264356eab52d883d6ecf6da93b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ILSpy/Commands/DecompileAllCommand.cs:72-81 | ILSpy/Commands/DecompileAllCommand.cs:141-150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ILSpy/Commands/DecompileAllCommand.cs:72\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":"ILSpy/Commands/DecompileAllCommand.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccc41869aa8a220c7c7356a309680f976e18b8a0f159676aedc3a6ab024d06a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): ILSpy/Commands/DecompileAllCommand.cs:91-100 | ILSpy/Commands/DecompileAllCommand.cs:161-170 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ILSpy/Commands/DecompileAllCommand.cs:91\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Commands/DecompileAllCommand.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52519f66f928774432c7504c8dc5ba982ecbd21c9864fc97bca2d2db5e60dd1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:430-438 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:469-477 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:517-525 | ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs:556-564 \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. 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":"ICSharpCode.Decompiler/IL/Transforms/DynamicCallSiteTransform.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb85813c6fdac9dbf2b888fa71ca2e9dd4ac1e35a20a290a6f8a21d4913fee57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): ICSharpCode.BamlDecompiler/Handlers/Blocks/PropertyArrayHandler.cs:36-44 | ICSharpCode.BamlDecompiler/Handlers/Blocks/PropertyComplexHandler.cs:36-44 | ICSharpCode.BamlDecompiler/Handlers/Blocks/PropertyDictionaryHandler.cs:36-44 | ICSharpCode.BamlDecompiler/Handlers/Blocks/PropertyListHandler.cs:36-44 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Handlers/Blocks/PropertyArrayHandler.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b43aa7b1acf0d7aaa90f7810f615f428248c78bafbbc75d29dbc789201d24a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): ICSharpCode.Decompiler/IL/ILReader.cs:1953-1961 | ICSharpCode.Decompiler/IL/ILReader.cs:2147-2155 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/ILReader.cs:1953\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":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1953}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3b855c2472caf790f03b8d40fb07a95733994b8bdbcbdcde60769d6e429895"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs:875-883 | ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs:960-968 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs:875\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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"c79573daa9b0d47e19fa711ad6c96c8d3a27ec0874cdb64775019de906d6ad8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:847-864 | ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1091-1099 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d05d894078fca0af929651f02afe525cf135b487277da45b381eba3cea787ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs:67-75 | ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs:81-89 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs:67\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":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3800db22c4e323e5f7a3e9a7abaf8161b1e92e9b0ff1cf80a10c4e6cc98ab97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs:320-328 | ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMethod.cs:235-243 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. 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":"ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"150dec692933b5948495b6edcb3feb4036377633bbf63c74e14e7bc306387460"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs:142-149 | ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs:180-187 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs:142\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":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"afa1f0bf5bd68398196fcf013d360675c648f84cd040b4988dd971cf61fd322f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs:646-653 | ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs:900-907 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f60de53e4fabd1784c9c38ff1b306bccb7899e3f8874d4c744442882194db5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:1567-1574 | ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:1587-1594 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1567}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7ca34d7f8037472c2fb8902b9019bce99c45bf41f9ae73cf2409598e88838c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/IL/ILReader.cs:1885-1895 | ICSharpCode.Decompiler/IL/ILReader.cs:1896-1903 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/ILReader.cs:1896\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ILReader.cs"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"06223eb37f4b97d0fecac47c27dd9d7dd26b7611803330939afcfe01be12d98c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs:410-417 | ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs:452-459 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/DynamicInstructions.cs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9bd34147b5a0d26e6f7d6c8690a2c8607b588916f96e051b1c8ec2d8bf95c35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs:85-92 | ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs:258-265 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs:85\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"28ecdedf625a7f8c8d446bd38352c2df3684b27bad57761f700bea426ab96e1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs:95-102 | ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs:108-115 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs:95\u0060 it begins part-way through the construct above it, so those exact 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":"ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"099026ec57a5798d009ceafbc215abdef4fc88473d2d87c51ff885c1e24d5b9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): ILSpy/Controls/Omnibar/OmnibarViewModel.cs:206-213 | ILSpy/Search/SearchPaneModel.cs:237-244 \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":"ILSpy/Controls/Omnibar/OmnibarViewModel.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"2765707efc20884e19a61c3cd3005fe90a0ccb52f343bc9670b1b038263c3d3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:698-704 | ICSharpCode.Decompiler/IL/ControlFlow/YieldReturnDecompiler.cs:444-450 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs:698\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. 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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"572d683d80bf371102a972a815661c191ce8d53c10c5f2e5b050afa4e5232e0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs:226-232 | ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs:278-284 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/InstructionOutputExtensions.cs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c0dc8761bd93ac2b2e46d3556db1a20911b9e600f0e2b224af1bf268ef89cfd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:166-172 | ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:198-204 \u2014 both copies are in the same file, so extract the block 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. 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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"43cb11707a880671e41787790436a4958b58f7ca8bd2f291bb65e52074720395"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs:181-187 | ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs:196-202 \u2014 both copies are in the same file, so extract the block 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. 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":"ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c32a9e8b86ca07d08b3729321b5b60d20bd5c2f599b3fa1b5dca111d4852a19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:96-102 | ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:142-148 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:96\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"e90c1edb81244acff2a900c062c5ecb7018550b9fb4f20ea0e0d55de64e622d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:199-205 | ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:296-302 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"e540c2ffad3dc881fe3985484e6d111d357d546cc82a87ceddcac8b935b037f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs:61-67 | ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs:237-243 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs:61\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":"ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"352ffa133fe8111d8d1dfc5621ebe92eccad7a2b1c721ad446d4cb719c44ca1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:731-737 | ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:813-819 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"4808550d672accbce56331a2616a956ebf1e337cddd1c0b72dde440e0db06fa2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs:84-90 | ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs:155-161 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2c36389b53f1425e3360b7a473d2547f8b5340dd0d5d77423ebfb6afc865ce8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs:157-163 | ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs:492-498 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"c078489ffefd2945bb686201c9b18a66e004b43dee054da1af64e3353237405e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): ICSharpCode.BamlDecompiler/Handlers/Blocks/KeyElementStartHandler.cs:42-48 | ICSharpCode.BamlDecompiler/Handlers/Records/DefAttributeKeyStringHandler.cs:42-48 \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":"ICSharpCode.BamlDecompiler/Handlers/Blocks/KeyElementStartHandler.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"d457c052caa943fa0a46919fc99829a8942cc545cb7f4ec448e54787ed904684"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:186-191 | ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs:234-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 \u0060ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs: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. 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":"ICSharpCode.Decompiler/IL/Transforms/LockTransform.cs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8b1d0ba7926e0951ad893d0d1f63941a815977b6f952dd580479e91377bb7da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:942-947 | ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1036-1041 \u2014 both copies are in the same file, so extract the block 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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":942}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d776f999be00bbf202dd2f00ab04a370dadf9f02581f3d16078ea763eab167"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1082-1087 | ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1103-1108 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1082\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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":1082}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb075abb0fbfd2e8174dcd124ca512ace29ce6a4d61687896c32ae3a8894bead"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1290-1295 | ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1311-1316 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1290\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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":1290}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd1b4c28011ed7b3551e5e33d930b63e180bc4673cc0197cee77c7c56fb3355"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs:260-265 | ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs:276-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 \u0060ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs: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":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataMethod.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb0b947e203407c93816ab136444534b2c93e0829551acc559d0628ae56e5807"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.BamlDecompiler/Handlers/Blocks/ElementHandler.cs:36-43 | ICSharpCode.BamlDecompiler/Handlers/Records/StaticResourceStartHandler.cs:43-48 \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":"ICSharpCode.BamlDecompiler/Handlers/Blocks/ElementHandler.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"c05476ef09395d52f7380c67fa22fbba4f5cdc5477bf84acbf549b3e67b69181"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ICSharpCode.BamlDecompiler/Handlers/Records/DefAttributeKeyTypeHandler.cs:48-53 | ICSharpCode.BamlDecompiler/Handlers/Records/PropertyTypeReferenceHandler.cs:53-58 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.BamlDecompiler/Handlers/Records/DefAttributeKeyTypeHandler.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bf280f84fa146676de050a3ec6495406fc59c4501636e6fb2214675e0162b93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): ILSpy/TreeNodes/CursorResourceEntryNode.cs:88-93 | ILSpy/TreeNodes/IconResourceEntryNode.cs:83-88 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ILSpy/TreeNodes/CursorResourceEntryNode.cs:88\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":"ILSpy/TreeNodes/CursorResourceEntryNode.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba31b5c940f217c1edfee85aedcfc543b22a1ecd7868d6b55828791d0893a64a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:117-121 | ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:158-162 | ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:190-194 \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 \u0060ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs:117\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":"ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"362f48586aa6e35a49fd5db3317c95a7c4b502aa8a71a77252ff1dc1750800a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs:1022-1026 | ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs:1062-1066 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs:1022\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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1022}}}],"partialFingerprints":{"codehealthFindingId/v1":"221626aa6c1136f7db69ab9e444fce7b74ade16d3ff4083610cb3104e8da4090"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:960-964 | ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:1045-1050 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs:960\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":"ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs"},"region":{"startLine":960}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcdae360ac30500b4e56edd31257aaec88aff2915cd373612d5f283cabb3d693"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): ILSpy/Languages/CSharpLanguage.cs:182-186 | ILSpy/Languages/CSharpLanguage.cs:188-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. 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":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"b40d370e09785f65a73a8a64ac70eaf3c028ed8a327d6453c8eb67d4c938479f"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: ICSharpCode.Decompiler: ICSharpCode.Decompiler: abstractness 0.13, instability 0.00, distance 0.87 \u2014 zone of pain \u2014 concrete and depended on by 7 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ab9bb3c3c516993ec6d79cd33484fa91e60af6a0dbf684adc2f748d9414ac5ca"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ILInstruction (LCOM4 81): ILInstruction\u0027s methods form 81 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Instructions/ILInstruction.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c0c33c55ef303f3e5b403d1ee159d3c3bf1ad247a6dbeb33bd6d10d8a8c94c4"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SecurityDeclarationDecoder (LCOM4 6): SecurityDeclarationDecoder\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"037925b84d7edd63e96255fb6dd22b723b3b2664008a5d3e8d7f3523472cd6b1"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: SharpTreeView (LCOM4 6): SharpTreeView\u0027s methods form 6 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Controls/TreeView/SharpTreeView.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"a11ac8039e70a6c65d63ce359bc28dc13824b4ac16591715f6ebfb42587425f9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AbstractTypeParameter (LCOM4 5): AbstractTypeParameter\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractTypeParameter.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"23420aad9af8e0521025cfe13e88132e88f0afd7a2f34f0a972e5d833291377a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: MetadataTypeDefinition (LCOM4 5): MetadataTypeDefinition\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd5114d8cb966fac7f4cc7f2943f5feea1e6c4df173b5740245ccb07af7ae3b"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: NormalizeTypeVisitor (LCOM4 5): NormalizeTypeVisitor\u0027s methods form 5 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/NormalizeTypeVisitor.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6380eb00b74d5c86013cf843482ee9a25c0ce59460ebd8d09ee6428a2f4885"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AstNode (LCOM4 4): AstNode\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f98793b7124cad038870217a7e79c0cc929d5a39625433ff8a066c8b4478a4"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AssemblyListPane (LCOM4 4): AssemblyListPane\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/AssemblyTree/AssemblyListPane.axaml.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"09761a5cee3634dc21f210b6c9ca33ac7ca36d3f7fc61cacaca44e5834b90684"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: CSharpLanguage (LCOM4 4): CSharpLanguage\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"657166391da965c58c7e9aa2a60b35ccef2d3cf8711bceb3f95ee4a66c5b9b9d"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 test suite did not build: Coverage NOT MEASURED: this repository did not build in our analyzer environment (a C#/MSBuild compiler error), so no coverage could be collected. It is excluded from the score rather than counted as a near-zero defect. We did not read WHERE the failing diagnostic is, so this does not claim the fault is in your test code \u2014 a repository written for an older SDK band can compile for you and not for us. Run \u0060dotnet build\u0060 on this commit; if it succeeds, the gap is ours. Committing the Cobertura/OpenCover/lcov report your CI already produces also lets us measure real coverage without building anything."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs: ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs changed 25 times in last 90 days, max complexity 84. 3 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8960805dcb9db5138f123bdb152d75404dfd790b24d0a3567c518be1e62814ba"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ILSpy/Languages/CSharpHighlightingTokenWriter.cs: ILSpy/Languages/CSharpHighlightingTokenWriter.cs changed 13 times in last 90 days, max complexity 102. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpHighlightingTokenWriter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"04bc849b96933c9e51ff630aa2247998383619b47d6ac10b6fe92b788f929431"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs: ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs changed 40 times in last 90 days, max complexity 31. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00898349c65a0b8b53143efae09ff8130adaa3a4b9558fe54916d6567c8fbd4f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ILSpy/TextView/DecompilerTextView.axaml.cs: ILSpy/TextView/DecompilerTextView.axaml.cs changed 67 times in last 90 days, max complexity 18. 4 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c03f3d5445215ce6d7283209acb9fc94f8c6695031195b8ee61604a925faf50"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ILSpy/Docking/DockWorkspace.cs: ILSpy/Docking/DockWorkspace.cs changed 75 times in last 90 days, max complexity 15. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Docking/DockWorkspace.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e61d78ef164d6c09981bcaa52648cde43be5405d1ca271468f2c563392414ed"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ILSpy/Languages/CSharpLanguage.cs: ILSpy/Languages/CSharpLanguage.cs changed 35 times in last 90 days, max complexity 24. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Languages/CSharpLanguage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"62623df1ad2e06295ed867e87f6fbcd95d7a2ba9034f8f58b40acfba7aee6e8a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs: ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs changed 18 times in last 90 days, max complexity 46. 4 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f008b396b017c544e6c505580379faa812ac0e52ab7ab563b74c16a3b80e4973"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ILSpy/TreeNodes/AssemblyTreeNode.cs: ILSpy/TreeNodes/AssemblyTreeNode.cs changed 41 times in last 90 days, max complexity 18. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TreeNodes/AssemblyTreeNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8e5731af9de241152d86065c8ecb461ce5b80afd7389788f2d218cf5e33c5b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs: ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs changed 18 times in last 90 days, max complexity 37. 6 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"331d876e1992bbafa831858c92e97118bcc21c44961cae9ef8d4d948efc13c42"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: ILSpy/Metadata/MetadataTablesTreeNode.cs: ILSpy/Metadata/MetadataTablesTreeNode.cs changed 12 times in last 90 days, max complexity 45. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Metadata/MetadataTablesTreeNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e5e8098c8821c92221c52bb2d23df5395e84fe3416ce1738c9d45da5fe9bd7"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 385 significant file(s) lose their only recent owner: ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs, ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs, ICSharpCode.Decompiler/CSharp/CallBuilder.cs, ILSpy/TextView/DecompilerTextView.axaml.cs, ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs, ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs, ILSpy/Docking/DockWorkspace.cs, ICSharpCode.Decompiler/IL/ControlFlow/RuntimeAsyncExceptionRewriteTransform.cs (\u002B377 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"958d450b4a07bd97b2cbdb879b9be56c5f97c14340f34150642d5056ef460f0c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 11 significant file(s) lose their only recent owner: ICSharpCode.BamlDecompiler/Baml/BamlRecords.cs, ICSharpCode.Decompiler/Instrumentation/DecompilerEventSource.cs, ILSpy/ViewModels/OpenFromNuGetFeedDialogViewModel.cs, ICSharpCode.BamlDecompiler/Baml/BamlReader.cs, ILSpy/Controls/Omnibar/Omnibar.axaml.cs, ICSharpCode.Decompiler/SingleFileBundle.cs, ILSpy/Views/OpenFromNuGetFeedDialog.axaml.cs, ILSpy/TextView/LineHighlightAdorner.cs (\u002B3 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e3809230de65e7ccd7845f6149bbf2dcbe803daa3d8caf267e54844f6420d8a2"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 4 significant file(s) lose their only recent owner: ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs, ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs, ICSharpCode.Decompiler/TypeSystem/FunctionPointerType.cs, ICSharpCode.Decompiler/CSharp/ProjectDecompiler/IProjectFileWriter.cs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8ee469156f1946dfda98c260a22a34812a7deb2fe1bd6249befd81d95e532459"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 4 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (404 single-owned of 846 analysed files in total, counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first). They are anonymized user #4 (1 file(s)), anonymized user #5 (1 file(s)), anonymized user #6 (1 file(s)), anonymized user #7 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj \u2014 23 warning codes suppressed in one element: A single \u003CNoWarn\u003E suppresses 23 warning codes (1701;1702;1705;67;169;1058;728;1720;649;168;251;660;661;675;1998;162;8632;626;8618;8714;8602;8981;NU1903) in one stroke \u2014 one team-wide decision, not 23 independent debts. Review the set centrally rather than code-by-code; each code you can re-enable is one less blanket suppression. (Every code still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"362d30289b6daf6b9f24fa534e9e189518fa4a8fefb766836055557935138749"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What to do here? \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":"ICSharpCode.BamlDecompiler/Handlers/Records/ContentPropertyHandler.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"83a75b24c4a2521d4b07dc5e269840e6f821d603007e32bb6c7fa5aa770bc860"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Convert to enum names \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":"ICSharpCode.BamlDecompiler/Handlers/Records/PropertyCustomHandler.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a305ef71b7725efb397d34f7836599e304bbefb25234d6d7a01f811e4154a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : implement xmlns resolver! \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":"ICSharpCode.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"d96d65a113146fa995ce96861f317dcddb5a9f7182aa33956110686de6b69acd"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 169, 67 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/Output/CSharpAmbienceTests.cs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1229c9b4e30e7d2533315054c552149482dca7a43b7e4485b371ee4a72c3ff2"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 169, 67 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/Output/ILAmbienceTests.cs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9896d1948c1b3fe46756a3233b9a575b4274ca7751284943fc1ae71ed2dc08d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/Semantics/ConversionTests.cs"},"region":{"startLine":1010}}}],"partialFingerprints":{"codehealthFindingId/v1":"593ccd56e44a73a19c87dd182c9beadca91131deec2c52b16d340fd273454b4e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/Semantics/ConversionTests.cs"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"443d5ecb8a4513dc9109f209b993e7b787d0cc94fa8da9a9a145ed2c7715a4de"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CompoundAssignmentTest.cs"},"region":{"startLine":2184}}}],"partialFingerprints":{"codehealthFindingId/v1":"550176c4702696b9ea5435cc4e52f8f4496e8d43dcd0d74237d5305130fc12bd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CompoundAssignmentTest.cs"},"region":{"startLine":5217}}}],"partialFingerprints":{"codehealthFindingId/v1":"e563d5531966921232d340efa7b279f28e2bfd10776d12d63cb7adc3a0516d86"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"e05826cb25162afba08ab73a066668d45cd066102ca1436257e95d9b76a382f5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"831139929454bbcad7c81df5d2417fb64d5b9fb1ec6ffa71bdfe4c370afeac19"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6be0dee8783a8f07506471f50fb486f0803b8cdedf08b468da198516f15b549"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"58d59900f16a5c7273726e508694a9b42cdcf721c1f852398c1e80d01baeecb1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dfd0f87a071cdf217912de971cef43b1351d1f2a5db5006c1252b3ca7d9287b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a2d1e0421d955a6cc0dea49d1e09dd939c3d340e42df8b43324983e0e35d1c0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e204ff2fbb5e62fd63e28b140e087b16c7517546d5523775796c74e4b4602b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 652 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Correctness/Comparisons.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"e11ba8cf5b5df959b99950bcbfc3ef344b90bc456d263a29c0e4c5835e780ec1"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS9193 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Correctness/OverloadResolution.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"a85d352b0102d75153f381a23fc45e6e13eb397003be13f02d0c41a5103d85f9"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0162 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Correctness/Switch.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aea61d96d3914a465426018b7afc2ddadeb0fc6db40cbb4248f21f5646a302d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: test behavior, or convert this into a pretty-test \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":"ICSharpCode.Decompiler.Tests/TestCases/Correctness/UnsafeCode.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d389dbe08313dd768d699aaf84be6c50fde538927423f1945aeb1c0d50da68"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check anon methods \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":"ICSharpCode.Decompiler.Tests/TestCases/Correctness/YieldReturn.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeefee58a56fc8501c36d1e09e99203086f00296dabb4fa36220c5ab19b831f7"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] PropertyWithAttributeOnBackingField"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/AutoProperties.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e9fc1ce256eea2a2424c53d6f807b423a145e5b35bf675ec33a7c1898ad2e1f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable format \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CS73_StackAllocInitializers.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b997622c23b158d34f4086bf7ef534aba9e7ed6e713765328ed39562cedd9f2"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable format \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f13966fc4b87dd860c60f751f9c8c01f874e1e2ecfe6b96d79dc243e248d1d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable format \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/MemberTests.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebb33711f64604b3f92afc641f5512584e0670aec86215f9769d998f76265390"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable format \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/TupleTests.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba0f283a7f5b57cb4487fba50c65a61f27ccbe953709e6569bedecf61cd584f5"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable format \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/TupleTests.cs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"08b6dde0f4090b5e176b5a734ae5a8a41e5648be62b8f92f82f9f242ac3185a5"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] AppliedToDelegate"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"788a10356526d2c50c34fe52e7d1f368904c47a25293fc64503028de11eadad0"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] AppliedToInterface"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b32fece0ede9434715d721dd377fa93e6001e6c934feda4d70ff11b1aaa5364"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] AppliedToStruct"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc15db86b2d95f56e9a6179a891f86346e09944a703ac318061706e5070e89f8"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ObsoleteClass"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f8e1f36dad9dfe7c4ff7c2ca7de269006049f9717a39daaa68fc6309db3eb2"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] this[]"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributeSamples.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"62459329c708bb81e0d66a7ed8e2b5575fe60a4d563d00a246852c4f089e0f14"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ObsoletedMethod"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributes.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f56c54da7cad728cee6138d20e3564c132facb5ac234cb3dce244cef159554e"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] ObsoletedMethod"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomAttributes2.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"008cf8d52053b4e4885c993be021880bb6beb19897ee5a418763a04d50272fe9"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 1998 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomTaskType.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8c76eb364e1cab34ade5581c310a51664b9a8c40829840c2c629414b6b60dd"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8981 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomTaskType.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb737a0c2da9bfba116ff70a85714ef0c6f9829f495cb0ab61992568dd53883"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8981 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/QualifierTests.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"308903d2699da30d822a505bfd96705ced479e3948666c6c290b604e8debf393"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"d08b257d975ba5a4bf3236e106866316f4c5a01e27ae80b4550b8947ce954bfe"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"02eac51f42fd0791044025ff026fbab7cb42e9baf2bbdc84ac68b0a56c729145"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/AutoEventDecompiler.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"085bd9834df3c27e27010c5cdba6f5cd2e80f83428f552f09fd7dbf53e4efdf9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"9be6be40fe7f09c2a4a12ada9681345fac7c215c769269ddb40d686386dfe6ed"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9b6f2053e39443633dd52135f2be44e0b50d6bc363dc9f576a7d749d48bb1b6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"15262f0f4c5d74449ab55e96fbc355260476226dd12c8e6b8f8e5eca0e60745e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"e36537a67fa69295209b0846b70a8eebb300b2dd47d37691b4ebf36ba2531d1f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f8af55320e2ee24d368596b0a84d9632a92bf726c6ed3e523b5591363610a8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b2837bd5e80076d912e5a7b7a54f50ab1ad559bf6cfca1e23ef662e03215ac"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"9da684b0dbb8a4dab4c43c9341ca887f0b30d75a146a77ce0a0bb602b3253276"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"13590d62b5c623bedbb745c297815e7d2f9aa078fb0e07f0dafa479140f55ba4"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DeconstructionTests.cs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1daf8c0accd1c76b66edd663e45d14ea994a6379b4b9a47557352772860bfd6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DynamicTests.cs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7a940748079a68812acde34e94ea3b253bd9281e9d841b6e2a8cd9a26159788"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExtensionEverything.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c68f1061d65dde04a13b3478279f95af8b8263652ef7440c2e6151855d827b9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.cs"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dad6b316145cf3166ed4720a4653894d9fa083bd3b3c27da0e65e3987cb28a8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"992e789e597eed0f0673afc684d374e7d24974899a065e5f852f1a7a415bb54b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"2371d1ef53f76128f6b1d8fbb81d25e540afda77b37fb82f9d5b9c372cba66b8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"415fdfec0dc7ef47d0886ae967bc16eeaa5699d0e4d1c3e50cdd01c3100b4c89"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"dafc183dee77ed62ec718d0a300f723bd7da383d09ecc1ead3337fe878e0ff9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : beautify inc/dec on locals and fields \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/DynamicTests.cs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"de580c1749be0221786060936d1330ebefafadf055e444b63b65abcf920f7ebc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Non-Roslyn compilers create a second while loop inside the try, by inverting the if \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc901c5ae7a317a434b657fa635f4b3aad2789601b534cb00c81fd24577fd865"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 13 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8f6208d9ab43f80ea0ac92326dbf6b57cc23f86e41d5f532a96c2c25996766"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO implement use-site transformation \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExtensionEverything.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44ab6b24cc2377d9ec1f13c91da4f87b9f1bd43353972f57e9584a4ab84a601"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO implement use-site transformation \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExtensionEverything.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"df7098e19d69cf2a2ab5e4010086a2782defcc9c6bbab12a3741de119021052e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 251 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/InitializerTests.cs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e43d1e88be309ee046ddf7347f637cabe50070a89023ca8eac29f32559dbc9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/InlineArrayTests.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3eb73aa1dffcb0a85e8677239c9677859abcb76fb0d334381ed7091d7d97643"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9cbdf9cbc0d381f9bf36d629ea95106c6134644cfbb5bc01f693b86d6000dec"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/InlineArrayTests.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e9f0f24cd2dfbbf2819c860cb067ca6f8c93d8789be6765d92dcb6291f57ce3"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0414, CS9113, CS9124 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/Issue3598.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecc5a20cdc2c4c5fe3fab79f3ca8710e78073edc13960713768a59539630004f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"1008ea2ee8b32abb2bd49de8747351f5b3027b4624f0f53fa150c7534445019c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"7070652e1a9328e1dd00d5cf1447645252c0fe7ab14833179ad9c2cdbaf548ae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"321dcfbf86a0baaeb99ff3575b3b3abd29d583155706afe6a0b00d3412376ff3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revisit after decision has been made regarding the type system. \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"8045ea538786b9da3a103efdc838fa80d5a51d9a2d0481109408d5404933cf19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revisit after decision has been made regarding the type system. \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c4b1890bdd5b612b82b9cfe19bfb2fe902c18d78938d6fd1e0f38ff2131c38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revisit after decision has been made regarding the type system. \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab4944d186095c837f71ea4b2c66cf07ca93a94b138c34b8e7043d118bc5792"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revisit after decision has been made regarding the type system. \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a41928fc43bf3ffd044bd74cb06137c4308d339f7545e25523c325c7dce2781"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revisit after decision has been made regarding the type system. \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"626b0c02e6fb2f8ccebf3a91bf719b42544be706b5f2e90163e7310891e7353c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: revisit after decision has been made regarding the type system. \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":690}}}],"partialFingerprints":{"codehealthFindingId/v1":"04c8d3419267df135bdbab0412bcd1edb1238cbc47d15b30a5f14c2159ae483b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary cast \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b78abd037efc4600d0a6cec2ee5bc7cb247f8576a2dcb46c4842b3cbe77ab6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary cast \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"4998db4df63ff33134215524bbf094b6b2364ec85f8453c99d63919159d81d5f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary cast \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5763cecb4d8f0a432f7fce5b5c2bf331655086d99d9eca8c4456075ebd8e411"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary cast \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":814}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6719b1801551fd12042edeb491806390feca415c18660e96887fa15008c9c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary cast \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0d8e943c04399fd88ff2750ad4b3805e6c33a1fc9edfc0e9ae36d3c7aed5834"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //Print((uint?)f); TODO \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ece63e3a13c506d60196298bc10e960a862e4097bc708b12018b5b62cfd2a9f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary casts \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab02ebbe46aa26b0284c2515bee09c249bbfae0f456182e60965350aa6bf6a40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unnecessary casts \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0178593cad172d39712401b6b66b87018e764ff4262f78182031240ae23e744"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: unnecessary casts \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":927}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f09f8a25b21ccfcb7f2bd8a07da37050d1dd6116abc54b1f7b53dc6854504a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: unnecessary casts \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":934}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa315eb3834e35f4f53a61763b61a22571def8da31ee580a6291b94b7494e2a2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ccf1864a8dbcced75ed7fcb142b198687682a10fc96676dba3116383640545c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb679a5d73e4b270c2b729314bdd3b5a736e3e6290e6c9df0525d3cba421eb14"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"b415948c860e9c2b906eb672112e9a81cdbce1f9bb45ba4a0d280303ff4511ad"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d82ee01917c4eebef8c5bd434f802367de167c5a3fde890c4af62953f8d648b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b5568dfd453220145a67e0beb8ed534bb37e474ee7fb668a3a866c4d4c1956"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":633}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a6da9f11d0561702f4b48cbeba804ff00fddd371c009723059d5d820b97fa96"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"22a0948c710b5ba51103115a63f41262f6de960204fa31922df3c3b52b52e90f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c4e3f9b38670659a9f16612e52711cd474d4635fe00a4acd84c22f195ae5977"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"23e4a4532ce6d7cb141567c764edb90588d3fa11dce10148c5b937df9a6baa0a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/FixRemainingIncrements.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f76fed5e27e9cac5d3e5d8b7ed4a80be0fae3003aa4d94d30921c90dbda2133"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 21 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LiftedOperators.cs"},"region":{"startLine":699}}}],"partialFingerprints":{"codehealthFindingId/v1":"6648cbdbd8095e23cb63501ed415f4308e282fe4045f8f228d0c77444b19f56d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0219 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LocalFunctions.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"73ad8307ebcb0aad5e52aa9eda97406818940556b17298d089112c47f6838dc2"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0219 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LocalFunctions.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78043ff8faf3a4a23bb345b45a3abc241472cf7ca2172d641e1183abdf65b55"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0219 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNaming.cs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c1a8d92eb3410b6a7a0a6ca4d0f0a1170402f240debe1c534461cb1d3197823"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8387 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LocalFunctions.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceec1589837dd4b8061e14f850b1815c8a9a15dfe285d9f3508920a4e8dda34d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8387 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/LocalFunctions.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4177a82636763835ad6f678f421bffaa1dac9e47f35261104227aaa942dd336"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable IDE0043 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/StringInterpolation.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"52914a505b2f64d7d157aa6e7fff11207cd0a03ff29c0741211f96e35f727aaf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // M1(a); TODO: tuple conversion transform \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/TupleTests.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95284b5aef8b0b8df50909131d808cb057aa533d248350693b48ded6cb4f6a1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: it would be nice if we could infer the name \u0027c\u0027 for the local \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":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/TupleTests.cs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"102877617be0c1652d3e0ce1303f643535df637c65aa576c25e628a8c1c8d40d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 0108 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/Pretty/TypeMemberTests.cs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c3bd767e4af6052609534e5797f90780843742da23663ef6bb342d2fc899d6f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 657 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/VBPretty/ParameterizedProperties.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"abf5b253985847ead425db01e872ab2627371ca12e7589577802e4231756e5f0"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] get_Attributed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TestCases/VBPretty/ParameterizedProperties.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"6777ba1f3a2a15845dc591482ee1efcc9e4c7ab355fc9d073e70c429e8c20933"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0465 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemTestCase.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd7d0652c3af14b2be44f0155a6efa2e51b975fd53e0a28c5830c0403ba9d054"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 67 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler.Tests/TypeSystem/TypeSystemTestCase.cs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd298dbe64c9136f4359b3f210d86dc790a965c8d2d07546fa4e4bb629837ca3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: legacy VB compound assign \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":"ICSharpCode.Decompiler.Tests/VBPrettyTestRunner.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"201044a4c8b6184891eb66bfb7cf370d76dbeeffe36e634d6e71ff11aefd3cd1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //    TODO: actually, we could use the type info instead? \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":"ICSharpCode.Decompiler/CSharp/Annotations.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"11da0a1df8509bbdd7f4846e6dd564db88c94ed4d87a571db4cd1de45835d59c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //    TODO: here the info is also redundant, we could peek at the BinaryNumericInstruction instead \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":"ICSharpCode.Decompiler/CSharp/Annotations.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce9377d804626696886baa4fdf3161f94ff0cf63f4fe6db8074920ceb2a5a19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : use SignatureBlobComparer to ensure that the correct method is resolved \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":"ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"28a3e91a58e329a8087e08f95112658b325c5185ab767216f555aed781f02f5f"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK : convert this.Dispose() to ((IDisposable)this).Dispose(), if Dispose is an explicitly implemented interface method. \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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"667154189b9fccdb189c0995317b1ba4f783264e93c047a30a9efa92bfb5817d"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: this is a special case for collection initializer calls, they do not allow a target to be \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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1183}}}],"partialFingerprints":{"codehealthFindingId/v1":"2919aed8277079978aa39caa00fcf2ab84b67191b086c04ef4780b06cd09ed3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : implement some more intelligent algorithm that decides which of these fixes (cast args, add target, cast target, add type args) \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":"ICSharpCode.Decompiler/CSharp/CallBuilder.cs"},"region":{"startLine":1267}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd9db880ec5971098bb572c57959b44881481d6f33b931c5e6c13e724d51a2f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\r\n\t\t\t// TODO Improve nullability support so that we do not sprinkle ! operators everywhere.\r\n\t\t\t// inst is the instruction that got translated into expr.\r\n\t\t\tif (expr.Type.Nullability == Nullability.Nullable)\r\n\t\t\t{\r\n\t\t\t\tif (expr.Expression is UnaryOperatorExpression uoe \u0026\u0026 uoe.Operator == UnaryOperatorType.NullConditional)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn expr;\r\n\t\t\t\t}\r\n\t\t\t\tif (inst.HasFlag(InstructionFlags.MayUnwrapNull))\r\n\t\t\t\t{\r\n\t\t\t\t\t// We can\u0027t use ! in the chain of operators after a NullConditional, due to\r\n\t\t\t\t\t// https://github.com/dotnet/roslyn/issues/43659\r\n\t\t\t\t\treturn expr;\r\n\t\t\t\t}\r\n\t\t\t\treturn new UnaryOperatorExpression(UnaryOperatorType.SuppressNullableWarning, expr)\r\n\t\t\t\t\t.WithRR(new ResolveResult(expr.Type.ChangeNullability(Nullability.Oblivious)))\r\n\t\t\t\t\t.WithoutILInstruction();\r\n\t\t\t}\r\n\t\t\t*/"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":2834}}}],"partialFingerprints":{"codehealthFindingId/v1":"191999fc95d961e4c5d1c328e5bfdf66eeacd90b755f522c69f5105b6360bdd1"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: avoid using Expression.Elements.Count: https://github.com/icsharpcode/ILSpy/issues/1202 \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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":3681}}}],"partialFingerprints":{"codehealthFindingId/v1":"35168ea169f1ed11075148755349bc811c5905ddbd05788b343256aa98dafa07"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO allowImplicitConversion \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":"ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs"},"region":{"startLine":4901}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc76ae93bbabe801173f851a46ccf589d138d510f41c38529c0a7fd1cefa5de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO! \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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpFormattingOptions.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1efa677fc3653b984e0ada510d5f12a9c3d9c0d0b30291ea76a6eaabc7f5042"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Comma policy has changed. \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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da5f19d67e5db6948da2d645f8f0ef481a236b0ee54ed37d181ebf09cfd4f93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Comma policy has changed. \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":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"50051640bf292d10dd97bba5067a0831b2c6fda90062b7f3780e7841ec99e79c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO are tuple conversions really standard implicit conversions? \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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab1552863acd3a197ea14840db73b421e8a6aefc457de5a5e9a58e35ddcfe61"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: what about in parameters? \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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs"},"region":{"startLine":1312}}}],"partialFingerprints":{"codehealthFindingId/v1":"166441934a13bb20beb04eacd08893cb909f36da3b6bb916c5b31cfe8e689877"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe make this a property on INamespace? \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":"ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs"},"region":{"startLine":2215}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aba957e03dba5c7787813723f124e12161637ddd8552aa22413686884ae4db9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : Add a sequence point on foreach token (mapped to nop before using instruction). \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":"ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"a907da7f67ede711a3ed69f3a707b4861fe469bbfc63c2a83924852db9772bed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe we should add an implicit Match-\u003Ebool conversion? (implicit operator bool(Match m) { return m != null; }) \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":"ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Match.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a8035d86a7abfab520a9e02e26ad224bb4a0fb35abe3acb53e555fb15d9bc3"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack: penalize multiple layers of nested expressions \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":"ICSharpCode.Decompiler/CSharp/Transforms/AddCheckedBlocks.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4ddf965cb7222d2782db12498c2f9fd2f2685ace8354101d4c09e819e0e3dd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if no variable named _ is declared and var is used instead of T, use out _. \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":"ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cefdcdc240e0607691aaed099b9269ace2006c68de424a64ee014050250dddf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : check whether there exists a variable named \u0027_\u0027 in scope. \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":"ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3dfa8f8e0b3fa28d646541dfe64e4d6e6d4d34bfb6412119f82ca434a14b807"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : add ForeachAnnotation \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":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc095e64f07111f1b89895b169e8604c0642183bddf1d4df75f19790ce847181"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : add ForeachAnnotation \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":"ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c5d83307aa834d0e867b5f4a9c903593302bf507b875a10923c48fa3609d9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\r\n\t\t\tcase \u0022System.Reflection.FieldInfo.GetFieldFromHandle\u0022:\r\n\t\t\t\t// TODO : This is dead code because LdTokenAnnotation is not added anywhere:\r\n\t\t\t\tif (arguments.Length == 1) {\r\n\t\t\t\t\tMemberReferenceExpression mre = arguments[0] as MemberReferenceExpression;\r\n\t\t\t\t\tif (mre != null \u0026\u0026 mre.MemberName == \u0022FieldHandle\u0022 \u0026\u0026 mre.Target.Annotation\u003CLdTokenAnnotation\u003E() != null) {\r\n\t\t\t\t\t\tinvocationExpression.ReplaceWith(mre.Target);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (arguments.Length == 2) {\r\n\t\t\t\t\tMemberReferenceExpression mre1 = arguments[0] as MemberReferenceExpression;\r\n\t\t\t\t\tMemberReferenceExpression mre2 = arguments[1] as MemberReferenceExpression;\r\n\t\t\t\t\tif (mre1 != null \u0026\u0026 mre1.MemberName == \u0022FieldHandle\u0022 \u0026\u0026 mre1.Target.Annotation\u003CLdTokenAnnotation\u003E() != null) {\r\n\t\t\t\t\t\tif (mre2 != null \u0026\u0026 mre2.MemberName == \u0022TypeHandle\u0022 \u0026\u0026 mre2.Target is TypeOfExpression) {\r\n\t\t\t\t\t\t\tExpression oldArg = ((InvocationExpression)mre1.Target).Arguments.Single();\r\n\t\t\t\t\t\t\tFieldReference field = oldArg.Annotation\u003CFieldReference\u003E();\r\n\t\t\t\t\t\t\tif (field != null) {\r\n\t\t\t\t\t\t\t\tAstType declaringType = ((TypeOfExpression)mre2.Target).Type.Detach();\r\n\t\t\t\t\t\t\t\toldArg.ReplaceWith(new MemberReferenceExpression(new TypeReferenceExpression(declaringType), field.Name).CopyAnnotationsFrom(oldArg));\r\n\t\t\t\t\t\t\t\tinvocationExpression.ReplaceWith(mre1.Target);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\t*/ \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":"ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcef596ca95f6cbcdc0aa65647fd0a7f340c186651f4f7fbdf17e9ff725c1c4f"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: because our current AST model doesn\u0027t allow specifying an explicit ordering across slots, \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":"ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3fddd195d44787f69fd81b275499d971c074431c569e5b545400096f616792b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : Remove once https://github.com/icsharpcode/ILSpy/issues/2032 is fixed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/DecompilerSettings.cs"},"region":{"startLine":2276}}}],"partialFingerprints":{"codehealthFindingId/v1":"002427f555e5fe052e07dd620d207be2da7e076a0b72167dac3739a3de441f35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this can be made O(1) by numbering the dominator tree \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":"ICSharpCode.Decompiler/FlowAnalysis/ControlFlowNode.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"f795e68e65e35a3f9260d7e91d6144164d5b0327319bc0f0596ee533cd198322"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: the normal async/await logic expects \u0027initialState\u0027 to be the \u0027in progress\u0027 state \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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc71dcc1906bf30a4a64d096089a9ef0c58c8637a83c38a3790a8293a74e292d"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: the normal async/await logic expects \u0027initialState\u0027 to be the \u0027in progress\u0027 state \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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ded9d09042490f17d6d61cf877cdaa96f6cb8cec8d32334db1be8d94fe2d2a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check against uses of promise fields in other methods? \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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1182}}}],"partialFingerprints":{"codehealthFindingId/v1":"53a05be36abbef3f219d6aa678b2c65b222f9a050c5d0bba943156cfe050160c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check that we are accessing the current field (compare with get_Current) \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":"ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e059701e1ce7b33d96ed7654c1a90ff56ef2d016f9140ccfc978c306cfb9395"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : sanity check \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":"ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bcfc4d8d678a02f7d64de648d705a0d88dc3102e67cfa84222ee6338361878b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is SortBlocks() guaranteeing this, even if the user code has loops? \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":"ICSharpCode.Decompiler/IL/ControlFlow/StateRangeAnalysis.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"468257a18f338d8b057b595a29a6bfad74bbfa4daf96ff56ea7294255c855e58"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: While it\u0027s possible to have BlockContainers without entry point, \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":"ICSharpCode.Decompiler/IL/Instructions/BlockContainer.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6b9e64d33627e22f485c994250f5ec45d2c583ad74b02f85d82d49268a3f8a"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: We treat TargetBlock as non-nullable publicly, because it\u0027s only null inside \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":"ICSharpCode.Decompiler/IL/Instructions/Branch.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"1755194f66cce8cca1a0a41953f44c1f13985f358ef1ecb1d0f89e5b00afee2a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement lifted user-defined compound assignments \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":"ICSharpCode.Decompiler/IL/Instructions/CompoundAssignmentInstruction.cs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"28a070dd157b03f23c6e33abf62537076458aec293994d8c0115038af7c0559e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : check whether all type arguments can be inferred from the first argument \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":"ICSharpCode.Decompiler/IL/Instructions/MatchInstruction.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"029438c537ba7cc70a2d71987abccfabbe3d8966143080bf2618fd592eef7de4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : check whether the method is ambigious \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":"ICSharpCode.Decompiler/IL/Instructions/MatchInstruction.cs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ac7ba0b770ec05a6300316fed54828574e937b4d051cc1d0d113799835e24b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO v.LoadCount may be 2 if the deconstruction is assigned to a tuple variable \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":"ICSharpCode.Decompiler/IL/Transforms/DeconstructionTransform.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fe42cc5dd2ad52b9174e2efa3e127755da4834e870a53851e09013afb0dd7c8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : should make sure that the display-class \u0027this\u0027 is unused, \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":"ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3ab4a15b483404de889967017a210468b742735a8b45d7f1f3dbfc8f700d955"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : ldfld chains must be validated more thoroughly, i.e., we should make sure \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":"ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"a334a950392b48d4d992c8f13e0ed9cdbbec17b597453d07c2244706d5b3c23a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: inlining of small integer types might be semantically incorrect, \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":"ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df2fc218d81cc3b5752ae1036a7b39392a8f42d1f8f2d0e6ee4c03d43d50161"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: condition detection uses StartILOffset of blocks to decide which branch of if-else \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":"ICSharpCode.Decompiler/IL/Transforms/PatternMatchingTransform.cs"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9481038be697b13b8c69b4e2b3dd681edc762ac9655bc8701d3b2aca5a9181"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add tests and think about whether nullables need special considerations \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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0af64c8d888c24b6459220336e68abcdde0208b4f9790e164cfdc86f26727bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add tests and think about whether nullables need special considerations \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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"432a4af13f0f6d3d615e9e19f2dd3a116d0443e32f94b316d35fef0c690642d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add tests and think about whether nullables need special considerations \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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":981}}}],"partialFingerprints":{"codehealthFindingId/v1":"1481a80bed63e8eefe30ed7757c1e9f139c8b09c0ecd62421ae32e4f96647bfb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add tests and think about whether nullables need special considerations \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":"ICSharpCode.Decompiler/IL/Transforms/TransformAssignment.cs"},"region":{"startLine":1094}}}],"partialFingerprints":{"codehealthFindingId/v1":"fefa93441022c8c940b3369e44a23123fea5f38132ff52fbe8299396adafd944"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : this is not entirely correct... we need argument type information to resolve Add methods properly \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":"ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d50e90e35d01fc4784aad8499c66b2c998900b4a0cd4a62f61d1764a4993103"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: System.Diagnostics.CodeAnalysis.SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/IAttribute.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"93da65481191d74e635eee5af3b06c5d697b75ca8ecab7f5983e51d3c8f6b5c5"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: System.Diagnostics.CodeAnalysis.SuppressMessage \u2014 the suppression records no reason: either it carries no justification argument at all, or one that states nothing a reader can weigh (\u0022OK\u0022, \u0022By design\u0022). A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited. Write what makes this site legitimately different \u2014 the invariant that holds, the framework contract that forces the shape \u2014 or remove the suppression and fix what it hides."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/BusyManager.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc237a90ce8d25ea5c081980c72a264e39af3e3bb49466ea8e8073bb455acedb"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 618 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/IParameter.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8455b16358e65c6ccc11d4674b5588eb61667836c77acfcf596676c7a0f9da71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe these should be extension methods? \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":"ICSharpCode.Decompiler/TypeSystem/InheritanceHelper.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"43e0a85e4825501fe36a1a4b82492f80eddd04811ad17b4c9a78093a622eaae3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO : Resolve assembly file (module)... \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":"ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs"},"region":{"startLine":914}}}],"partialFingerprints":{"codehealthFindingId/v1":"0de82c8d30052cd5c79a73ad1fe6b384e52ce81df7a2ff5cffc105a77efffe06"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 809 \u2014 the disable has no matching restore, so it does not end with the construct that needed it: it runs to the end of the file and silences the rule for everything written below, including code added years later. Close it with the matching restore directive immediately after the construct it covers, or fix the cause and drop the directive entirely."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/SpecialType.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d85d35dd5e13fab84d3596c5a672d2bc54c6fba5f7f1962082adc11d76b62a"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: [Obsolete] Equals"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/TypeSystem/SpecialType.cs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94a714489a32de53b5101f8b9b0d9d26b2dfd8df8c1121a40f2e0518616fe7b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: optimize IsSubsetOf -- there\u0027s no need to build a temporary set \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":"ICSharpCode.Decompiler/Util/LongSet.cs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"50868e44e81e593a60c361dece47120ae55525208c342ecd7b84b1a136fcb8db"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Narrow the catch to the exception you actually expect, record it through whatever this codebase already uses to report problems, or \u2014 where swallowing really is correct, as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 write down WHY in a comment on the catch. The comment has to give the reason: a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all and leaves this row in place. Any of the three makes the decision reviewable; all three clear this row."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyCmd/DotNetToolUpdateChecker.cs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d59c2f38f44dd0ecddc2f7eed5e228f646326af2ab1eaeb0cd6f0f5342729b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: drop this field and use Editor.ScrollToVerticalOffset once #594 ships and we bump the package."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/DecompilerTextView.axaml.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba200e32103396e3c33bf7d5728365fc06a1c34829d90dc02d113485ed245ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // rendering (with size/bpp labels) needs ICONDIR/ICONDIRENTRY parsing \u2014 TODO follow-up. \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":"ILSpy/TreeNodes/IconResourceEntryNode.cs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0281dc53410128e5b61e0b387d2a34c329453985a8574ea46d54526d6e749da"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ship a ResourceImage.svg asset; the generic resource glyph is used for now. \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":"ILSpy/TreeNodes/ImageResourceEntryNode.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1db4d6e42df1b1a89927d28a2c212f3e54e375737a57fef2c8b4085a9e0d9c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ship Resource{Xml,Xsd,Xslt}.svg assets and pick by extension. Until then the \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":"ILSpy/TreeNodes/XmlResourceEntryNode.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eb780483ae9534932a2d4a723ffd0683bf6989daf8a28eee5a92148d0608adf"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1701 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dbe5c326a4d5f3650b8c8ec4cdfc2c390ef0bbf5516bd6c3e9938357a190042"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1702 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"11aa6daf63b6ebb1c4b40f3db8ea874b8d0bc875ddeb10cc0c797c46b50f2d93"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1591 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a4c24eb4530d73213ebf0135f2889d756ddb9ac7cafdad91544023b2ce860e1"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1573 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb1677df791bc8cd61a633dc15d8b0e017367ace356991e6a8630d294b93f7d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: NU1510 \u2014 this warning is switched off for the WHOLE project, in every file it builds, including code written years from now: nothing at the call site records that the rule was ever silenced, so the next reader has no reason to look here. Fix what the rule is reporting and drop the code from the list, or \u2014 if some occurrences really are legitimate \u2014 narrow the suppression to those sites and give each one its reason, so the rule keeps protecting the rest of the project."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Directory.Build.props"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd2c0f1bc6fae94c476742a893c35de7153943503c0bde5fd83e9da0475b18e"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 3 solutions was scored: This repository contains 3 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060ILSpy.sln\u0060 \u2014 the other 2 (\u0060ILSpy.Installer.sln\u0060, \u0060ILSpy.VSExtensions.slnx\u0060) were not analyzed and are not represented in the headline. To cover them, scan each solution as its own target and group them in a Solution or Product for a portfolio roll-up. If a secondary solution is an archived or vendored tree, declare it \u2014 \u0060.gitattributes\u0060 (\u0060path/** linguist-vendored\u0060) or \u0060.editorconfig\u0060 (\u0060[path/**] generated_code = true\u0060) \u2014 to exclude it from discovery the same way generated code is."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"447bb11e4227696119972b805fcb72d3ced918b47fcda508d1efcfafe347e404"}},{"ruleId":"D18","level":"note","message":{"text":"Thin analysable surface across projects: 1 project(s) carry only a thin slice of real code (e.g. \u0060ICSharpCode.Decompiler.TestRunner\u0060 with 34 significant line(s)). The mean analysable-surface weight is 92 %, lowering Solution Shape by about 0.64 point(s). Consolidate thin projects or grow them into substantial, well-scoped assemblies."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd0b92fd965c2065080f16843920964ee00f7696ea03d87cdf61aed4cd2c746a"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found at common paths; consider documenting architectural decisions in Docs/ADL/ or similar."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 226k LoC spread over 16 projects the codebase is large and multi-module, so explicit bounded contexts are needed. Name this codebase\u0027s bounded contexts (\u22652 module groups, e.g. per subsystem) so cross-boundary type coupling can be assessed. Declare them in \u0060.codehealth/config.yaml\u0060 at the repository root (create it if absent), mapping each context name to the module-path or namespace prefixes that belong to it \u2014 e.g. \u0060architecture:\u0060 \u2192 \u0060contexts:\u0060 \u2192 \u0060Billing: [\u0022src/billing\u0022, \u0022Acme.Billing\u0022]\u0060, \u0060Catalog: [\u0022src/catalog\u0022, \u0022Acme.Catalog\u0022]\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1c7e276c9c682731f01819ed5378b90ca320cde1b583c90920172911598362b3"}},{"ruleId":"D26","level":"note","message":{"text":"Split ICSharpCode.Decompiler: A huge decompiler whose namespaces are unrelated features like AST parsing, symbol tables, and output rendering. Suggested: by namespace: Decompilation/AST/Output"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"161d76ab70cb4e71060913b4a3ec0c0254903eb7b25a3ee9689c1324527dd02d"}},{"ruleId":"D26","level":"note","message":{"text":"Split ILSpy: Large decompiler whose namespaces are unrelated features like AST parsing and output. Suggested: by namespace: Decompilation/AST/Output"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5f9e22e0760d28291fab1832e5c1890bf28deb4726ebb66b061c7d436c93288e"}},{"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":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"611b47e65e9b5a667e33b1b1faa265e2639407f8d6dc2b6225d9805a64681d37"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c2a00d0fde2d654e972fd2eb37ac31ae04b600198173706fdeda5bd03a58a8aa"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d0bdcf0f25916de0431cf5b22ff398eca7acd0738d45b26826b3352abda68ea6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4ab45939abd0debb40725f707d7c469de1ffaf9fd8abb6906f9f407fc5db59ed"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2a7a533f1d97b5d91e544c6c727ee67d10b96ad2778f0267ca330e76e8e01dff"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3ba600b9cdc71d6cf2a458664311d5baeb1e737c2cfb11e4ad2344aa177dc452"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a1d875dab0fe0b604b17b4613d05132dcd24de50a3acfc74cdf4b8ce1bb773a2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c90c7d1b81b2cf2a12a691186c3f9397039055c838ad6494507d06769d2cf832"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"785a30d16d9c20a91c54cfbe0d4be7eddbb63e3d2ce95a886fac454feedcb428"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"654fb7295beb4a8f084f9fe1ec0584be2fea314d92568d10550a49dd96a8060e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6c8e5085d331c06fe8b4bc6643cd877239117cff7c66e029d83e58f3a3c8fbe8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e8a786f0e2a014daece7c7bf9b815f5beee1668aef9da24712a381c53ebf97f4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"94417935e55b5d88f71cbbed3cda7a62b9a589acf7ef6ddc354aedac053e1476"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"57413115c80473a23b76054d7fbfa001380b0b55763d42adf2ba0e0d2cb6898a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"837e4b12d86237f62a8d51347e015699ff253e595fb05a0d8d9296a68065aeae"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"477c156b61f990228ed79e2d72ed1ca257d4696fa46f78705f63f15a503a5d87"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3884a43e5c8457a2d4b97d6c8cc08e2f58806107cf25efa867eeb534115b87bf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"39006ee6db969e1e1fcd66e7e4a3fd3e012e466bf208338374091609161b550c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"accadce64137cdc8240a99ec4874880c549035181a8ef878b1e018690c032bfe"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f48ca6e4939bb638a5dd0b573d1bb677f8468943e708fce071606cf396d23b7d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb51f2dae9ac43e90b75d7af740c8e20964bd16856626887effa3a0490d3f9c4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2fc57848bb5335f7e05bd7995d546480ec51067e6900b781465a2695dcd0ce5b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"62e240582130a915eb9c0fee9115afb4dd6559b60cf4588fc6f60cb37aac78bd"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bf6f5d573160c341a1c12a0fec55d53c1b9b206e476addfd898abe5c66d61ccf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"91c906662adec1c6982c3cb5e3c9bb8a5575e7d6de04e14950dc7e5b5017244a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"45bded040e8fcac3f4f534518587d5f0f24064b2919aac8438abea6883bd0bb9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7412d19a7556d1bbffb3333f9da706dee702364deefb4033f2aacb182782069b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"92291b4895d5d6748e242bb12c4e1b0bbdb999934b1e12c31580de0cdeb64c08"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c5c0c778af7d638d752a08ad46156c908fc0ec5989d101f3ab063fed0361a89f"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7dc5db3fb556c21c639c6723ffba8ee9586d32a6587bfd3de87d7f4797dad2e6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7dcedf20b82c79f5636e610c2ce93be8caae2a7b7a26eca8bf3b1c1c04ed793d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6ec5bc40c47714c3fd5f67553512ec227eb55e2a46caa338e45beb1dda91fd6a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ecc59a65acb4f8c215bc0ef28b2c277dc305664cb7bfa09b373e5c7081d885a7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed843f499a966bb8870a272e674db49ff8881426614339ac4dddf0b10311f66c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d8bf3a4171de66566be749b69973a6896a83099bea5856ddab69079999fc19a1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a463341869fa2bef9f30e4401a1767ff8511c514503fe9df0ea1a6a4442e8f02"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"577e3195cdd941eac36beff8f5ed1b1cc9815c2c8394d0c85e59383c4a7ca530"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cc57109cdafc177a1779ce69775e9d8a6bf9b54d16d8e9f51178336928065f5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c79941e01139154cac43c729d0b92135afff0eb0a53d5efda3e462c0f35abc3b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b5f3ee8049e7f9bc942327fb1a119fbd22d9732f2100278707a4fec4c0fc1203"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8d8e446758967da722964ca331581988f746aa64a7f9ef1196dc6804a315bf2c"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/NullableLiftingTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3074d0768bbf72f277057cf4aed8887061313259a102590489b43e6f4b5001e"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f58ba3feda9981847c1c1b9a967e7c06983292e9e6572b2cdbb0e8e409ff0713"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/LoopDetection.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e574087855a81e208f6b0961b9392524fa292ee137ec780dfeb58ef4970ac9f3"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/FlowAnalysis/DataFlowVisitor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1419c5d19a29e640f682496ce52e9cdf09a3ca31139af938ad1a32de7e51fa58"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74d287e3837d6aa5836dd5737bc225ca1c5605b0101449cae0168dde329514ac"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.ILSpyX/Search/CSharpLexer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50fa6611513f34cdb62848c60d00886ef3e3d9032fc1a3cabb872b0f2c80e341"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Util/CSharpPrimitiveCast.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f78a381576a94bb4a013eb3eb52c009db672bd166cdf813d65abf57bb43c163d"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd2c73fc6ae6abbe0bbd1747b20430ced6475ed4d90efd70a054696cf09c1ab"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/Metadata/LightJson/JsonValue.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a903443c8608d05d79e11009daf1d295b9f5f5934994ed2b5d3aeb437fcdbe47"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 80 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than listed individually (89 orphaned of 846 analysed files in total, counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: CSharpOutputVisitor.cs \u2194 DepthFirstAstVisitor.cs: \u0060ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs\u0060 and \u0060ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs\u0060 change together 58% of the time (15 of the 26 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in different directories, but in this ecosystem the namespace is declared in the FILE, not by the folder \u2014 so the two may well share one namespace and reference each other with no import for this pass to see. Read the pair before acting: if one derives from or overrides the other, the dependency is explicit in the type declaration and the co-change is definitional; if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE and the thing to add is a comment saying so; if they simply belong together, co-locate them; if none of these holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d7faf19197e92b8b515fd834cc6a1c4389c3218e95571dae1b1439f31f2b4b9"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: AvaloniaEditTextOutput.cs \u2194 DecompilerTextView.axaml.cs: \u0060ILSpy/TextView/AvaloniaEditTextOutput.cs\u0060 and \u0060ILSpy/TextView/DecompilerTextView.axaml.cs\u0060 change together 55% of the time (12 of the 22 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/TextView/AvaloniaEditTextOutput.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db3a612007ec6c854e0172f31e73db1bc606646d920d1acaf50c4200b914977"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: CreateDiagramContextMenuEntry.cs \u2194 ExtractPackageEntryContextMenuEntry.cs: \u0060ILSpy/Commands/CreateDiagramContextMenuEntry.cs\u0060 and \u0060ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well). They sit in the same directory, and in this ecosystem sibling files there normally share one namespace/package \u2014 so a direct reference between them needs no import and this pass cannot see whether one exists. Read the pair before acting: if one file only DECLARES what the other consumes (a constants/types file beside its user), the co-change is definitional and the question is whether the split earns its keep; if they duplicate structure, extract the common part into a shared function or type they both call; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ILSpy/Commands/CreateDiagramContextMenuEntry.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5219ea59d44296ddd89ee08bef610e5428da312687097cf7f7a6b980b7b9b9f4"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","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":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","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":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-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-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":45,"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."]}]}