{"$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":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"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":"D24","name":"Comment Value","shortDescription":{"text":"Comment Value"},"helpUri":"https://codehealth.canine.dev/dimensions/D24"},{"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":"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"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"PhysicalKeyExtensions.ToQwertyKeySymbol (cyclomatic 215): PhysicalKeyExtensions.ToQwertyKeySymbol has cyclomatic complexity 215 (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":"src/Avalonia.Base/Input/PhysicalKeyExtensions.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4189e834c54a212505f81a7a23b4e165e6cfe2fbfd4e807f5ae9f47fa9530a5"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.AppWndProc (cyclomatic 182): WindowImpl.AppWndProc has cyclomatic complexity 182 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93cb39282b524e463dd980ed82b9ac7c40e3d8cf64a8d43e5079c540357408e"}},{"ruleId":"D1","level":"warning","message":{"text":"XamlCompilerTaskExecutor.CompileCore (cyclomatic 96): XamlCompilerTaskExecutor.CompileCore has cyclomatic complexity 96 (threshold 15). Of this number, 77 points are the body\u0027s own statements and 19 belong to 7 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":"src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6d62c2aeade19f65638575a19ec1ca9a79a5acfea19f155763dda98bf1067e"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiAlgorithm.ProcessIsolatedRunSequence (cyclomatic 80): BidiAlgorithm.ProcessIsolatedRunSequence has cyclomatic complexity 80 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":856}}}],"partialFingerprints":{"codehealthFindingId/v1":"129b52b452320bcb7d9d5390410ca3279052d581559fe76cae94ae3838f30b1d"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionVariant.GetProperty (cyclomatic 76): ExpressionVariant.GetProperty has cyclomatic complexity 76 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"008912973c0458e8572e73467534cfac10c39a68b88c3a164a0a41adcb871a1a"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlLanguageParseIntrinsics.TryConvert (cyclomatic 66): AvaloniaXamlIlLanguageParseIntrinsics.TryConvert has cyclomatic complexity 66 (threshold 15). Of this number, 65 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6af44e8147446f37e54c27ce7bd8c2566227ad46e5762b889e19e4228251001"}},{"ruleId":"D1","level":"warning","message":{"text":"XamlIlBindingPathHelper.TransformBindingPath (cyclomatic 65): XamlIlBindingPathHelper.TransformBindingPath has cyclomatic complexity 65 (threshold 15). Of this number, 57 points are the body\u0027s own statements and 8 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"525a3a4ea16630b1275b82d7671a5e8a94a9167c80422230d3eda5c1a65573de"}},{"ruleId":"D1","level":"warning","message":{"text":"X11Window.OnEvent (cyclomatic 65): X11Window.OnEvent has cyclomatic complexity 65 (threshold 15). Of this number, 59 points are the body\u0027s own statements and 6 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bef83019a43ac41f4fba02d7833d3fc7da8370f953109994dea7a01d23c9900"}},{"ruleId":"D1","level":"warning","message":{"text":"TextBox.OnKeyDown (cyclomatic 63): TextBox.OnKeyDown has cyclomatic complexity 63 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1361}}}],"partialFingerprints":{"codehealthFindingId/v1":"549967d0f99a01c36979734f2f8aec5a40ba03748514f0c24accf7cfaeced7a0"}},{"ruleId":"D1","level":"warning","message":{"text":"Grid.SetFinalSizeMaxDiscrepancy (cyclomatic 60): Grid.SetFinalSizeMaxDiscrepancy has cyclomatic complexity 60 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1785}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d2a1e7dc7ebd2d1b26bd603ca80688f8d6e44b5b8899c74bf6958f8e506a63"}},{"ruleId":"D1","level":"warning","message":{"text":"Graph.MeasureChild (cyclomatic 55): Graph.MeasureChild 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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6418fc8309e0576b900e009e69a573af0c4913fe5c96e994d4ca32853accd6a"}},{"ruleId":"D1","level":"warning","message":{"text":"WordBreakEnumerator.IsBoundary (cyclomatic 53): WordBreakEnumerator.IsBoundary has cyclomatic complexity 53 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/WordBreakEnumerator.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"809f13908ba47c701863de57570101d5a36f3c51b1dbdd80bbbcad3a1726f817"}},{"ruleId":"D1","level":"warning","message":{"text":"XI2Manager.OnDeviceEvent (cyclomatic 53): XI2Manager.OnDeviceEvent has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.X11/XI2Manager.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"aac0d6a638e6fa4dae54ded167a2281bddc1c2106472e31c4b4026717d61a99d"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiAlgorithm.ResolveExplicitEmbeddingLevels (cyclomatic 48): BidiAlgorithm.ResolveExplicitEmbeddingLevels 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"f25faf26a136f0411c986774a87dbb184996b4f730e94b26bf100b960121acac"}},{"ruleId":"D1","level":"warning","message":{"text":"TextPathSegmentEllipsis.Collapse (cyclomatic 48): TextPathSegmentEllipsis.Collapse 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":"src/Avalonia.Base/Media/TextPathSegmentEllipsis.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9d15cb1a6e8ca13edb47bbe8a94489f7f2a07dab59657a660805efb7d704c8"}},{"ruleId":"D1","level":"warning","message":{"text":"LineBreakEnumerator.LB25 (cyclomatic 46): LineBreakEnumerator.LB25 has cyclomatic complexity 46 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce18450898385884fe5c007dcad00b24c3fc17d1c8720e2a370ae1b0bc52912"}},{"ruleId":"D1","level":"warning","message":{"text":"DialogsPage.DialogsPage.ctor (cyclomatic 46): DialogsPage.DialogsPage.ctor has cyclomatic complexity 46 (threshold 15). Of this number, 27 points are the body\u0027s own statements and 19 belong to 7 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":"samples/ControlCatalog/Pages/DialogsPage.xaml.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"77103f95b34dc7e7e47b062d8ad4e64c5c3057d6f906acce2bc30689e8831155"}},{"ruleId":"D1","level":"warning","message":{"text":"LineBreakEnumerator.ExecuteRules (cyclomatic 45): LineBreakEnumerator.ExecuteRules has cyclomatic complexity 45 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"528b51e3091778fcb7baf470c9429897cc89e829fb9c4f64fe0f6e93a07ece6f"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlSelectorTransformer.Transform (cyclomatic 43): AvaloniaXamlIlSelectorTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"6360ed8cb798db148e690207bdfd4c49ffc0450d312f05566ef19da8bd614bee"}},{"ruleId":"D1","level":"warning","message":{"text":"Grid.ResolveStarMaxDiscrepancy (cyclomatic 43): Grid.ResolveStarMaxDiscrepancy 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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1451}}}],"partialFingerprints":{"codehealthFindingId/v1":"faddaeb893303cc97aa70490c2972b6cf83216c8a12a9a5a1680c6d152c59a25"}},{"ruleId":"D1","level":"warning","message":{"text":"CrossThreadProxyGenerator.Extract (cyclomatic 43): CrossThreadProxyGenerator.Extract 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":"src/tools/DevGenerators/CrossThreadProxyGenerator.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b41eb0ec6a1e20c90cbdf6cacfa5a31fdaf608f391d320143492896de6d8dbfc"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyInterop.KeyFromDomKey (cyclomatic 41): KeyInterop.KeyFromDomKey has cyclomatic complexity 41 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Browser/Avalonia.Browser/KeyInterop.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"f38629db1c785f125b074cab2b616627cb384d66563c83805ff47d6321400b68"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphemeEnumerator.MoveNext (cyclomatic 39): GraphemeEnumerator.MoveNext 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/GraphemeEnumerator.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e4b1d676cf6462c76150673120b432fec7a2290a4c368545c65d26945e9b11"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformParser.ParseFunction (cyclomatic 39): TransformParser.ParseFunction 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":"src/Avalonia.Base/Media/Transformation/TransformParser.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a879e346613b24c8452d0a3f0dcda3883ef6fa9f64c3084fb1b9d8e334af49"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionVariant.OperatorDeclaration (cyclomatic 39): ExpressionVariant.OperatorDeclaration has cyclomatic complexity 39 (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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0adb29585c9938bd5664f06062aa52384a97ef6eb6cee3e4fb0328579ccadf2"}},{"ruleId":"D1","level":"warning","message":{"text":"Bcp47ScriptResolver.GetScriptSubtag (cyclomatic 38): Bcp47ScriptResolver.GetScriptSubtag has cyclomatic complexity 38 (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":"src/Avalonia.Base/Media/Fonts/Bcp47ScriptResolver.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee86da16b57f242c4324d90f3e3ef07f033da37da191702ac576e5c1e3662e4"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingStackPanel.UpdateSpecialElementsOnItemsChanged (cyclomatic 38): VirtualizingStackPanel.UpdateSpecialElementsOnItemsChanged 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d43a7aeda04c8ea3bf0fb1cee77d8ee884ca68f29c64ca14a7fdb4efbf226f"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlBindingPathTransformer.Transform (cyclomatic 37): AvaloniaXamlIlBindingPathTransformer.Transform has cyclomatic 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, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"43cec657ab23d473b6c2fbad3bd9f62d54f5317e510364714d2887fe4b67cd27"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorSpectrum.OnPropertyChanged (cyclomatic 37): ColorSpectrum.OnPropertyChanged 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7de22a39dc7b1cf2deb5a2ffbaee1c08d8df5db9e26039c16c0daccb72b253"}},{"ruleId":"D1","level":"warning","message":{"text":"JSONParser.ParseValue (cyclomatic 37): JSONParser.ParseValue 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":"src/tools/Avalonia.Designer.HostApp/TinyJson.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e303e14dcb35190764f93713097e7a836f0cd3b745609b8d2eb3cf3abb85fad"}},{"ruleId":"D1","level":"warning","message":{"text":"GetProcAddressInitializationGenerator.Initialize (cyclomatic 37): GetProcAddressInitializationGenerator.Initialize has cyclomatic complexity 37 (threshold 15). Most of this is not in the body itself: 1 of the 37 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 35, 24). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/DevGenerators/GetProcAddressInitialization.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"2093edef73191ab6535b8d1e500af74e89c5aeb3205e8034fd7184de61bd4005"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphTypeface.GlyphTypeface.ctor (cyclomatic 35): GlyphTypeface.GlyphTypeface.ctor 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":"src/Avalonia.Base/Media/GlyphTypeface.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"360ec993fb99c50501cb01a0bba9bc7d2ebea9c5ed3ae69772b00154402f53d0"}},{"ruleId":"D1","level":"warning","message":{"text":"XamlMergeResourceGroupTransformer.Transform (cyclomatic 35): XamlMergeResourceGroupTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlMergeResourceGroupTransformer.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"2248e63994fca8602b0f76b4babe4b83247d68078113e9bd562019d25d13a1c2"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlOptionMarkupExtensionTransformer.Transform (cyclomatic 35): AvaloniaXamlIlOptionMarkupExtensionTransformer.Transform has cyclomatic complexity 35 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 4 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlOptionMarkupExtensionTransformer.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"773f467c9ab8431b2c8ffe4be1685ca4841de22d1065fa466b05eb754f2f2e6a"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorSpectrum.OnKeyDown (cyclomatic 35): ColorSpectrum.OnKeyDown has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"38317389b6c699027db7ec9bc0fa695ff9a4df2212df817bee216766ff59022e"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnSwipeGesture (cyclomatic 35): VirtualizingCarouselPanel.OnSwipeGesture 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"42bc6c755d51838191acf3a975529a6ebb8fd70507ab2926b0da9fa7a343118b"}},{"ruleId":"D1","level":"warning","message":{"text":"VulkanContext.TryCreate (cyclomatic 35): VulkanContext.TryCreate has cyclomatic complexity 35 (threshold 15). Of this number, 33 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":"samples/GpuInterop/VulkanDemo/VulkanContext.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9907e222439dc53c0b083d69880a1578c6ce72d8d7c5b24306336f593fa63abb"}},{"ruleId":"D1","level":"warning","message":{"text":"FocusManager.GetNextTabStop (cyclomatic 34): FocusManager.GetNextTabStop 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"07dc2904a20a40c26880ff813221c2cb5608770f46e65577111b64728966c8bf"}},{"ruleId":"D1","level":"warning","message":{"text":"FocusManager.GetPreviousTabStop (cyclomatic 34): FocusManager.GetPreviousTabStop 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b4cc55fa5357f9eb887674d37697d6561f1832515fbbaab32895973fab8f5a0"}},{"ruleId":"D1","level":"warning","message":{"text":"TextFormatterImpl.PerformTextWrapping (cyclomatic 34): TextFormatterImpl.PerformTextWrapping 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb3ac8ca2abdb74447c300a55a1c67b7d3a9f47b4ede68dfe3e3ea58ee7ca377"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorPickerHelpers.CreateComponentBitmapAsync (cyclomatic 34): ColorPickerHelpers.CreateComponentBitmapAsync has cyclomatic complexity 34 (threshold 15). Most of this is not in the body itself: 3 of the 34 points are its own statements and the rest belongs to one function literal inside it that branches (line 55). 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"d84f9490cdb4c91df4dc2c487d49374ed86a94db2bbbb0785fe6692655dae9a4"}},{"ruleId":"D1","level":"warning","message":{"text":"ConnectedAnimation.RunAnimationCoreAsync (cyclomatic 34): ConnectedAnimation.RunAnimationCoreAsync has cyclomatic complexity 34 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 12 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":"src/Avalonia.Controls/Animation/ConnectedAnimation.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a926b8af6d33cb09386bbdca0ccf4a29bb0c783406635a19e6eb611eebdae1d"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaNameIncrementalGenerator.Initialize (cyclomatic 33): AvaloniaNameIncrementalGenerator.Initialize has cyclomatic complexity 33 (threshold 15). Most of this is not in the body itself: 1 of the 33 points is its own statement and the rest belongs to 4 function literals inside it that branch (lines 189, 131, 64, \u2026). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameIncrementalGenerator.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"7304ff972d5de476f656db0e7170cb044717fc4b3b05f18f6b4cd3316cc3138f"}},{"ruleId":"D1","level":"warning","message":{"text":"TextCharacters.CreateShapeableRun (cyclomatic 32): TextCharacters.CreateShapeableRun 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":"src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ba128f52f4a5848519bd4bdb3d10a002b1fb2a9552016429593580d46695cd"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlBindingPathParser.ConvertLongFormPropertiesToBindingExpressionNode (cyclomatic 32): AvaloniaXamlIlBindingPathParser.ConvertLongFormPropertiesToBindingExpressionNode has cyclomatic complexity 32 (threshold 15). Of this number, 29 points are the body\u0027s own statements and 3 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad0c95d0f995f1e5fdfd086e8587e0170019cb943f324517cdc18126c3dbfcb"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.CustomCaptionProc (cyclomatic 32): WindowImpl.CustomCaptionProc 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":"src/Windows/Avalonia.Win32/WindowImpl.CustomCaptionProc.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"dafa9e8f03f1f964392e9b58e2d838284c22638073d47982e754debdc161cf05"}},{"ruleId":"D1","level":"warning","message":{"text":"ManagedPopupPositioner.Calculate (cyclomatic 31): ManagedPopupPositioner.Calculate 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":"src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositioner.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"17937852630c9ef092db3b0b4b96234cab9ee1166e1eb7ea052f31aeaa130693"}},{"ruleId":"D1","level":"warning","message":{"text":"AndroidMotionEventsHelper.GetActionType (cyclomatic 31): AndroidMotionEventsHelper.GetActionType has cyclomatic complexity 31 (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":"src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"c13367afc2ae7a6d6bd82fae1b64a1f3778203f0a3cc92115107372da9300c11"}},{"ruleId":"D1","level":"warning","message":{"text":"CmapTable.Load (cyclomatic 30): CmapTable.Load 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":"src/Avalonia.Base/Media/Fonts/Tables/Cmap/CmapTable.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3d0b7e4ee6e486bf92d97af704ed620428037d3cfe47793c01798171b81bb4"}},{"ruleId":"D1","level":"warning","message":{"text":"TransformOperation.TryInterpolate (cyclomatic 30): TransformOperation.TryInterpolate 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":"src/Avalonia.Base/Media/Transformation/TransformOperation.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5f41a06a488fde063e97419ca133bdbcd2327f749f9d870b6b0f0d62e27bf5c"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerCompositionTarget.Render (cyclomatic 30): ServerCompositionTarget.Render has cyclomatic complexity 30 (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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"456395298467216d7b7f8381250e856bb90b07b66e1f54784600191cd27096a6"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorSpectrum.UpdateEllipse (cyclomatic 30): ColorSpectrum.UpdateEllipse 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"354c686e04312379ae659d9be546d9d6545d2fe1efb59821ec804dcacbcf799b"}},{"ruleId":"D1","level":"warning","message":{"text":"ScrollContentPresenter.SnapOffset (cyclomatic 30): ScrollContentPresenter.SnapOffset 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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":975}}}],"partialFingerprints":{"codehealthFindingId/v1":"062b51bd367f69cbd411c5b0cd8005f4b4f87f4cc4b5bc97778427c4918d2ab0"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.UpdateWindowProperties (cyclomatic 30): WindowImpl.UpdateWindowProperties 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":1413}}}],"partialFingerprints":{"codehealthFindingId/v1":"f220bbfa64a0c595fe91b004f4b2e63d6bf118e12dc894b7d630b9e11c6ba63e"}},{"ruleId":"D1","level":"warning","message":{"text":"Color.TryParse (cyclomatic 29): Color.TryParse 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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a51eccbe594f2840abf48f58fc74639faa779f7f6a10c3d10e2101af966cde8"}},{"ruleId":"D1","level":"warning","message":{"text":"Color.TryParse (cyclomatic 29): Color.TryParse 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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"51f696dc0b7958949683063a87e7e353e4e96ec3914f884f513ff4c4caebae22"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorSpectrum.UpdateBitmapSources (cyclomatic 29): ColorSpectrum.UpdateBitmapSources has cyclomatic complexity 29 (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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1586}}}],"partialFingerprints":{"codehealthFindingId/v1":"81c23d9f11f6c35bcf34e2f07a4259b78a053ecd1e7009b89e718fe6e0574e93"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandBar.UpdateDynamicOverflow (cyclomatic 29): CommandBar.UpdateDynamicOverflow has cyclomatic 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, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/CommandBar/CommandBar.cs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"736ed5db5832ce317888395c778a6724cc7beb63ce4128d28078154d86c1a501"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultMenuInteractionHandler.KeyDown (cyclomatic 29): DefaultMenuInteractionHandler.KeyDown 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":"src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"894041f514dc9b2936f3f312fdd77f21c16d3399fae72cc9680585810283735f"}},{"ruleId":"D1","level":"warning","message":{"text":"TickBar.Render (cyclomatic 29): TickBar.Render 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":"src/Avalonia.Controls/TickBar.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9e030593a8fc21f1c983fcd85c2fd3bb36075968353fbe0c0813744b47838e"}},{"ruleId":"D1","level":"warning","message":{"text":"DBusMenuExporterImpl.GetProperty (cyclomatic 29): DBusMenuExporterImpl.GetProperty 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":"src/Avalonia.FreeDesktop/DBusMenuExporter.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc05cea08eaf346d95f5816fdae7514d34909816acb293b93df140c94f652975"}},{"ruleId":"D1","level":"warning","message":{"text":"DrawerPage.OnSwipeGesture (cyclomatic 28): DrawerPage.OnSwipeGesture 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d68130dd339d2399d4cb2ba90a0b0d75ecdacaa56d668b5dc42bb838daefc2"}},{"ruleId":"D1","level":"warning","message":{"text":"TextPresenter.OnPropertyChanged (cyclomatic 28): TextPresenter.OnPropertyChanged 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":"src/Avalonia.Controls/Presenters/TextPresenter.cs"},"region":{"startLine":1019}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9244e7b189bb740d1778dcec01a48c68751d8cd96d37668c6ea59b7b654ec1f"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingStackPanel.OnEffectiveViewportChanged (cyclomatic 28): VirtualizingStackPanel.OnEffectiveViewportChanged 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":1222}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9e6fd164a50e8922badcc90a12e357c9ffc6aacdb2d37e5c7789ce2900a0c10"}},{"ruleId":"D1","level":"warning","message":{"text":"SafeArrayRef.TryCreate (cyclomatic 28): SafeArrayRef.TryCreate 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":"src/Windows/Avalonia.Win32.Automation/Marshalling/SafeArrayRef.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e24edfd4657b06d6c9201ba799893c084a8efa11da764e0f2a76108ef8f1e5a"}},{"ruleId":"D1","level":"warning","message":{"text":"Win32Icon.LoadIconFromData (cyclomatic 28): Win32Icon.LoadIconFromData 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":"src/Windows/Avalonia.Win32/Interop/Win32Icon.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"180c01ed7779c86a895f247941548a91f0821670ac2b81f53991dd66296367a0"}},{"ruleId":"D1","level":"warning","message":{"text":"FocusManager.GetNextOrPreviousTabStopInternal (cyclomatic 27): FocusManager.GetNextOrPreviousTabStopInternal 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eef55ec54c5be0fe23779c55c145f30534f77f84b7a1ca9e074bb8c3a36a63e"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionVariant.OperatorDeclaration (cyclomatic 27): ExpressionVariant.OperatorDeclaration 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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"afa2ddc519c52381e19cee05c31f20aa8e1d2a24f911529254fa4934a70ffae9"}},{"ruleId":"D1","level":"warning","message":{"text":"SpanVector.Set (cyclomatic 27): SpanVector.Set 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":"src/Avalonia.Base/Utilities/Span.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"dea0af3233d0f0463ea39ded62732a56d4f0b5bb4ea4adf89ea7547814593ff4"}},{"ruleId":"D1","level":"warning","message":{"text":"Grid.EnsureMinSizeInDefinitionRange (cyclomatic 27): Grid.EnsureMinSizeInDefinitionRange has cyclomatic complexity 27 (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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1232}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1aed8f7f8c111d978c1d6466b88fbbd46762b174555ff1b26ad8f6173a8b596"}},{"ruleId":"D1","level":"warning","message":{"text":"DrawerPage.OnPropertyChanged (cyclomatic 27): DrawerPage.OnPropertyChanged 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"eacf711440ac2131f7e0877c9b447848cd82448749b8eabf34b7a65d4df227f7"}},{"ruleId":"D1","level":"warning","message":{"text":"DrawerPage.UpdateContentSafeAreaPadding (cyclomatic 27): DrawerPage.UpdateContentSafeAreaPadding 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":878}}}],"partialFingerprints":{"codehealthFindingId/v1":"a92011b681f11916a2b6e5cb35c792e355306ccff759f1a826188d9eeca34a4f"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectionModel.CommitOperation (cyclomatic 27): SelectionModel.CommitOperation 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":"src/Avalonia.Controls/Selection/SelectionModel.cs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"45587d156e4975c0fda7ed2bd712eabbd60660bd37e9b4c9a2a3ee970bf536f3"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorParser.Create (cyclomatic 27): SelectorParser.Create has cyclomatic complexity 27 (threshold 15). Of this number, 26 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":"src/Markup/Avalonia.Markup/Markup/Parsers/SelectorParser.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbbdb9c9f8bcc9852da6a4985c32c4d898ced17ac18c3ca95ccc29705dcc9d1f"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLayout.CreateTextLines (cyclomatic 26): TextLayout.CreateTextLines 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":"src/Avalonia.Base/Media/TextFormatting/TextLayout.cs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd324551da1d6bc75609a57e24b498953c3da14a7b6d2116e136d920eb85c802"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlDataContextTypeTransformer.Transform (cyclomatic 26): AvaloniaXamlIlDataContextTypeTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"748035640e6f16febbcf53a87658aa03ce1ba57ae686071e33396246701349e9"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorPickerHelpers.FindNextNamedColor (cyclomatic 26): ColorPickerHelpers.FindNextNamedColor 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8be2338bdafba01cd41758a3e8c8b89b604ad1dd06da90fd7554b612475bac6"}},{"ruleId":"D1","level":"warning","message":{"text":"ComboBox.OnKeyDown (cyclomatic 26): ComboBox.OnKeyDown has cyclomatic complexity 26 (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":"src/Avalonia.Controls/ComboBox.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d6ba1939332886a5bfa32affce7d2eebf24904629e215172ce501829bbdbb3"}},{"ruleId":"D1","level":"warning","message":{"text":"LayoutTransformControl.ComputeLargestTransformedSize (cyclomatic 26): LayoutTransformControl.ComputeLargestTransformedSize has cyclomatic complexity 26 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/LayoutTransformControl.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"36bb528b27a7cd88a848e8bd88506f66ffafb89e6d8fd216166b23d1a3511fb5"}},{"ruleId":"D1","level":"warning","message":{"text":"InputHandler.Handle (cyclomatic 26): InputHandler.Handle has cyclomatic complexity 26 (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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"333881a8879a8ac40dad2152c90927ed98a38c57e050e02f69ffdfb14d72316b"}},{"ruleId":"D1","level":"warning","message":{"text":"GtkSystemDialog.ShowDialog (cyclomatic 26): GtkSystemDialog.ShowDialog has cyclomatic complexity 26 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 6 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":"src/Avalonia.X11/NativeDialogs/GtkNativeFileDialogs.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd222fa377a2f22b88c20e7e9673e3185b1ad542c2010421ea66ee3e4b69ff77"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLineImpl.GetTextBounds (cyclomatic 25): TextLineImpl.GetTextBounds 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"4455f78c1f6f2ad9a67432bc67f6878d9242c9b92c19705c9c9b80997c7f0afd"}},{"ruleId":"D1","level":"warning","message":{"text":"ExpressionParser.ParseTillTerminator (cyclomatic 25): ExpressionParser.ParseTillTerminator 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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionParser.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"d78aac86cce16457d589b514725805348f186c5ddf847dd6217d5d4bc7c4ade1"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlSetterTransformer.Transform (cyclomatic 25): AvaloniaXamlIlSetterTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSetterTransformer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6fe3a6d19506b37ff5dd1b6dfa3c3959671861645f2504806d3a454d087bd68"}},{"ruleId":"D1","level":"warning","message":{"text":"TabControl.UpdateSelectedContent (cyclomatic 25): TabControl.UpdateSelectedContent has cyclomatic complexity 25 (threshold 15). Most of this is not in the body itself: 11 of the 25 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 291, 332, 326). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TabControl.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"23ef3a4aad5ec94d5d4798163875492ede65288c8898e52d6d4dc933734999ad"}},{"ruleId":"D1","level":"warning","message":{"text":"TabNavigation.GetPrevTab (cyclomatic 24): TabNavigation.GetPrevTab 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"4718ccebc925fcdd730d0c99690ac952102608c4d69483e9f0b2b65b0ab1e5f7"}},{"ruleId":"D1","level":"warning","message":{"text":"Visual.SynchronizeCompositionChildVisuals (cyclomatic 24): Visual.SynchronizeCompositionChildVisuals 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":"src/Avalonia.Base/Visual.Composition.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b982159c2579d5858c0c9c0451f5ebd4d30ebc03b45dfcbfae537db085fc45"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorSpectrum.CreateBitmapsAndColorMap (cyclomatic 24): ColorSpectrum.CreateBitmapsAndColorMap has cyclomatic complexity 24 (threshold 15). Of this number, 13 points are the body\u0027s own statements and 11 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"dee878c373f6caba0eb56271f7bdf2d3eb3ec15588df19a91791f66014a41275"}},{"ruleId":"D1","level":"warning","message":{"text":"MaskedTextBox.OnPropertyChanged (cyclomatic 24): MaskedTextBox.OnPropertyChanged 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":"src/Avalonia.Controls/MaskedTextBox.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e5d9b28756d6521e3cbb32455252def6d5e5127e9fbb829e7b1bd173d41bf8"}},{"ruleId":"D1","level":"warning","message":{"text":"PopupPositionerExtensions.BuildParameters (cyclomatic 24): PopupPositionerExtensions.BuildParameters has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ec4329792010801b3a892e93dc359c3a9f40a631c25014678d4274b7441865"}},{"ruleId":"D1","level":"warning","message":{"text":"WrapPanel.ArrangeOverride (cyclomatic 24): WrapPanel.ArrangeOverride 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":"src/Avalonia.Controls/WrapPanel.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"62f75608215486379b93a672cd7a2b5e3a69c4b06a2abaf89835044131ed4c21"}},{"ruleId":"D1","level":"warning","message":{"text":"InputHandler.Handle (cyclomatic 24): InputHandler.Handle 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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"11595e08a0b4a8f65d62a70909f9a097dafb091a8a8def4e99611d25410657cd"}},{"ruleId":"D1","level":"warning","message":{"text":"DrawingContextImpl.DrawRectangle (cyclomatic 24): DrawingContextImpl.DrawRectangle 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":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"99681946284e0b4e1e324b7911c7957f0a619d74e61f67b8f672d5cd725a7d95"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.HitTestVisual (cyclomatic 24): WindowImpl.HitTestVisual 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, 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":"src/Windows/Avalonia.Win32/WindowImpl.CustomCaptionProc.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"259ffc66966a4be4c28160031a51e6697dedf7d3452249f48443547d95c0db91"}},{"ruleId":"D1","level":"warning","message":{"text":"Color.TryParseCssFormat (cyclomatic 23): Color.TryParseCssFormat 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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"1339c2f1cb0c749557592bdd263a3f25ba4c765ac15a6962b63899bac3ffdbe3"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLeadingPrefixCharacterEllipsis.Collapse (cyclomatic 23): TextLeadingPrefixCharacterEllipsis.Collapse 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":"src/Avalonia.Base/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ec217880843c250bd3a09d6fa5187d8dad4419937a874e9f77c764911f1991"}},{"ruleId":"D1","level":"warning","message":{"text":"ConnectedAnimation.RunFallbackAnimationAsync (cyclomatic 23): ConnectedAnimation.RunFallbackAnimationAsync has cyclomatic complexity 23 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 6 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":"src/Avalonia.Controls/Animation/ConnectedAnimation.cs"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06b752a0bb3ba0c49254a833b474eaff209bbed4088efc92aff888708b74083"}},{"ruleId":"D1","level":"warning","message":{"text":"CalendarDatePicker.OnPropertyChanged (cyclomatic 23): CalendarDatePicker.OnPropertyChanged 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":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"78e3c41b8485a8286828936b1ace8f815cb8c0d21db3f77cd3c8e8a2d467f196"}},{"ruleId":"D1","level":"warning","message":{"text":"CompileAnalyzer.RegisterAvaloniaPropertySymbols (cyclomatic 23): CompileAnalyzer.RegisterAvaloniaPropertySymbols has cyclomatic complexity 23 (threshold 15). Most of this is not in the body itself: 6 of the 23 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 147, 239, 189, \u2026). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"c01d25b268aca54d8e488e45a9bdfd855417f72cf5d60485a5a14b4cf19929ef"}},{"ruleId":"D1","level":"warning","message":{"text":"CompileAnalyzer.RegisterInitializer_Invocation (cyclomatic 23): CompileAnalyzer.RegisterInitializer_Invocation has cyclomatic complexity 23 (threshold 15). Of this number, 20 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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a6083774aac4990d5fa1117c121bd6a4d9def745c4801fd20cc4ac3fbb62a67"}},{"ruleId":"D1","level":"warning","message":{"text":"CompileAnalyzer.AnalyzeMethodInvocation (cyclomatic 23): CompileAnalyzer.AnalyzeMethodInvocation has cyclomatic 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, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c10a5e54c05168c017779b6202faff1e8d3003edcf7e62c006696d28c9d609e"}},{"ruleId":"D1","level":"warning","message":{"text":"Generator.GenerateClass (cyclomatic 23): Generator.GenerateClass 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":"src/tools/DevGenerators/CompositionGenerator/Generator.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cde775ff6c3212efeb8a907d7e6b6fcdc70185fddf48814de6fa775e14d4939"}},{"ruleId":"D1","level":"warning","message":{"text":"RefAssemblyGenerator.ProcessType (cyclomatic 22): RefAssemblyGenerator.ProcessType 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":"nukebuild/RefAssemblyGenerator.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b7ea4806adf9b3aca27af3615b07f9baa8331935efad42355e0cdff51a9315b"}},{"ruleId":"D1","level":"warning","message":{"text":"FontCollectionBase.TryAddFontSource (cyclomatic 22): FontCollectionBase.TryAddFontSource 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b30b775e0eedc3558f1989e4f4a5efa5e7da904939ebfd1a4656e8c4fd0493"}},{"ruleId":"D1","level":"warning","message":{"text":"HslColor.TryParse (cyclomatic 22): HslColor.TryParse 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":"src/Avalonia.Base/Media/HslColor.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfe1a9d1dd28994f48724daa9eb5c396047156fd45d3ba3250401d834abd62a4"}},{"ruleId":"D1","level":"warning","message":{"text":"HsvColor.TryParse (cyclomatic 22): HsvColor.TryParse 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":"src/Avalonia.Base/Media/HsvColor.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac19c8cdcdd870abc69aec877913565f4fa2fa5ae71e249137897e890cd3e99b"}},{"ruleId":"D1","level":"warning","message":{"text":"MediaExtensions.CalculateScaling (cyclomatic 22): MediaExtensions.CalculateScaling 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":"src/Avalonia.Base/Media/MediaExtensions.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f52ef76cbd7c8988fa08998505aecf8ec1468dc3c2362b1ebef54963b0a7b7"}},{"ruleId":"D1","level":"warning","message":{"text":"UnicodeTrieBuilder.SetRange (cyclomatic 22): UnicodeTrieBuilder.SetRange 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5a55c1aa693e29cd75eadd439cc8f717b342c687676b223e334445df597dfe7"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeUtilities.TryConvert (cyclomatic 22): TypeUtilities.TryConvert 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":"src/Avalonia.Base/Utilities/TypeUtilities.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"79dce4b805e51b9a52a41ddf18b042c14154819d293136aa9acd98fe99e7868c"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlQueryTransformer.Transform (cyclomatic 22): AvaloniaXamlIlQueryTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"3af920c4ce894b07acfe54b4b1cbf4356c25412ae0d250c636528eb2cc6ed86d"}},{"ruleId":"D1","level":"warning","message":{"text":"XamlIlClrPropertyInfoEmitter.Emit (cyclomatic 22): XamlIlClrPropertyInfoEmitter.Emit has cyclomatic complexity 22 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlClrPropertyInfoHelper.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"79bd5e8b01e88edda4b685d92fbe7b21a3c802e4541e73f11bed1061768b18f0"}},{"ruleId":"D1","level":"warning","message":{"text":"Calendar.ProcessSelection (cyclomatic 22): Calendar.ProcessSelection 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1577}}}],"partialFingerprints":{"codehealthFindingId/v1":"8599c8b8d40eb407884989995ebc6c7a3666d95d4974a32b2d5bb8f0d05dc23a"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiPage.NotifyCollection_CollectionChanged (cyclomatic 22): MultiPage.NotifyCollection_CollectionChanged 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":"src/Avalonia.Controls/Page/MultiPage.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1e4af726eab57a8fb87455b6b58c7a0961500544a7892a75528eefac87ea4b"}},{"ruleId":"D1","level":"warning","message":{"text":"ScrollContentPresenter.OnScrollGesture (cyclomatic 22): ScrollContentPresenter.OnScrollGesture 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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4d0aed02a36b94c73aa2a415da96124e06ccd0f458d13dff4a7d95d5b855dd"}},{"ruleId":"D1","level":"warning","message":{"text":"AtSpiNode.ComputeStatesCore (cyclomatic 22): AtSpiNode.ComputeStatesCore 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":"src/Avalonia.FreeDesktop.AtSpi/AtSpiNode.StateMapping.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7bd084984b7555ef0d9ee048ba7f140797cf9f5eee34fcd33ba1aa487c7c14f"}},{"ruleId":"D1","level":"warning","message":{"text":"X11Window.X11Window.ctor (cyclomatic 22): X11Window.X11Window.ctor has cyclomatic complexity 22 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e381cb587c2418b8e7dd1ea1d600dccca2e5424daae7e86a705b3c27abd4e2f"}},{"ruleId":"D1","level":"warning","message":{"text":"InteractiveLineControl.Render (cyclomatic 22): InteractiveLineControl.Render 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":"samples/TextTestApp/InteractiveLineControl.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a7291bb14fd0858a2f3e7765faf3263cf89bb7181855be47283b33801c91a41"}},{"ruleId":"D1","level":"warning","message":{"text":"SbomGenerator.AddPackageContentComponents (cyclomatic 21): SbomGenerator.AddPackageContentComponents 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":"nukebuild/SbomGenerator.cs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"4621343f433e359fb38782cdf43013523c2550eaec35f7e4fc8b7d385666794e"}},{"ruleId":"D1","level":"warning","message":{"text":"ScrollGestureRecognizer.PointerMoved (cyclomatic 21): ScrollGestureRecognizer.PointerMoved 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":"src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0dd76aa23ff00fc46a6d9d7aad4ac38a2f69582f1673191ea350b6e025418f5"}},{"ruleId":"D1","level":"warning","message":{"text":"FontCollectionBase.TryMatchCharacter (cyclomatic 21): FontCollectionBase.TryMatchCharacter 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8610b5c61d4dc3f9107367b75364ff7403bf21385146f690f2ca8acf38089c0"}},{"ruleId":"D1","level":"warning","message":{"text":"FontCollectionBase.TryFindWeightFallback (cyclomatic 21): FontCollectionBase.TryFindWeightFallback 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":1170}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f70c30967e1048fb649c5b6e4f9b5419eed02a222057c0f865c1326d8372a56"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyParser.Parse (cyclomatic 21): PropertyParser.Parse 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":"src/Markup/Avalonia.Markup.Xaml/Parsers/PropertyParser.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"d60cd73a6faaf557b0cecb1b8cafdc2324a491e93781bba7cfee34bcc826ccd5"}},{"ruleId":"D1","level":"warning","message":{"text":"Grid.MeasureOverride (cyclomatic 21): Grid.MeasureOverride 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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"4454d947ffee5741c809946ea2b62735eb401e2a383052ec547cc11f8cc1b135"}},{"ruleId":"D1","level":"warning","message":{"text":"Slider.MoveToNextTick (cyclomatic 21): Slider.MoveToNextTick 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":"src/Avalonia.Controls/Slider.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"69d1bd8703c1874489e95e71ff5953ca861e40e238ff53da0b8a5bfa4cf62218"}},{"ruleId":"D1","level":"warning","message":{"text":"StackPanel.GetControlInDirection (cyclomatic 21): StackPanel.GetControlInDirection 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":"src/Avalonia.Controls/StackPanel.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d7efb500e62c14dedb4dad9166e1f7aac6286aae90a2e512b58f80acda88a96"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeView.SelectedItemsCollectionChanged (cyclomatic 21): TreeView.SelectedItemsCollectionChanged 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":"src/Avalonia.Controls/TreeView.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f0f3db92aa6a855cc6e647a32478208e2232bd87a158fa6df0788ffaa69084"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeViewItem.OnKeyDown (cyclomatic 21): TreeViewItem.OnKeyDown 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":"src/Avalonia.Controls/TreeViewItem.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"769db6c828eed021e45a017fba3163a8433a821e588bedd2dde763eeaad4f66b"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingStackPanel.GetControl (cyclomatic 21): VirtualizingStackPanel.GetControl 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"be3ae2344240b145b30f8f720c03de0103f52dd867770c2bb7c8112239da234f"}},{"ruleId":"D1","level":"warning","message":{"text":"ComVariant.Create (cyclomatic 21): ComVariant.Create 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":"src/Windows/Avalonia.Win32.Automation/Marshalling/ComVariant.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc7dd004c005bc8dccfc3beb46c1608e45d117554c79021630fa29edb0801a8c"}},{"ruleId":"D1","level":"warning","message":{"text":"Animatable.OnPropertyChangedCore (cyclomatic 20): Animatable.OnPropertyChangedCore 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":"src/Avalonia.Base/Animation/Animatable.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b9ee1b681289c9fe09c95cf6a63a1c1690c7a24376f94782577a72b493e7c6a"}},{"ruleId":"D1","level":"warning","message":{"text":"BindingExpression.BindingExpression.ctor (cyclomatic 20): BindingExpression.BindingExpression.ctor has cyclomatic complexity 20 (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":"src/Avalonia.Base/Data/Core/BindingExpression.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e5a38430b2184e45977ecd946828f8d076afaf12b0eb17526748565e1a02d48"}},{"ruleId":"D1","level":"warning","message":{"text":"Pointer.Capture (cyclomatic 20): Pointer.Capture 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":"src/Avalonia.Base/Input/Pointer.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cc4d07412ceabd35684f83f6f41ef7b749352c14080a6eeaa09b42bbeed462b"}},{"ruleId":"D1","level":"warning","message":{"text":"FontManager.TryMatchCharacter (cyclomatic 20): FontManager.TryMatchCharacter 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":"src/Avalonia.Base/Media/FontManager.cs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"46bd13b89dd272fad8e56a8440fbbf5c78a33daae2653b645cae3c4ddbe9c6bd"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLineImpl.CreateLineMetrics (cyclomatic 20): TextLineImpl.CreateLineMetrics 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":1319}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0b197867317c252d2464a4b21b48658df762a7b793ab29c5f33ebb836e85f3e"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlTransformInstanceAttachedProperties.Transform (cyclomatic 20): AvaloniaXamlIlTransformInstanceAttachedProperties.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformInstanceAttachedProperties.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f5d70b310b04ac9922979dcac4bd6e368cfa5f0940cbc94117aef706c53c072"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorGrammar.ParseNthChildArguments (cyclomatic 20): SelectorGrammar.ParseNthChildArguments has cyclomatic 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, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ff82899c2d6ba9fdc1e29be7cf39dbeaf4093a02d9cd1ee62aa93284c913e9a"}},{"ruleId":"D1","level":"warning","message":{"text":"CalendarItem.SetCalendarDayButtons (cyclomatic 20): CalendarItem.SetCalendarDayButtons 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dca706e036443b6072ee3817163aab96dec41f90fefb7f623930a0caaa53885"}},{"ruleId":"D1","level":"warning","message":{"text":"MaskedTextBox.OnKeyDown (cyclomatic 20): MaskedTextBox.OnKeyDown 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":"src/Avalonia.Controls/MaskedTextBox.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f4370147a794be15dabdd3bebcab49318e6e181ab93c6708bca037670a9eaa"}},{"ruleId":"D1","level":"warning","message":{"text":"TextSelectionHandleCanvas.DragSelectionHandle (cyclomatic 20): TextSelectionHandleCanvas.DragSelectionHandle 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":"src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"55d6181fef2abdce4d12d133261b45a647ac2a5f541e81e484eac9fd26e6a6e2"}},{"ruleId":"D1","level":"warning","message":{"text":"TextBox.OnPointerMoved (cyclomatic 20): TextBox.OnPointerMoved 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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1914}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca3674205252bab2d68146471ca6397fbc46386dca3ed7ddcae30818d794777e"}},{"ruleId":"D1","level":"warning","message":{"text":"HeadlessVncFramebufferSource.HeadlessVncFramebufferSource.ctor (cyclomatic 20): HeadlessVncFramebufferSource.HeadlessVncFramebufferSource.ctor has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to 4 function literals inside it that branch (lines 40, 62, 23, \u2026). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Headless/Avalonia.Headless.Vnc/HeadlessVncFramebufferSource.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ecc717be9c17b55dcd69070b62dfd4e0948b59638090c3b025571e1beb55947"}},{"ruleId":"D1","level":"warning","message":{"text":"SeatListener.Done (cyclomatic 20): SeatListener.Done 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":"src/Avalonia.Wayland/Server/Transient/WaylandTextInputV3.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f5643b2709ef732b7fb94c3dfee84f270996e79621b402b215ae61eaa0bc02"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlRuntimeCompiler.LoadGroupSreCore (cyclomatic 20): AvaloniaXamlIlRuntimeCompiler.LoadGroupSreCore has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 8 of the 20 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 239, 317). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"9194300efb2e983a540a8616c92237177a53da734e68b91ebe90b0f89935b14c"}},{"ruleId":"D1","level":"warning","message":{"text":"Program.Main (cyclomatic 20): Program.Main has cyclomatic complexity 20 (threshold 15). Of this number, 17 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":"samples/ControlCatalog.Desktop/Program.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"e030433ffa576ae3f17b5d9c5878502db62cda9650af156a89adf37b86dbe926"}},{"ruleId":"D1","level":"warning","message":{"text":"CompileAnalyzer.AnalyzePropertyMethods (cyclomatic 20): CompileAnalyzer.AnalyzePropertyMethods 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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4a7f4bc3b1ca9b6635afa39b7527607b5fedb85349123d6d67c35ce8149b61a"}},{"ruleId":"D1","level":"warning","message":{"text":"Win32StorageProvider.ShowFilePickerAsync (cyclomatic 20): Win32StorageProvider.ShowFilePickerAsync has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to one function literal inside it that branches (line 115). 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":"src/Windows/Avalonia.Win32/Win32StorageProvider.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cd84a7ed73309f150b1fb787a1c3b70c7ae0b00f73c2784dcfd884857cc8fb8"}},{"ruleId":"D1","level":"warning","message":{"text":"LeastSquaresSolver.Solve (cyclomatic 19): LeastSquaresSolver.Solve has cyclomatic complexity 19 (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":"src/Avalonia.Base/Input/GestureRecognizers/VelocityTracker.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"da7428befba646a7c7b55429e03096f19fcb4f96d9359d77a014dc85b99120bb"}},{"ruleId":"D1","level":"warning","message":{"text":"Gestures.PointerPressed (cyclomatic 19): Gestures.PointerPressed has cyclomatic complexity 19 (threshold 15). Of this number, 13 points are the body\u0027s own statements and 6 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":"src/Avalonia.Base/Input/Gestures.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"14b7ec88bc797c533063bb0b4b514607fcf98a6b6d0e5258d42d1dcf638cdd6f"}},{"ruleId":"D1","level":"warning","message":{"text":"Layoutable.MeasureCore (cyclomatic 19): Layoutable.MeasureCore 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":"src/Avalonia.Base/Layout/Layoutable.cs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5c6839c78591f7c76aa212cc01cb4d3203042c63259e883ad4538a1786a0ba1"}},{"ruleId":"D1","level":"warning","message":{"text":"TextFormatterImpl.SplitTextRuns (cyclomatic 19): TextFormatterImpl.SplitTextRuns 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"8558412808bcde7231fbb7595f93f551c370e006815e2660eafbb7aa98adf84d"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLineImpl.GetCharacterHitFromDistance (cyclomatic 19): TextLineImpl.GetCharacterHitFromDistance 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc801f44192a622231f72c068de9a788c40f0e0d006c7ab387a18727051dbddc"}},{"ruleId":"D1","level":"warning","message":{"text":"StringSplitter.SplitRespectingBrackets (cyclomatic 19): StringSplitter.SplitRespectingBrackets 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":"src/Avalonia.Base/Utilities/StringSplitter.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d5ff757da9e895b6697558005735954904b79dd025d15a4b8b815b7a5b7d2aa"}},{"ruleId":"D1","level":"warning","message":{"text":"NavigationPage.PopModalAsync (cyclomatic 19): NavigationPage.PopModalAsync 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":"src/Avalonia.Controls/Page/NavigationPage.cs"},"region":{"startLine":1326}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb2544b1bf7171ec7673a7391c2469b4966c9a20df7cdd640ec61c6cfbfe76b"}},{"ruleId":"D1","level":"warning","message":{"text":"Popup.Open (cyclomatic 19): Popup.Open 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":"src/Avalonia.Controls/Primitives/Popup.cs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"443ed626e1aa8bdd78d49f49c1b6864c24bde37a9360cfae4530a1da8dbb8bf2"}},{"ruleId":"D1","level":"warning","message":{"text":"Popup.OnPropertyChanged (cyclomatic 19): Popup.OnPropertyChanged has cyclomatic complexity 19 (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":"src/Avalonia.Controls/Primitives/Popup.cs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"959b8968f461edafac17758a8248c1fe03cdc370fe7e26c5727fa809a02f9eea"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnViewportFractionSwipeGesture (cyclomatic 19): VirtualizingCarouselPanel.OnViewportFractionSwipeGesture 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1192}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb7e8bbef7a9d2553c141f1fbd3e35d88602abf7342a4e92b6a8b7f726c6ca0c"}},{"ruleId":"D1","level":"warning","message":{"text":"Deserializer.DeserializeValue (cyclomatic 19): Deserializer.DeserializeValue 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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1109}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18ec4cd15e1daf00b7de3437f874e925361a6ddfc2e2ee23d2dbcd65fbb4286"}},{"ruleId":"D1","level":"warning","message":{"text":"BrowserDataTransferHelper.TryGetValue (cyclomatic 19): BrowserDataTransferHelper.TryGetValue has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Browser/Avalonia.Browser/BrowserDataTransferHelper.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b85856c8ca1acb4932d05c823402864ca6bfe1268b60daa79d8b194da18a4b"}},{"ruleId":"D1","level":"warning","message":{"text":"SafeArrayRef.ToArray (cyclomatic 19): SafeArrayRef.ToArray has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 2 of the 19 points are its own statements and the rest belongs to one function literal inside it that branches (line 102). 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":"src/Windows/Avalonia.Win32.Automation/Marshalling/SafeArrayRef.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"015684425bfe62eced7508cb6b93555d3af53f082c3c80f9d6dac9460726711d"}},{"ruleId":"D1","level":"warning","message":{"text":"FocusManager.GetFirstFocusableElementInternal (cyclomatic 18): FocusManager.GetFirstFocusableElementInternal 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe1318b06c4676b53eca9b6eaae6274323c3d40b491954b518d28c82260690d2"}},{"ruleId":"D1","level":"warning","message":{"text":"FocusManager.GetLastFocusableElementInternal (cyclomatic 18): FocusManager.GetLastFocusableElementInternal 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"407db84b86ce8d4498aa0426a49adc61cec7b023f890679fbde5eb165c99d856"}},{"ruleId":"D1","level":"warning","message":{"text":"XYFocusAlgorithms.CalculatePrimaryAxisDistance (cyclomatic 18): XYFocusAlgorithms.CalculatePrimaryAxisDistance 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":"src/Avalonia.Base/Input/Navigation/XYFocusAlgorithms.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc95321f391b97db114bc41020578e3f872244c0b2f36ae77bf188f3703b72b"}},{"ruleId":"D1","level":"warning","message":{"text":"Effect.Parse (cyclomatic 18): Effect.Parse 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":"src/Avalonia.Base/Media/Effects/Effect.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9afb5b59f994827b602d829296247c6d24f5fdf354fb58843d7fce49907ca05"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphRun.FindGlyphIndex (cyclomatic 18): GlyphRun.FindGlyphIndex 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"655b2a796b21cccb60b997675390b871b52e865620221a8f958fbcb39fccf919"}},{"ruleId":"D1","level":"warning","message":{"text":"PathMarkupParser.Parse (cyclomatic 18): PathMarkupParser.Parse 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":"src/Avalonia.Base/Media/PathMarkupParser.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbc0d6a303c7fd9ec17efa37ae19365721202b6d3f32814c5a139000b59480ae"}},{"ruleId":"D1","level":"warning","message":{"text":"ShapedBuffer.EnsureClusterCache (cyclomatic 18): ShapedBuffer.EnsureClusterCache 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":"src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"092448b991b00d0a69b1756a85e1613867ccbb4d50e17b550287181104832bd8"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLayout.GetHitTestResult (cyclomatic 18): TextLayout.GetHitTestResult 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":"src/Avalonia.Base/Media/TextFormatting/TextLayout.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"349105e48202ea8c6a85c644228f5b210462f4a6160eea7b2dfafa1cc3fff0be"}},{"ruleId":"D1","level":"warning","message":{"text":"ImmediateRenderer.Render (cyclomatic 18): ImmediateRenderer.Render 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":"src/Avalonia.Base/Rendering/ImmediateRenderer.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1fdc0b3236a64744035865cacd104125ad6b8a2da4b607ea6ba704f7618d73"}},{"ruleId":"D1","level":"warning","message":{"text":"DispatcherPriority.ToString (cyclomatic 18): DispatcherPriority.ToString 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":"src/Avalonia.Base/Threading/DispatcherPriority.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"480a47f5aa813ac4e7540ba6515c900634d63fc4d9cb9212cafa78f2ee5415fd"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIncludeTransformer.Transform (cyclomatic 18): AvaloniaXamlIncludeTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlIncludeGroupTransformer.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"747f9e62204f180fba7368ce1f5d1a32a36eecb9e83b6b2858d21c1f3db5eccd"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorPickerHelpers.IncrementColorComponent (cyclomatic 18): ColorPickerHelpers.IncrementColorComponent 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"be85da1ca327735263dcb6de240065b0bbfd2877e48032695b2933638da51649"}},{"ruleId":"D1","level":"warning","message":{"text":"AutoCompleteBox.ItemsCollectionChanged (cyclomatic 18): AutoCompleteBox.ItemsCollectionChanged 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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1448}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d2b01804075a06c6948c4781ceaec196e5e4a72edd6f92b07e981976655cc5b"}},{"ruleId":"D1","level":"warning","message":{"text":"Button.OnPropertyChanged (cyclomatic 18): Button.OnPropertyChanged 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":"src/Avalonia.Controls/Button.cs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a37736d5d67ad38cd5af1b41ec3af6c0f0809caa4de24c9aed535968fbb6e4b"}},{"ruleId":"D1","level":"warning","message":{"text":"CalendarItem.Cell_MouseLeftButtonDown (cyclomatic 18): CalendarItem.Cell_MouseLeftButtonDown 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":903}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff0cd8b6c82611797a40dadb126036cd545ed5899ace80cfd57e4b1a4f8e291"}},{"ruleId":"D1","level":"warning","message":{"text":"CalendarItem.Cell_MouseLeftButtonUp (cyclomatic 18): CalendarItem.Cell_MouseLeftButtonUp 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0404b88eefdc7e7ec3628f33b5a8c988ce4b832e47b796dfd3862b33cba1437"}},{"ruleId":"D1","level":"warning","message":{"text":"RadioButtonGroupManager.OnCheckedChanged (cyclomatic 18): RadioButtonGroupManager.OnCheckedChanged 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":"src/Avalonia.Controls/RadioButtonGroupManager.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a819e90595f4edb5adbb64f18565b2d0cfeba18c2e13c536d637bfee852eb71"}},{"ruleId":"D1","level":"warning","message":{"text":"GraphNode.GetBoundingSize (cyclomatic 18): GraphNode.GetBoundingSize 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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"43bab2238a31e38215daafb8792b723fc0c5e1c7b51859fbaea4ea89971b8b34"}},{"ruleId":"D1","level":"warning","message":{"text":"Slider.OnKeyDown (cyclomatic 18): Slider.OnKeyDown 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":"src/Avalonia.Controls/Slider.cs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"c34ed3657103d12319e3e4f5e54128de565adb63bfe9fe800481b66eebedc19d"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnItemsChanged (cyclomatic 18): VirtualizingCarouselPanel.OnItemsChanged 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"88add68896399b932963411271c8f01ef9ac9acb2eaa6df8caf91addd477299d"}},{"ruleId":"D1","level":"warning","message":{"text":"Window.ShowCore (cyclomatic 18): Window.ShowCore 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":975}}}],"partialFingerprints":{"codehealthFindingId/v1":"d31246bcc4f7d6414ff666054f77ad91e95f9019a8db866302768e624aa12cd8"}},{"ruleId":"D1","level":"warning","message":{"text":"AndroidScreen.Refresh (cyclomatic 18): AndroidScreen.Refresh 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":"src/Android/Avalonia.Android/Platform/AndroidScreens.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac213c6b6d25d4c764a4841babf0d1632edd7147e1a431de695150ee729f699"}},{"ruleId":"D1","level":"warning","message":{"text":"X11Window.ScheduleInput (cyclomatic 18): X11Window.ScheduleInput 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"c662b2c14751cc6ffc5b3dc61e0417e321c0c3d43ebe96adc8f49aee62af48f9"}},{"ruleId":"D1","level":"warning","message":{"text":"StaticResourceExtension.ProvideValue (cyclomatic 18): StaticResourceExtension.ProvideValue 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":"src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ccc662c46904e508eae6d0504faef0d6687a62a2a4d5993f5c94efeee749303"}},{"ruleId":"D1","level":"warning","message":{"text":"DrawingContextImpl.ConfigureGradientBrush (cyclomatic 18): DrawingContextImpl.ConfigureGradientBrush 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":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":910}}}],"partialFingerprints":{"codehealthFindingId/v1":"f765be6ea5c0f9736c7938b2fa180f25e802cec3328e23bb5377bca1fed884e1"}},{"ruleId":"D1","level":"warning","message":{"text":"AngleWin32EglDisplay.CreateD3D11Display (cyclomatic 18): AngleWin32EglDisplay.CreateD3D11Display 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":"src/Windows/Avalonia.Win32/OpenGl/Angle/AngleWin32EglDisplay.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"c62b700f1dc51211b1c95a2510863c689f52965237c47f10767f3bb30319a315"}},{"ruleId":"D1","level":"warning","message":{"text":"Rotate3DTransition.Start (cyclomatic 17): Rotate3DTransition.Start 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":"src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"676cabf105d3c82a48ebb6b4d8b474aa5a41fa280c9fa55f716422100b8efcdf"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultConverter.TryConvert (cyclomatic 17): DefaultConverter.TryConvert 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":"src/Avalonia.Base/Data/Core/TargetTypeConverter.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2f96c62280d7563692a3ff4392e233f98fe1a3b8d2df243671c5fa0688a649"}},{"ruleId":"D1","level":"warning","message":{"text":"FocusManager.CanProcessTabStop (cyclomatic 17): FocusManager.CanProcessTabStop 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":966}}}],"partialFingerprints":{"codehealthFindingId/v1":"202c825b8a3132c99d8a3b279cde65c31872eda3827cc4d730641d21e6d5e689"}},{"ruleId":"D1","level":"warning","message":{"text":"FontCollectionBase.TryGetGlyphTypeface (cyclomatic 17): FontCollectionBase.TryGetGlyphTypeface 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"054f8f158deaec73ec2da6337bb7060fcd7756ac9c7abea78bbe417f3d3a8f6b"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphTypeface.TryGetGlyphMetrics (cyclomatic 17): GlyphTypeface.TryGetGlyphMetrics 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":"src/Avalonia.Base/Media/GlyphTypeface.cs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fcd9ceb89f4e2f606cc222e89fcf2c7562bd14e7e49862dd56cdf9f20020faa"}},{"ruleId":"D1","level":"warning","message":{"text":"PathMarkupParser.ReadArgument (cyclomatic 17): PathMarkupParser.ReadArgument 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":"src/Avalonia.Base/Media/PathMarkupParser.cs"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"d17677ba3f01d11fb8b4d0d0eddf6a863bf7f8d428ccc7bcde332fe73e7c1532"}},{"ruleId":"D1","level":"warning","message":{"text":"TextDecoration.Draw (cyclomatic 17): TextDecoration.Draw 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":"src/Avalonia.Base/Media/TextDecoration.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd8326ad80192fb7cf60bd5a563d67c4f242731b3fd757900ad851397d6a4240"}},{"ruleId":"D1","level":"warning","message":{"text":"InterWordJustification.Justify (cyclomatic 17): InterWordJustification.Justify 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":"src/Avalonia.Base/Media/TextFormatting/InterWordJustification.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8dfc1d5d6b5dc162c24c40f58b1e6c7b524abcff1a5414d5a3c21daf9821de8"}},{"ruleId":"D1","level":"warning","message":{"text":"LineBreakEnumerator.LB28a (cyclomatic 17): LineBreakEnumerator.LB28a 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":1255}}}],"partialFingerprints":{"codehealthFindingId/v1":"678e75e9530fc9669fc064b5f2de1a182fa0440687d4e459013345f2c6d0915f"}},{"ruleId":"D1","level":"warning","message":{"text":"UnicodeTrieBuilder.CompactData (cyclomatic 17): UnicodeTrieBuilder.CompactData has cyclomatic complexity 17 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"188d80aa742a40dc3ef8a676857130076b4b063c015238ed82d9274df888aa63"}},{"ruleId":"D1","level":"warning","message":{"text":"TokenParser.TryParseCall (cyclomatic 17): TokenParser.TryParseCall 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":"src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"9365dfeedafe7490c61e838940d27434f811c17a3a99bf9b502658e803c65d6c"}},{"ruleId":"D1","level":"warning","message":{"text":"Calendar.ProcessTapRangeSelection (cyclomatic 17): Calendar.ProcessTapRangeSelection 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1495}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e3e629188a778c0d3685afadf42b2fc6b629f805735e897b3b769f7fd5b7577"}},{"ruleId":"D1","level":"warning","message":{"text":"CarouselPage.OnKeyDown (cyclomatic 17): CarouselPage.OnKeyDown 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":"src/Avalonia.Controls/Page/CarouselPage.cs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e8b4d4356a4b81e48e15092f6d50f899bb1a8ebd24ff8f5a9cf9014dc3e1b52"}},{"ruleId":"D1","level":"warning","message":{"text":"TextSelectionHandleCanvas.EnsureVisible (cyclomatic 17): TextSelectionHandleCanvas.EnsureVisible 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":"src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a580a357065ffa1b7aa3e3c40b485664448c78b7e2ecf7167141d48123b044"}},{"ruleId":"D1","level":"warning","message":{"text":"RefreshVisualizer.UpdateContent (cyclomatic 17): RefreshVisualizer.UpdateContent 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":"src/Avalonia.Controls/PullToRefresh/RefreshVisualizer.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc69ce772172fb2536a4e26e9971381467bbd6e50404e12ec53a9c1e744018c"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeView.GetContainerInDirection (cyclomatic 17): TreeView.GetContainerInDirection 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":"src/Avalonia.Controls/TreeView.cs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c5f8a9e778fa138bc6f6436a30ea6c2c1498c62e79401e987fd7993fb3f01aa"}},{"ruleId":"D1","level":"warning","message":{"text":"StringUtils.IsEndOfWord (cyclomatic 17): StringUtils.IsEndOfWord has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Utils/StringUtils.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"30eb6987ed0336a55471007d6a30d10d3f680b942da7c89f348838c7304193ea"}},{"ruleId":"D1","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnSwipeGestureEnded (cyclomatic 17): VirtualizingCarouselPanel.OnSwipeGestureEnded 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1400}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda96f4df145b4aac5b65f652a6dd44c05eb7c0fd37decb113cebc400cadc5c0"}},{"ruleId":"D1","level":"warning","message":{"text":"AtSpiNode.OnPeerPropertyChanged (cyclomatic 17): AtSpiNode.OnPeerPropertyChanged 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":"src/Avalonia.FreeDesktop.AtSpi/AtSpiNode.cs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"3782b923de0a527bb341660325755aaf08bd49f88afe113c55a352dd43e63c7b"}},{"ruleId":"D1","level":"warning","message":{"text":"GlxDisplay.GlxDisplay.ctor (cyclomatic 17): GlxDisplay.GlxDisplay.ctor 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":"src/Avalonia.X11/Glx/GlxDisplay.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d85757d4dfa8a87564ec305b11a401b68b8af1857b34c2b4d5402dba685d439"}},{"ruleId":"D1","level":"warning","message":{"text":"X11Window.Cleanup (cyclomatic 17): X11Window.Cleanup 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":1110}}}],"partialFingerprints":{"codehealthFindingId/v1":"6076aa5e66c72f66e6c1ae274a8edf2f9b4d823fc8ec3d0978c55e08c792653e"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.Resize (cyclomatic 17): WindowImpl.Resize 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e2620a9558b56767923f22dd80695da5eca90b9d7165e2d9e05bd7c92e26dd"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.HitTestNCA (cyclomatic 17): WindowImpl.HitTestNCA 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":"src/Windows/Avalonia.Win32/WindowImpl.CustomCaptionProc.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"50d47d4057639f3e0a40a11cb0f77b75373c47502afc9b246c8ff73ef305b599"}},{"ruleId":"D1","level":"warning","message":{"text":"Animation.InterpretKeyframes (cyclomatic 16): Animation.InterpretKeyframes 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":"src/Avalonia.Base/Animation/Animation.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"23b5a0cad7c7aaba78a93856a55c89832574dc564b4a471a4737d24ac28168e6"}},{"ruleId":"D1","level":"warning","message":{"text":"PageSlide.Update (cyclomatic 16): PageSlide.Update has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Animation/PageSlide.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef11107e7fd98d994249fc5ba9604c480a77ac6ecfe820ab8bd858a988c54d4"}},{"ruleId":"D1","level":"warning","message":{"text":"BindingExpressionVisitor.VisitMethodCall (cyclomatic 16): BindingExpressionVisitor.VisitMethodCall 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":"src/Avalonia.Base/Data/Core/Parsers/BindingExpressionVisitor.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4bae4a8df06b88311d5a9f2e3c8c14f388b533d46cbab5fa906f7b9e1b737b3"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyboardDevice.ProcessRawEvent (cyclomatic 16): KeyboardDevice.ProcessRawEvent 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":"src/Avalonia.Base/Input/KeyboardDevice.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7ac80182cda13719489ced52ac7ffbe9f9fa35ae7e8bbea3187957308abdec"}},{"ruleId":"D1","level":"warning","message":{"text":"TouchDevice.ProcessRawEvent (cyclomatic 16): TouchDevice.ProcessRawEvent 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":"src/Avalonia.Base/Input/TouchDevice.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"755c36ad13366071e365e3a706d0b584711e102f4771df55e568262fa073ae9a"}},{"ruleId":"D1","level":"warning","message":{"text":"FontManager.TryGetGlyphTypeface (cyclomatic 16): FontManager.TryGetGlyphTypeface 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":"src/Avalonia.Base/Media/FontManager.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"2386bcfa013c2523c4d77c2011f46de44c81eb358c0b4b3e36ecb44286eaf0e6"}},{"ruleId":"D1","level":"warning","message":{"text":"GlyphRun.FindNearestCharacterHit (cyclomatic 16): GlyphRun.FindNearestCharacterHit 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea89a431ae41faf048f529a34e6ee9f5fb459258412921607ee8f3f39080cdc"}},{"ruleId":"D1","level":"warning","message":{"text":"HsvColor.ToRgb (cyclomatic 16): HsvColor.ToRgb 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":"src/Avalonia.Base/Media/HsvColor.cs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"12142c56191f078a2dda6d0a20663344f40f7ea746c3151ba3356f9ebb3b08ca"}},{"ruleId":"D1","level":"warning","message":{"text":"TextCharacters.TryGetShapeableLength (cyclomatic 16): TextCharacters.TryGetShapeableLength 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":"src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"e918b79f185b29f306e995b99e8e2a4ca77ddea2ddb0053da2cf7b77007dd5c6"}},{"ruleId":"D1","level":"warning","message":{"text":"TextEllipsisHelper.Collapse (cyclomatic 16): TextEllipsisHelper.Collapse 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":"src/Avalonia.Base/Media/TextFormatting/TextEllipsisHelper.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"7290c605311767601b5017b33252e57f8b83b84a137ebc708db3ab0deed396f4"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLineImpl.GetDistanceFromCharacterHit (cyclomatic 16): TextLineImpl.GetDistanceFromCharacterHit 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2353eb165c754ac8b1436d758f202d323b1ab85933438b2698033b6ea02e960"}},{"ruleId":"D1","level":"warning","message":{"text":"TextLineImpl.GetPreviousCharacterHit (cyclomatic 16): TextLineImpl.GetPreviousCharacterHit 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0c800c13de2135dfdd56cc5d3c6312c800e26aab9b3a1b1939711a6fb38f706"}},{"ruleId":"D1","level":"warning","message":{"text":"LineBreakEnumerator.LB19 (cyclomatic 16): LineBreakEnumerator.LB19 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"13accaaa14adaa468050cbe758069a2720fecf351cf6059b04363da75b0db411"}},{"ruleId":"D1","level":"warning","message":{"text":"RenderContext.PostSubgraph (cyclomatic 16): RenderContext.PostSubgraph 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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"2522e3e349dc2907dbfbf1697fd3a7e953357b06e83c89386f00de200251e431"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlBindingPathParser.Transform (cyclomatic 16): AvaloniaXamlIlBindingPathParser.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a8e0d16bd08e335d6f015b7b6dfc3385cb706174dfa9d3759ea74dd78b65abd"}},{"ruleId":"D1","level":"warning","message":{"text":"AvaloniaXamlIlDataTemplateWarningsTransformer.Transform (cyclomatic 16): AvaloniaXamlIlDataTemplateWarningsTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataTemplateWarningsTransformer.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb7762cf581ae0e0b6ea02ab958ebffa6c1761f338c5587b9008bf8a9efe75f4"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorSpectrum.UpdateColor (cyclomatic 16): ColorSpectrum.UpdateColor 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"d29fb1589194c2a4735fa0768425953a01d3a0fa13393c4b84af97e22048116d"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandBar.OnPropertyChanged (cyclomatic 16): CommandBar.OnPropertyChanged 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":"src/Avalonia.Controls/CommandBar/CommandBar.cs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca7e2ff07214637ed30f8e3f3ea7798053be3fa4607a0d420b504c10eb3be3c"}},{"ruleId":"D1","level":"warning","message":{"text":"TimePicker.SetGrid (cyclomatic 16): TimePicker.SetGrid 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":"src/Avalonia.Controls/DateTimePickers/TimePicker.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"917b97f8d6a7931901cd34a98ae8cac0f24797a8f4953a416b1a7b6eb08e4990"}},{"ruleId":"D1","level":"warning","message":{"text":"InProcessDragSource.ProcessMouseEvents (cyclomatic 16): InProcessDragSource.ProcessMouseEvents 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":"src/Avalonia.Controls/Platform/InProcessDragSource.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"4de46bd4b210199239badb65a0d4cfcc38153c3bdbaf2e29b3288153bae845b4"}},{"ruleId":"D1","level":"warning","message":{"text":"PanelContainerGenerator.OnItemsChanged (cyclomatic 16): PanelContainerGenerator.OnItemsChanged 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":"src/Avalonia.Controls/Presenters/PanelContainerGenerator.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"1373b0b99ded570028b2b5770a2b0bb475ac4802552c75434f2ce2388eed3994"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectingItemsControl.UpdateSelection (cyclomatic 16): SelectingItemsControl.UpdateSelection 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":"src/Avalonia.Controls/Primitives/SelectingItemsControl.cs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ab42f1dcfb303dcbcec7c291f77b8e87ed08c29c8e26add6b812b000fb3404d"}},{"ruleId":"D1","level":"warning","message":{"text":"StackPanel.GetControl (cyclomatic 16): StackPanel.GetControl 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":"src/Avalonia.Controls/StackPanel.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b3db7a87377630caefea85d203d667fbf530eed85e10597cf7a7748cbbbf379"}},{"ruleId":"D1","level":"warning","message":{"text":"Window.MeasureOverride (cyclomatic 16): Window.MeasureOverride 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"6598797256f3dce1b3c97f177c9f8c2555aff5cdb54916b5e1bc24fed881799a"}},{"ruleId":"D1","level":"warning","message":{"text":"WrapPanel.GetControl (cyclomatic 16): WrapPanel.GetControl 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":"src/Avalonia.Controls/WrapPanel.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc57b64e6c1385ea69676a22e05201aa6e70e921159fab9759f4e5cf800fed0c"}},{"ruleId":"D1","level":"warning","message":{"text":"Serializer.SerializeMember (cyclomatic 16): Serializer.SerializeMember 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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"69635ffcd9615509a8b1454082c3e51b9c5e3fd040bfd3fcf0851aae114ff327"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowImpl.ApplyConfigureBatch (cyclomatic 16): WindowImpl.ApplyConfigureBatch 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":"src/Avalonia.Wayland/WindowImpl.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d35a10bcde7536caae192c3f10dea169dcdf7183a9dd402d83b6a8dbd2e7ee1"}},{"ruleId":"D1","level":"warning","message":{"text":"GlxDisplay.CreateContext (cyclomatic 16): GlxDisplay.CreateContext 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":"src/Avalonia.X11/Glx/GlxDisplay.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e61af0ca83a8416c037b29fcd111a495b744fca47c8a3acf7db12e24fa83ba"}},{"ruleId":"D1","level":"warning","message":{"text":"X11Info.X11Info.ctor (cyclomatic 16): X11Info.X11Info.ctor 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":"src/Avalonia.X11/X11Info.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43849d4716bf18207fd88a951e94f78b5d2f56f7ba0f0157573a054a15bfb4c"}},{"ruleId":"D1","level":"warning","message":{"text":"DrmOutput.Init (cyclomatic 16): DrmOutput.Init 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":"src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6b5fbe3f89ebad7c740f425ee209bfc97df534ca44630e78c42a99425bf8173"}},{"ruleId":"D1","level":"warning","message":{"text":"JSONParser.ParseAnonymousValue (cyclomatic 16): JSONParser.ParseAnonymousValue 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":"src/tools/Avalonia.Designer.HostApp/TinyJson.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e2a3b461f6c55096e9a56be5dd350aabfeb60af30979183c9af46c39606b9b"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlCompilerTaskExecutor.CompileCore (cognitive 183): XamlCompilerTaskExecutor.CompileCore has cognitive complexity 183 (threshold 15). Of this number, 167 points are the body\u0027s own statements and 16 belong to 7 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":"src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe87b2a398f25e3c098020a0f1cf4ed7b07f1c01f88b2cdd815c0d84bd613b4"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.AppWndProc (cognitive 174): WindowImpl.AppWndProc has cognitive complexity 174 (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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"944ae9a263168584509f9b42731d9181a815cea196c40376a62123302803ca8e"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiAlgorithm.ProcessIsolatedRunSequence (cognitive 148): BidiAlgorithm.ProcessIsolatedRunSequence has cognitive complexity 148 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":856}}}],"partialFingerprints":{"codehealthFindingId/v1":"d271fa39ecde6f929351f9702de2e9a57274b1162872ac5772f7d955e25be9e5"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.SetFinalSizeMaxDiscrepancy (cognitive 148): Grid.SetFinalSizeMaxDiscrepancy has cognitive complexity 148 (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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1785}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b6eccd36564ccbc3488836057445d1447d685d63b3b622830bc59f926bab6a4"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionVariant.GetProperty (cognitive 140): ExpressionVariant.GetProperty has cognitive complexity 140 (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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"79a8d1c336419cbb9cdb1918eea82079a1d925c0323a3d696d8323e44276c139"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlIlBindingPathHelper.TransformBindingPath (cognitive 136): XamlIlBindingPathHelper.TransformBindingPath has cognitive complexity 136 (threshold 15). Of this number, 128 points are the body\u0027s own statements and 8 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bc1866c34b9f131b0a4256d68cd8a37c06568252d5f755b33ba6364e65431d4"}},{"ruleId":"D2","level":"warning","message":{"text":"GetProcAddressInitializationGenerator.Initialize (cognitive 120): GetProcAddressInitializationGenerator.Initialize has cognitive complexity 120 (threshold 15). Most of this is not in the body itself: 0 of the 120 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 35, 24). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/DevGenerators/GetProcAddressInitialization.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ea5a85d3c6c1157391da70913d5708c45ffe054a01480d803da3486cea63e2b"}},{"ruleId":"D2","level":"warning","message":{"text":"TextPathSegmentEllipsis.Collapse (cognitive 119): TextPathSegmentEllipsis.Collapse has cognitive complexity 119 (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":"src/Avalonia.Base/Media/TextPathSegmentEllipsis.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6b4b417de03e482508025656950d72366581d28dcf28ee68b1adae3c56233ef"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlLanguageParseIntrinsics.TryConvert (cognitive 118): AvaloniaXamlIlLanguageParseIntrinsics.TryConvert has cognitive complexity 118 (threshold 15). Of this number, 117 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguageParseIntrinsics.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"1567c249d9be2708e8288d36462b16e9045f74603321171e8dcf65f125899491"}},{"ruleId":"D2","level":"warning","message":{"text":"TextFormatterImpl.PerformTextWrapping (cognitive 113): TextFormatterImpl.PerformTextWrapping has cognitive complexity 113 (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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"69eed859d074e58a5c81d3278aa028390dc18229a74b14fca9c69304a8989999"}},{"ruleId":"D2","level":"warning","message":{"text":"TextBox.OnKeyDown (cognitive 110): TextBox.OnKeyDown has cognitive complexity 110 (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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1361}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff36d02ff6d7ea99e4b8362336c7c7df3146ee798f5a34732f1d31abc7367e41"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.ResolveStarMaxDiscrepancy (cognitive 102): Grid.ResolveStarMaxDiscrepancy has cognitive complexity 102 (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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1451}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4c777cf4c8249f9db207399fe43fc189993df0e7575192ba54b56ae4a351972"}},{"ruleId":"D2","level":"warning","message":{"text":"XI2Manager.OnDeviceEvent (cognitive 89): XI2Manager.OnDeviceEvent has cognitive complexity 89 (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":"src/Avalonia.X11/XI2Manager.cs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"edeae4f54ccfc4ebb89e9b20e005e6a1b8475ce736e33a58d39e4cbf3e844dd2"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLeadingPrefixCharacterEllipsis.Collapse (cognitive 87): TextLeadingPrefixCharacterEllipsis.Collapse has cognitive complexity 87 (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":"src/Avalonia.Base/Media/TextFormatting/TextLeadingPrefixCharacterEllipsis.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"10ecc96cc0c2a4ef1783da4f6f4896bf6c888c6463970e9c1a4af8c57ea6e27a"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.GetPreviousTabStop (cognitive 84): FocusManager.GetPreviousTabStop has cognitive complexity 84 (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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"24b30acbe7b81d3c2c318291d3c3b1b426c2dbd521ba35d6d8b558b324b041c0"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlOptionMarkupExtensionTransformer.Transform (cognitive 84): AvaloniaXamlIlOptionMarkupExtensionTransformer.Transform has cognitive complexity 84 (threshold 15). Of this number, 81 points are the body\u0027s own statements and 3 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlOptionMarkupExtensionTransformer.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"091928bcdc41cd1b13fcbaf0236b0085efc48987beac4cddcdada93e2bc5ff1d"}},{"ruleId":"D2","level":"warning","message":{"text":"Graph.MeasureChild (cognitive 84): Graph.MeasureChild has cognitive complexity 84 (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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f49a4109f73c82269f69706151ea45a93f17a3abd1de0f2b238236df03e1e80"}},{"ruleId":"D2","level":"warning","message":{"text":"X11Window.OnEvent (cognitive 82): X11Window.OnEvent has cognitive complexity 82 (threshold 15). Of this number, 71 points are the body\u0027s own statements and 11 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbacd4a2bc4f1968fa83662711f0d9f60248efb60848c626d9f98a31cfe320d8"}},{"ruleId":"D2","level":"warning","message":{"text":"CrossThreadProxyGenerator.Extract (cognitive 82): CrossThreadProxyGenerator.Extract 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":"src/tools/DevGenerators/CrossThreadProxyGenerator.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18712b93344ebe4251701e50c865890bab7059a48b146e39fe492168356529f"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.GetNextOrPreviousTabStopInternal (cognitive 80): FocusManager.GetNextOrPreviousTabStopInternal 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec5289da464851ec5a272d9e48a6450311297f0bb3a02570b1cbf082b43a314b"}},{"ruleId":"D2","level":"warning","message":{"text":"DrawerPage.UpdateContentSafeAreaPadding (cognitive 74): DrawerPage.UpdateContentSafeAreaPadding 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":878}}}],"partialFingerprints":{"codehealthFindingId/v1":"d875e3b7f40505dfe287a410832ecaa61b8179647c64e491d59bf675ce97143e"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlBindingPathTransformer.Transform (cognitive 73): AvaloniaXamlIlBindingPathTransformer.Transform has cognitive complexity 73 (threshold 15). Of this number, 70 points are the body\u0027s own statements and 3 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"75fb78a9eaa8c0e90cb07048d2fb790cdaab7598ccbf6cffb70f03d6ae21de36"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiAlgorithm.ResolveExplicitEmbeddingLevels (cognitive 72): BidiAlgorithm.ResolveExplicitEmbeddingLevels has cognitive complexity 72 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"921488287d5926d59d688be611fa25fce87e580c722e3ed383a8d5af4c8ee069"}},{"ruleId":"D2","level":"warning","message":{"text":"SpanVector.Set (cognitive 69): SpanVector.Set 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":"src/Avalonia.Base/Utilities/Span.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9032563699ccf082bd3af8178f65520b0b6dc273aa068166a720c2a59d036b"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.GetNextTabStop (cognitive 68): FocusManager.GetNextTabStop 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3202b55c21487a549495714394e5e6d54afe6d6d4262a1526b28125b342f465"}},{"ruleId":"D2","level":"warning","message":{"text":"TextSelectionHandleCanvas.DragSelectionHandle (cognitive 67): TextSelectionHandleCanvas.DragSelectionHandle has cognitive complexity 67 (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":"src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"371742004bf750fa1faff97c5d719b7bea039d8b97d05d3685f4455137d83258"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingStackPanel.UpdateSpecialElementsOnItemsChanged (cognitive 67): VirtualizingStackPanel.UpdateSpecialElementsOnItemsChanged has cognitive complexity 67 (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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea3c21360d549b4a920b43cf9991344914d7f3a52765a2f07161f37d65727959"}},{"ruleId":"D2","level":"warning","message":{"text":"DBusMenuExporterImpl.GetProperty (cognitive 67): DBusMenuExporterImpl.GetProperty has cognitive complexity 67 (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":"src/Avalonia.FreeDesktop/DBusMenuExporter.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc8ee1b674b92380e78a825242f1a82fc148101cd78960a15726a40a5efc2808"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.ProcessSelection (cognitive 66): Calendar.ProcessSelection has cognitive complexity 66 (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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1577}}}],"partialFingerprints":{"codehealthFindingId/v1":"5be61593cf2ed6b9d89cd3efd56bc359a6a0d076def190dd1c915ceed9717782"}},{"ruleId":"D2","level":"warning","message":{"text":"DialogsPage.DialogsPage.ctor (cognitive 66): DialogsPage.DialogsPage.ctor has cognitive complexity 66 (threshold 15). Of this number, 38 points are the body\u0027s own statements and 28 belong to 7 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":"samples/ControlCatalog/Pages/DialogsPage.xaml.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"c855361c624c8d66691a4f48d0678bc1c945a37031a320a8fbf5f5f940849d8e"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPickerHelpers.CreateComponentBitmapAsync (cognitive 65): ColorPickerHelpers.CreateComponentBitmapAsync has cognitive complexity 65 (threshold 15). Most of this is not in the body itself: 2 of the 65 points are its own statements and the rest belongs to one function literal inside it that branches (line 55). 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"da854603dd23fb9510f842769102821a8338cba53000397a4e929788958f84a0"}},{"ruleId":"D2","level":"warning","message":{"text":"VulkanContext.TryCreate (cognitive 63): VulkanContext.TryCreate has cognitive complexity 63 (threshold 15). Of this number, 55 points are the body\u0027s own statements and 8 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":"samples/GpuInterop/VulkanDemo/VulkanContext.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9da4a69ec69745e8c842bdc8a856dc4c8ac29ec803d55164a3c46d9e3aa333"}},{"ruleId":"D2","level":"warning","message":{"text":"JSONParser.ParseValue (cognitive 62): JSONParser.ParseValue has cognitive complexity 62 (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":"src/tools/Avalonia.Designer.HostApp/TinyJson.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"8deeef535f1ee64257851b28bdd0fa8eb3a948e75ec1eb0519fb3b170a36c8f3"}},{"ruleId":"D2","level":"warning","message":{"text":"LineBreakEnumerator.LB25 (cognitive 60): LineBreakEnumerator.LB25 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6e894c1ea5cd9ca3d81af7659f1b0b141809490b0aacc27a6ed49a7b47bf2f5"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.MeasureOverride (cognitive 60): Grid.MeasureOverride 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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8a2b49f989c67fd708ceefce6a90edfebc2e927d63de64ec2e7f8109e540058"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarItem.Cell_MouseLeftButtonDown (cognitive 59): CalendarItem.Cell_MouseLeftButtonDown 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":903}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c950028b02415b9034213b6a42d5379748e94c6ca0a23f229b55fa1f1c42da"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphTypeface.GlyphTypeface.ctor (cognitive 58): GlyphTypeface.GlyphTypeface.ctor 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":"src/Avalonia.Base/Media/GlyphTypeface.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d328de02e41026194faecca493cd8d0c5a615a031ffd5615359dec4777bcb02"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandBar.UpdateDynamicOverflow (cognitive 58): CommandBar.UpdateDynamicOverflow has cognitive complexity 58 (threshold 15). Of this number, 55 points are the body\u0027s own statements and 3 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":"src/Avalonia.Controls/CommandBar/CommandBar.cs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"3edbfe73eb69c7b0b31fcbe363b4cbab9950f9301be3a1fc205d1bc0c7380490"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiPage.NotifyCollection_CollectionChanged (cognitive 58): MultiPage.NotifyCollection_CollectionChanged 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":"src/Avalonia.Controls/Page/MultiPage.cs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae0d077ad4de3396f94a1ff923bc593836d78c9147c755dc7da3d5d381a1094a"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionParser.ParseTillTerminator (cognitive 57): ExpressionParser.ParseTillTerminator 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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionParser.cs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e52a18078eadf3978500ebbb5bc18de93800215203700d6424b41262aa4c17f"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.UpdateWindowProperties (cognitive 57): WindowImpl.UpdateWindowProperties 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":1413}}}],"partialFingerprints":{"codehealthFindingId/v1":"b449aba67e8fe60ea0da286d486da33c3635e14eb900ccaefd7dc379b32c33a3"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.EnsureMinSizeInDefinitionRange (cognitive 56): Grid.EnsureMinSizeInDefinitionRange has cognitive complexity 56 (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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1232}}}],"partialFingerprints":{"codehealthFindingId/v1":"42ad4f9535d31e22d3b865661418d0ef1fd09af1aed360b6517634443642a093"}},{"ruleId":"D2","level":"warning","message":{"text":"GtkSystemDialog.ShowDialog (cognitive 55): GtkSystemDialog.ShowDialog has cognitive complexity 55 (threshold 15). Of this number, 43 points are the body\u0027s own statements and 12 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":"src/Avalonia.X11/NativeDialogs/GtkNativeFileDialogs.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"e80e911d400cf7ae3c4bccbc847e6ed8b3b89c0ae34f5169e2b283db11b9407b"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarDatePicker.OnPropertyChanged (cognitive 54): CalendarDatePicker.OnPropertyChanged 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":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf08088ee1fa9baf45ffa4b83cb31aed5bb128a505c2d852ef3a432ee5bc556e"}},{"ruleId":"D2","level":"warning","message":{"text":"TickBar.Render (cognitive 52): TickBar.Render 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":"src/Avalonia.Controls/TickBar.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"651f788d2eef7cc86a471798efcfc4412155f799c758a269aa424226dc0ecb1b"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnSwipeGesture (cognitive 52): VirtualizingCarouselPanel.OnSwipeGesture 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"75bf281e42440ee41cd2c78bd9110f6cc1fd1c8d9bf11b2ecf246392bca03a07"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlBindingPathParser.ConvertLongFormPropertiesToBindingExpressionNode (cognitive 51): AvaloniaXamlIlBindingPathParser.ConvertLongFormPropertiesToBindingExpressionNode has cognitive complexity 51 (threshold 15). Of this number, 48 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"877821dbaaf43c32503edacdcf64bd47102623868518829fedcca57acfd0cac5"}},{"ruleId":"D2","level":"warning","message":{"text":"TabNavigation.GetPrevTab (cognitive 49): TabNavigation.GetPrevTab has cognitive complexity 49 (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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"16076c5cb7e06e9dc5125566bfcf5dc593e4b5930f0ac31e170872bff79d6019"}},{"ruleId":"D2","level":"warning","message":{"text":"TextEllipsisHelper.Collapse (cognitive 49): TextEllipsisHelper.Collapse has cognitive complexity 49 (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":"src/Avalonia.Base/Media/TextFormatting/TextEllipsisHelper.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"5899a98fe801009afc6e05b6666bae857a81b932054dcbebdaf6bc9a1aaaceae"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollGestureRecognizer.PointerMoved (cognitive 48): ScrollGestureRecognizer.PointerMoved 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":"src/Avalonia.Base/Input/GestureRecognizers/ScrollGestureRecognizer.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"33d123b41ee8b9e7fd4bf42c37057dbde240027c330b7321b0575bbe7ac7619e"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalKeyExtensions.ToQwertyKeySymbol (cognitive 48): PhysicalKeyExtensions.ToQwertyKeySymbol has cognitive complexity 48 (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":"src/Avalonia.Base/Input/PhysicalKeyExtensions.cs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"8149804ba5c7a6b05d1b6f2a9701520052820f37e4148b172eed7eb26cfd33a0"}},{"ruleId":"D2","level":"warning","message":{"text":"TextCharacters.CreateShapeableRun (cognitive 48): TextCharacters.CreateShapeableRun 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":"src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae864f240b31213a6d3ecea10ec34b91b95bd2391d351efbd11cb02994058784"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlMergeResourceGroupTransformer.Transform (cognitive 48): XamlMergeResourceGroupTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlMergeResourceGroupTransformer.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"9333751bf7eb17da3ad9c5f50104ecbacc40ff0a8c9d11d2ede95c01e4c5ae42"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlDataContextTypeTransformer.Transform (cognitive 48): AvaloniaXamlIlDataContextTypeTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cda25dafb0258c499c8a407c378673515350d75b4f753a4bdf8f17fa4f75bf1"}},{"ruleId":"D2","level":"warning","message":{"text":"TextFormatterImpl.SplitTextRuns (cognitive 47): TextFormatterImpl.SplitTextRuns 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea03f1fe588148f3f0322638ad4bec20b44471ac668330943aa9e80aba37874e"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlSelectorTransformer.Transform (cognitive 47): AvaloniaXamlIlSelectorTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a618727e8cef8ac56c3cb125c0036116859db23b872f6c2fd80306778942716"}},{"ruleId":"D2","level":"warning","message":{"text":"Visual.SynchronizeCompositionChildVisuals (cognitive 46): Visual.SynchronizeCompositionChildVisuals has cognitive complexity 46 (threshold 15). Of this number, 44 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":"src/Avalonia.Base/Visual.Composition.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6739700425df2efcb25ae70ac679beaf5550983026fa04b9efc800e5acc3f44"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollContentPresenter.OnScrollGesture (cognitive 46): ScrollContentPresenter.OnScrollGesture has cognitive complexity 46 (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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff7baf790ad0a39a5cc971895282f3f46375b507c8ecbf9da3b563e3c8429e4"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyboardDevice.ProcessRawEvent (cognitive 45): KeyboardDevice.ProcessRawEvent 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":"src/Avalonia.Base/Input/KeyboardDevice.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"b74e6ceeb41dc3c527b4841f6761726f0ba19420077a4d1729de280892b572ef"}},{"ruleId":"D2","level":"warning","message":{"text":"FontCollectionBase.TryAddFontSource (cognitive 44): FontCollectionBase.TryAddFontSource 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef06e260c6e5498d3fadc58a5e0d2bc99f87fae793640d245281ca16f62e280"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlTransformInstanceAttachedProperties.Transform (cognitive 44): AvaloniaXamlIlTransformInstanceAttachedProperties.Transform 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, 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformInstanceAttachedProperties.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e2cefdde4d90859117def7e6a2c68b1a791eb8782e022235e6d83c6427f830"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultMenuInteractionHandler.KeyDown (cognitive 44): DefaultMenuInteractionHandler.KeyDown 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":"src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"a91e72a3978b05571678851d597fa5ff7826a1e46564d4e630a24187e961a5a6"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingStackPanel.OnEffectiveViewportChanged (cognitive 43): VirtualizingStackPanel.OnEffectiveViewportChanged 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":1222}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2d627c21fb85280ce10e137ff64802680f55ef99a1f08d26b735030c52389a"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaList.InsertRange (cognitive 42): AvaloniaList.InsertRange 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":"src/Avalonia.Base/Collections/AvaloniaList.cs"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"224fe36f847b13649b1bb3322d3d332cc2b780ed52abcc8cbd680336f9f3d31d"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphemeEnumerator.MoveNext (cognitive 42): GraphemeEnumerator.MoveNext 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/GraphemeEnumerator.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a9fbce71badca6e78de6ff5b28b567329bed1be08c9e74e2afbf5d3c6a05462"}},{"ruleId":"D2","level":"warning","message":{"text":"LineBreakEnumerator.ExecuteRules (cognitive 42): LineBreakEnumerator.ExecuteRules has cognitive complexity 42 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9868257bc5e73366ac75f3981475858397160c9d22a185938f374f409a438a"}},{"ruleId":"D2","level":"warning","message":{"text":"DrawerPage.OnSwipeGesture (cognitive 42): DrawerPage.OnSwipeGesture 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"15b6f89f600e380a94d312baa5f56a066baaf8ab438f1dbe4099c900e0ba3c57"}},{"ruleId":"D2","level":"warning","message":{"text":"DrawingContextImpl.DrawRectangle (cognitive 42): DrawingContextImpl.DrawRectangle 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":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3226112a233687f948c0c12ffbd5dc11d30ca463145eba5cf85f2909f45571d"}},{"ruleId":"D2","level":"warning","message":{"text":"FormattedText.CombineGeometryRecursive (cognitive 41): FormattedText.CombineGeometryRecursive 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":"src/Avalonia.Base/Media/FormattedText.cs"},"region":{"startLine":1501}}}],"partialFingerprints":{"codehealthFindingId/v1":"af1dbe7ccac4f633c0ab5b699aed2984fe15365d5c721ba29754cc22c240422c"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformOperation.TryInterpolate (cognitive 41): TransformOperation.TryInterpolate 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":"src/Avalonia.Base/Media/Transformation/TransformOperation.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5f83efd89312f785c7d6af08b9efcbc05e109b06891835b40226a2537397d67"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformParser.ParseFunction (cognitive 41): TransformParser.ParseFunction 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":"src/Avalonia.Base/Media/Transformation/TransformParser.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b5b9384200a6ca7f1188d2dea58afcef370cf60c58fe6371bbcf16ff8eea268"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPickerHelpers.FindNextNamedColor (cognitive 41): ColorPickerHelpers.FindNextNamedColor 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b2895fea8542bd900c6dd472e0a441267ab018338f91eec59e15b47ffd629a"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionModel.CommitOperation (cognitive 41): SelectionModel.CommitOperation 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":"src/Avalonia.Controls/Selection/SelectionModel.cs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f0afc3e02491a86ef22ef5bd9038333193733a04b7cc904eef951826f362a3"}},{"ruleId":"D2","level":"warning","message":{"text":"TextBox.OnPointerMoved (cognitive 41): TextBox.OnPointerMoved 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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1914}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a626584fe4bb2e55cd1bd268dbc00e53cea80a1daabd978269cf154ceafcb54"}},{"ruleId":"D2","level":"warning","message":{"text":"FontCollectionBase.TryFindWeightFallback (cognitive 40): FontCollectionBase.TryFindWeightFallback has cognitive complexity 40 (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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":1170}}}],"partialFingerprints":{"codehealthFindingId/v1":"26b08df5b10a73b3e4685d0901289ec57746bd34c4e291d1a461d7ddcc5fcb0c"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLayout.CreateTextLines (cognitive 40): TextLayout.CreateTextLines 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":"src/Avalonia.Base/Media/TextFormatting/TextLayout.cs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"60d80dd451dd7d0277b3c919dc441b5ced7306afe72a10b9ebf3f6c1ea22a83f"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorSpectrum.OnPropertyChanged (cognitive 40): ColorSpectrum.OnPropertyChanged has cognitive complexity 40 (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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f7b4321ce38fca956da0cd19af676b95e21e6e3e9e6e7ced8d57adc101060b"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectedAnimation.RunAnimationCoreAsync (cognitive 40): ConnectedAnimation.RunAnimationCoreAsync has cognitive complexity 40 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 18 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":"src/Avalonia.Controls/Animation/ConnectedAnimation.cs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"d12a867df4da6827ef57bfcca65e160d16a3d6dd318d1ecc67955477b25c6d52"}},{"ruleId":"D2","level":"warning","message":{"text":"DrawerPage.OnPropertyChanged (cognitive 40): DrawerPage.OnPropertyChanged 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d1c0f68f52367d99dc3884f65c3237325b94875ffa2cdbd188579053a31ff7e"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationPage.PopModalAsync (cognitive 40): NavigationPage.PopModalAsync has cognitive complexity 40 (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":"src/Avalonia.Controls/Page/NavigationPage.cs"},"region":{"startLine":1326}}}],"partialFingerprints":{"codehealthFindingId/v1":"06e38f3502e7137127d09c1da07be2e475dfff7c95bd86568788a03cb27b2bbe"}},{"ruleId":"D2","level":"warning","message":{"text":"TabControl.UpdateSelectedContent (cognitive 40): TabControl.UpdateSelectedContent has cognitive complexity 40 (threshold 15). Most of this is not in the body itself: 11 of the 40 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 291, 332, 326). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TabControl.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"13482fbef5bed56d588c72f8e899691e2e04cdb0dea8514082efc49c4e11fe56"}},{"ruleId":"D2","level":"warning","message":{"text":"Win32Icon.LoadIconFromData (cognitive 40): Win32Icon.LoadIconFromData has cognitive complexity 40 (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":"src/Windows/Avalonia.Win32/Interop/Win32Icon.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"8422fafc6383b20b8849686f35a324c766b4c2b56c976c1ac5195717ffd45a04"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.GetFirstFocusableElementInternal (cognitive 39): FocusManager.GetFirstFocusableElementInternal 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"bee640c7430d84f3948b10009ff1e5639550a501c84bda81bae49a8015d00586"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.GetLastFocusableElementInternal (cognitive 39): FocusManager.GetLastFocusableElementInternal 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"963de566dc777c4524a9919791b7a04f13af753173a2d31ed3393670204a9a2b"}},{"ruleId":"D2","level":"warning","message":{"text":"FontManager.TryMatchCharacter (cognitive 39): FontManager.TryMatchCharacter 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":"src/Avalonia.Base/Media/FontManager.cs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc7fab8379ce0c3e8617abbdd7923355eff4007745fb8174bc286fe2b68d9e06"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetCharacterHitFromDistance (cognitive 39): TextLineImpl.GetCharacterHitFromDistance 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6e6a1961e76117ed76ec23942b309b1f3383a3fe6781f70d08ea8a53b74e76b"}},{"ruleId":"D2","level":"warning","message":{"text":"UnicodeTrieBuilder.FindHighStart (cognitive 39): UnicodeTrieBuilder.FindHighStart 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"824ede660ca721307f96cdf50df3d68da48b921d6f9a785d934fe3729c84039e"}},{"ruleId":"D2","level":"warning","message":{"text":"WordBreakEnumerator.IsBoundary (cognitive 39): WordBreakEnumerator.IsBoundary has cognitive complexity 39 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/WordBreakEnumerator.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c698774be01b74db51729b218fbf0ee57ac381833d87e5242f4d1ee70388671"}},{"ruleId":"D2","level":"warning","message":{"text":"DrawingContextImpl.ConfigureGradientBrush (cognitive 39): DrawingContextImpl.ConfigureGradientBrush 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":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":910}}}],"partialFingerprints":{"codehealthFindingId/v1":"47cfd4ba06ff06301d2437767fe61c51ec1f3747be5766eefaffad9322f999e1"}},{"ruleId":"D2","level":"warning","message":{"text":"Layoutable.MeasureCore (cognitive 38): Layoutable.MeasureCore 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":"src/Avalonia.Base/Layout/Layoutable.cs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"212ea02c0b9652bdf183ca4a9eb8e9a558232aa2777a11eb86612665d8246b91"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionVariant.OperatorDeclaration (cognitive 38): ExpressionVariant.OperatorDeclaration has cognitive complexity 38 (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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9b3e2635e26618b9e480afd0ca2e562cf4b37d6b9a1805676649fe9b3eed74"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarItem.Cell_MouseLeftButtonUp (cognitive 38): CalendarItem.Cell_MouseLeftButtonUp 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab7ebd51c6971a80d083fa2faac4dbed0d4075ae4ee632589cb322d7d8ead34d"}},{"ruleId":"D2","level":"warning","message":{"text":"ManagedPopupPositioner.Calculate (cognitive 38): ManagedPopupPositioner.Calculate 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":"src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositioner.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdd8c03d1d3c70b0bd38a0bcc82d2e9d6dce7b6ce1776692df34111cc6a4d200"}},{"ruleId":"D2","level":"warning","message":{"text":"InteractiveLineControl.Render (cognitive 38): InteractiveLineControl.Render 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":"samples/TextTestApp/InteractiveLineControl.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"319e215218b3c6892db7999c47a7644162258e20aeba190fe3e0c0cab618367d"}},{"ruleId":"D2","level":"warning","message":{"text":"FontManager.TryGetGlyphTypeface (cognitive 37): FontManager.TryGetGlyphTypeface 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":"src/Avalonia.Base/Media/FontManager.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dfdaf880509659833f1b345f4d04adfb255090021770fd5626807586a41e23b"}},{"ruleId":"D2","level":"warning","message":{"text":"MediaExtensions.CalculateScaling (cognitive 37): MediaExtensions.CalculateScaling 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":"src/Avalonia.Base/Media/MediaExtensions.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9476921c73f5946fb37a418a843e309ca61d635f9b8d2b17e7142a8d00e349b"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.CreateLineMetrics (cognitive 37): TextLineImpl.CreateLineMetrics 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":1319}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a262f4cd5f81bd47a119098618d45e260b6f2efda975bcc2d81b2caa6f0b104"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorGrammar.ParseNthChildArguments (cognitive 37): SelectorGrammar.ParseNthChildArguments 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":"src/Markup/Avalonia.Markup/Markup/Parsers/SelectorGrammar.cs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa240982119c673de00282c3df9c9b4e73e6700342502dd1980ffff3081dbd21"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollContentPresenter.SnapOffset (cognitive 37): ScrollContentPresenter.SnapOffset 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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":975}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a06a419f7d67e9f68ade91e79b2bd02b780fab446da748145887f245bda302b"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaNameIncrementalGenerator.Initialize (cognitive 37): AvaloniaNameIncrementalGenerator.Initialize has cognitive complexity 37 (threshold 15). Most of this is not in the body itself: 0 of the 37 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 131, 64, 31, \u2026). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameIncrementalGenerator.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bd4aa7ba862842804bc2e057a6037e0b1ff9cb850537ebc3f1739e2588e63c4"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphRun.FindNearestCharacterHit (cognitive 36): GlyphRun.FindNearestCharacterHit 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd04502869854cc4174001fc635c256482117bd6fed1c74189231edda468ab5"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetTextBounds (cognitive 36): TextLineImpl.GetTextBounds 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"d865c27996fc75e6f2bef6146934daae4c0f512ca246c8d8d01d6877489a8895"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetRunAtCharacterIndex (cognitive 36): TextLineImpl.GetRunAtCharacterIndex 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":1235}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a4632da4b6f89f904924b49789c9d4361525f2e7ef6c52b04c94dc725e8d9d8"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlSetterTransformer.Transform (cognitive 36): AvaloniaXamlIlSetterTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSetterTransformer.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"01eaaa8df602ec111795a18fe4a1e3b326002b24127329c7f98a26cd0e3de9a4"}},{"ruleId":"D2","level":"warning","message":{"text":"FontCollectionBase.TryGetGlyphTypeface (cognitive 35): FontCollectionBase.TryGetGlyphTypeface 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c2cab8ca39289388e0ebaa18424d4930182ab050031dcc8c6e5c7d71077e86f"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.UnHighlightDays (cognitive 35): Calendar.UnHighlightDays 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1234}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee435ae38c47db51a9a33bba5c33b754a6ed5333abb6c60fa6c709bc6595bac6"}},{"ruleId":"D2","level":"warning","message":{"text":"RadioButtonGroupManager.OnCheckedChanged (cognitive 35): RadioButtonGroupManager.OnCheckedChanged 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":"src/Avalonia.Controls/RadioButtonGroupManager.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"a78309721381585c082e7cc0a0f1f52dad0353ba926338dfc4234536f13b9d2e"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphNode.GetBoundingSize (cognitive 35): GraphNode.GetBoundingSize 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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d5fd379ee77abf0e0dddf3c3e23f2d068d56a6d2a2978c72f4a67e394e1bf9f"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorParser.Create (cognitive 35): SelectorParser.Create has cognitive complexity 35 (threshold 15). Of this number, 34 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":"src/Markup/Avalonia.Markup/Markup/Parsers/SelectorParser.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfaa2753e9e01cbe486cbabc2516e41908b8289710210bffa91757cf208ba1f3"}},{"ruleId":"D2","level":"warning","message":{"text":"Animatable.OnPropertyChangedCore (cognitive 34): Animatable.OnPropertyChangedCore 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":"src/Avalonia.Base/Animation/Animatable.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1c5e8be5269cadac0c1abb3ff774f30c7aae74a49fddef4a3956d45d644904"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorView.ValidateSelection (cognitive 34): ColorView.ValidateSelection 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":"src/Avalonia.Controls.ColorPicker/ColorView/ColorView.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"5596df535ccdb04417eaa44997e4caa1527541a33274cb43075b9db6eaf13e32"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarItem.SetCalendarDayButtons (cognitive 34): CalendarItem.SetCalendarDayButtons 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0049a74ccf40181be63b81e286a504853c4469ed5026c8870ffec28a2648ca8"}},{"ruleId":"D2","level":"warning","message":{"text":"CompileAnalyzer.RegisterInitializer_Invocation (cognitive 34): CompileAnalyzer.RegisterInitializer_Invocation has cognitive complexity 34 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 6 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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"775e5d6b719b01c62dc3e452be8d49db9ae5ab7db117eedb12f47f9035519581"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerCompositionTarget.Render (cognitive 33): ServerCompositionTarget.Render has cognitive complexity 33 (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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ec9eb31d1516dc5439a92a4dd957ec085d41505be22d4bc11aef317eb7d1943"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlBindingPathParser.Transform (cognitive 33): AvaloniaXamlIlBindingPathParser.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5a28a6752513df5330b21d6ea428755ac38e9b39b83750ed24e9789caacca8e"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.ProcessTapRangeSelection (cognitive 33): Calendar.ProcessTapRangeSelection 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1495}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ceddd57634196471fc57410cea8a80226932ecacfcf89daecf5bd1c288c2b9"}},{"ruleId":"D2","level":"warning","message":{"text":"CompileAnalyzer.RegisterAvaloniaPropertySymbols (cognitive 33): CompileAnalyzer.RegisterAvaloniaPropertySymbols has cognitive complexity 33 (threshold 15). Most of this is not in the body itself: 4 of the 33 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 147, 239, 189, \u2026). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ed95c45f65e53c055e15da2088bd67f6d56e1a7d93d15ff3d246c3e465a99f6"}},{"ruleId":"D2","level":"warning","message":{"text":"AngleWin32EglDisplay.CreateD3D11Display (cognitive 33): AngleWin32EglDisplay.CreateD3D11Display 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":"src/Windows/Avalonia.Win32/OpenGl/Angle/AngleWin32EglDisplay.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"84bfce66aee87bd013ee3017320897d81a104ee55e719afb59f00756d572299e"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.CanProcessTabStop (cognitive 32): FocusManager.CanProcessTabStop 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":966}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cef61dd2ed055265515355a90eded5472f640240e529bbfa043bd98ef656ef8"}},{"ruleId":"D2","level":"warning","message":{"text":"UnicodeTrieBuilder.SetRange (cognitive 32): UnicodeTrieBuilder.SetRange 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b83c44dada1acf30ef4b6bd14bdd26a99eb76bb747e834f18031fe2e6c7324"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorSpectrum.UpdateEllipse (cognitive 32): ColorSpectrum.UpdateEllipse 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"65be4234bc9f61c48d71bee7d7331a0f5f17f0bfa1b459b62d613113ceaecc59"}},{"ruleId":"D2","level":"warning","message":{"text":"Button.OnPropertyChanged (cognitive 32): Button.OnPropertyChanged 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":"src/Avalonia.Controls/Button.cs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"333b43933c17005aac01b4a08d262283929249818a3ae646d02cee2df263cf6e"}},{"ruleId":"D2","level":"warning","message":{"text":"LayoutTransformControl.ComputeLargestTransformedSize (cognitive 32): LayoutTransformControl.ComputeLargestTransformedSize has cognitive complexity 32 (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":"src/Avalonia.Controls/LayoutTransformControl.cs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7aad77de12ff1bf7051b82e0e54d87a521e6cbf6db61c67f08991ace5fc1e6"}},{"ruleId":"D2","level":"warning","message":{"text":"TableViewLayoutHelper.UpdateActualWidths (cognitive 32): TableViewLayoutHelper.UpdateActualWidths 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":"src/Avalonia.Controls/Presenters/TableViewLayoutHelper.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"d059a013134528a3af438728d1385e319ef27e9ea8914853078b4b4dcea6a137"}},{"ruleId":"D2","level":"warning","message":{"text":"AdornerHelper.CalculateAdornerClip (cognitive 32): AdornerHelper.CalculateAdornerClip 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":"src/Avalonia.Controls/Primitives/AdornerHelper.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e1e9b0daa3d49f19279f9af0b0fc463731c66f36ec65ab29e4a8db8c6b1ed30"}},{"ruleId":"D2","level":"warning","message":{"text":"Generator.GenerateClass (cognitive 32): Generator.GenerateClass 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":"src/tools/DevGenerators/CompositionGenerator/Generator.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7419c105a9810ad62fe91621b5e409177415b0e10984ecfc553c1228b47af9c7"}},{"ruleId":"D2","level":"warning","message":{"text":"SbomGenerator.AddPackageContentComponents (cognitive 31): SbomGenerator.AddPackageContentComponents 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":"nukebuild/SbomGenerator.cs"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"871bc87b9dc8d1c2448948b347ac2af8ebd81181e3fb9ab566ac3f1e0b4e22fa"}},{"ruleId":"D2","level":"warning","message":{"text":"Effect.Parse (cognitive 31): Effect.Parse 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":"src/Avalonia.Base/Media/Effects/Effect.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"68eb33dfc805614baf9a08d180e8a5692abf1bf61ef5cc738629a64c157febce"}},{"ruleId":"D2","level":"warning","message":{"text":"UnicodeTrieBuilder.CompactData (cognitive 31): UnicodeTrieBuilder.CompactData has cognitive complexity 31 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"892ef39d888fc954de9a252ece549e6ca05828fc3a561540e0d1c02b44d7afd7"}},{"ruleId":"D2","level":"warning","message":{"text":"CDirtyRegion2.GetUninflatedDirtyRegions (cognitive 31): CDirtyRegion2.GetUninflatedDirtyRegions 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":"src/Avalonia.Base/Rendering/Composition/Server/DirtyRects/MultiDirtyRectTracker.CDirtyRegion.cs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ba0d95ff135622777a1ed76173b4b3f4e6e0964845e9322818486817e15bc6"}},{"ruleId":"D2","level":"warning","message":{"text":"SixItemList.IndexOf (cognitive 31): SixItemList.IndexOf 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"1984da77c0267a2dc15a6e1ae8958d079559982d0a2c49c33d29f4778da37a19"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyParser.Parse (cognitive 31): PropertyParser.Parse 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":"src/Markup/Avalonia.Markup.Xaml/Parsers/PropertyParser.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdb6101bcb56703fc85f6c92c8172ad4ba57649fad2ec068c5392f9fa806e6f1"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPickerHelpers.IncrementColorComponent (cognitive 31): ColorPickerHelpers.IncrementColorComponent 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"86553d36754bf91b739e71154a78e45a046b6fe072db129c87a058adb5564dcd"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarItem.SetButtonState (cognitive 31): CalendarItem.SetButtonState 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f4b01adcdf6f344c88e70763345b9af038b2b166007a0e521853434628ac4f5"}},{"ruleId":"D2","level":"warning","message":{"text":"MaskedTextBox.OnKeyDown (cognitive 31): MaskedTextBox.OnKeyDown 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":"src/Avalonia.Controls/MaskedTextBox.cs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"459da9544205d255200688ccb685ade9316fe9393baa9bf31175b42057f101ca"}},{"ruleId":"D2","level":"warning","message":{"text":"MaskedTextBox.OnPropertyChanged (cognitive 31): MaskedTextBox.OnPropertyChanged 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":"src/Avalonia.Controls/MaskedTextBox.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"7163ef02c91713ac6d92885a218544f3ba130b0bc74dc64b7a84b13f306739ee"}},{"ruleId":"D2","level":"warning","message":{"text":"TextSelectionHandleCanvas.ShowFlyout (cognitive 31): TextSelectionHandleCanvas.ShowFlyout 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":"src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"27dfdc3d59eff9ced138329bd856cbba5d30f84f55dc2fb456c510db643ef8f8"}},{"ruleId":"D2","level":"warning","message":{"text":"RefreshVisualizer.InteractionRatioObserver (cognitive 31): RefreshVisualizer.InteractionRatioObserver 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":"src/Avalonia.Controls/PullToRefresh/RefreshVisualizer.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"330634206b95943f3d08d4326f40457699a8535f89a789cf9c3e95980703e2b4"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectableTextBlock.OnPointerPressed (cognitive 31): SelectableTextBlock.OnPointerPressed 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":"src/Avalonia.Controls/SelectableTextBlock.cs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d546f4b9d745d0d4315172998149d0bbb144ba1f32ca84f9d7be7dda488b642"}},{"ruleId":"D2","level":"warning","message":{"text":"EnumMemberDictionaryGenerator.Initialize (cognitive 31): EnumMemberDictionaryGenerator.Initialize has cognitive complexity 31 (threshold 15). Most of this is not in the body itself: 0 of the 31 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 33, 21, 29). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/tools/DevGenerators/EnumMemberDictionaryGenerator.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"5be72df37a27f5e918e1edc3b54c20d2bd4b146e863f8a9d48fe3849c49a7da4"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.CustomCaptionProc (cognitive 31): WindowImpl.CustomCaptionProc 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":"src/Windows/Avalonia.Win32/WindowImpl.CustomCaptionProc.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b13ce11a73335f1ca202418301dcff4dc41512ff6fce17ffc6a5f05589cde47"}},{"ruleId":"D2","level":"warning","message":{"text":"Animation.InterpretKeyframes (cognitive 30): Animation.InterpretKeyframes has cognitive complexity 30 (threshold 15). Of this number, 29 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":"src/Avalonia.Base/Animation/Animation.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddc2d3d02fa07960f07aeb15a5345e1f0360ab5cdbaec6b5c0b3e7d910c4510c"}},{"ruleId":"D2","level":"warning","message":{"text":"PageSlide.Update (cognitive 30): PageSlide.Update 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":"src/Avalonia.Base/Animation/PageSlide.cs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ea3eeecd9cd57cbf5faa506967479b3e653a316b62a8b908d292356139fe041"}},{"ruleId":"D2","level":"warning","message":{"text":"LeastSquaresSolver.Solve (cognitive 30): LeastSquaresSolver.Solve has cognitive complexity 30 (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":"src/Avalonia.Base/Input/GestureRecognizers/VelocityTracker.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"13f597ba15b1f840833e7dac7c6a35ace0b41e0b2a82aaeea23171bb67b0a2e7"}},{"ruleId":"D2","level":"warning","message":{"text":"CmapTable.Load (cognitive 30): CmapTable.Load 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":"src/Avalonia.Base/Media/Fonts/Tables/Cmap/CmapTable.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d459133667b758a7bc6c6a9b86f9f91eb4700535ad694f74d2c2a0f2bee002b"}},{"ruleId":"D2","level":"warning","message":{"text":"InterWordJustification.Justify (cognitive 30): InterWordJustification.Justify 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":"src/Avalonia.Base/Media/TextFormatting/InterWordJustification.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e26526c42308aa2909c445237c950ad762f0042ee53bdc1163e35311b8d809c"}},{"ruleId":"D2","level":"warning","message":{"text":"TextBox.MoveHorizontal (cognitive 30): TextBox.MoveHorizontal 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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":2144}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded31530bf3ede9d2e87d6f4971865779f67993ccbc1fd445b7256964a05a82d"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeView.SelectedItemsCollectionChanged (cognitive 30): TreeView.SelectedItemsCollectionChanged 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":"src/Avalonia.Controls/TreeView.cs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d881e1af43c1d3f787c29fb17c338ece5131b04872f28a5c3d661ae9688f06a"}},{"ruleId":"D2","level":"warning","message":{"text":"ManagedFileChooserViewModel.Navigate (cognitive 30): ManagedFileChooserViewModel.Navigate has cognitive complexity 30 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 13 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":"src/Avalonia.Dialogs/Internal/ManagedFileChooserViewModel.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f2a113e94825cbebff8a4b8323378d7446345185975978e768cfdfb5c150473"}},{"ruleId":"D2","level":"warning","message":{"text":"WaylandEglDmaBufPlatformGraphics.NegotiateFormats (cognitive 30): WaylandEglDmaBufPlatformGraphics.NegotiateFormats 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":"src/Avalonia.Wayland/Server/Transient/Rendering/WaylandEglDmaBufPlatformGraphics.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b4887988adc3360654160419b08f0dd8dd4a9b5b90f5a5cec08026f9ced3ae1"}},{"ruleId":"D2","level":"warning","message":{"text":"SynchronousXEventWaiter.WaitForEvent (cognitive 30): SynchronousXEventWaiter.WaitForEvent 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":"src/Avalonia.X11/Selections/DragDrop/SynchronousXEventWaiter.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb3394940184ad307e09dbd887be351ddee01d2b35442abc30e4329bb6a76e87"}},{"ruleId":"D2","level":"warning","message":{"text":"X11Window.OnPropertyChange (cognitive 30): X11Window.OnPropertyChange 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"868711e1e6b95aa3512bc94d5ea8a4693cc52de0558f9650d5ef810195340e97"}},{"ruleId":"D2","level":"warning","message":{"text":"UnicodeDataGenerator.GenerateScriptExtensionsDataFile (cognitive 30): UnicodeDataGenerator.GenerateScriptExtensionsDataFile 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":"src/tools/Avalonia.UnicodeTrieGenerator/UnicodeDataGenerator.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b1cf864f1fde5eec2f70e8e0e43a0f2db2885619e16c404a0163a0e9d9502fb"}},{"ruleId":"D2","level":"warning","message":{"text":"RefAssemblyGenerator.ProcessType (cognitive 29): RefAssemblyGenerator.ProcessType 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":"nukebuild/RefAssemblyGenerator.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"0947831fa0e5ce7d641587989168190c898e2e2e903432c57d9fd8ae8c331525"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphRun.GetDistanceFromCharacterHit (cognitive 29): GlyphRun.GetDistanceFromCharacterHit 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"8489ab191df79d78fb66b28954f5f2b52ae910a0ea294f05f1d39146bb233e37"}},{"ruleId":"D2","level":"warning","message":{"text":"InlineDictionary.SetCore (cognitive 29): InlineDictionary.SetCore 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":"src/Avalonia.Base/Utilities/SmallDictionary.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"f155d20fe850b48b5e6f47b0d2acf0cfe225fe4c76dc78bdd6cc22c2141c84f1"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.OnSelectedDateChanged (cognitive 29): Calendar.OnSelectedDateChanged 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"318acc9ae7e3186c578d38233e6bb8fec2a51be5ae991abdf28603cbaa34f87b"}},{"ruleId":"D2","level":"warning","message":{"text":"EglDisplayUtils.InitializeAndGetConfig (cognitive 29): EglDisplayUtils.InitializeAndGetConfig has cognitive complexity 29 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 11 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":"src/Avalonia.OpenGL/Egl/EglDisplayUtils.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"11e951aa7e5dd2fbbf20b57da268fb93bae6ea7480176b3af5604478eca3d338"}},{"ruleId":"D2","level":"warning","message":{"text":"GlxDisplay.GlxDisplay.ctor (cognitive 29): GlxDisplay.GlxDisplay.ctor 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":"src/Avalonia.X11/Glx/GlxDisplay.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"695aa1ec9bfbaea8470794b6e8690051992371f2e4a84a24def6289e5f4de1d3"}},{"ruleId":"D2","level":"warning","message":{"text":"OleDataObjectHelper.ReadDataFromHGlobal (cognitive 29): OleDataObjectHelper.ReadDataFromHGlobal 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":"src/Windows/Avalonia.Win32/OleDataObjectHelper.cs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"3948651ce85881512e508a9a6d7b19848770347f601bcd51c3888332f34676da"}},{"ruleId":"D2","level":"warning","message":{"text":"Pointer.Capture (cognitive 28): Pointer.Capture 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":"src/Avalonia.Base/Input/Pointer.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"668e50aac07cb30fee1476d64e552847d6499cf0a3f16f4b3d581ecdc73ddf9f"}},{"ruleId":"D2","level":"warning","message":{"text":"TouchDevice.ProcessRawEvent (cognitive 28): TouchDevice.ProcessRawEvent 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":"src/Avalonia.Base/Input/TouchDevice.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"48325c418d605841d37242148b7c2888f567c2e18d46c28bfc238b0abd06ebb6"}},{"ruleId":"D2","level":"warning","message":{"text":"LineEnumerator.MoveNext (cognitive 28): LineEnumerator.MoveNext 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":"src/Avalonia.Base/Media/FormattedText.cs"},"region":{"startLine":791}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dfb28d11db0314eecc9b388cca03a4a5d7d577742f03caafab390e2697c529f"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueStore.OnChanged (cognitive 28): ValueStore.OnChanged 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":"src/Avalonia.Base/PropertyStore/ValueStore.cs"},"region":{"startLine":789}}}],"partialFingerprints":{"codehealthFindingId/v1":"899f9b72f395b511bc91f0cf73c7b7e853b32a17414a20702532660ae081f865"}},{"ruleId":"D2","level":"warning","message":{"text":"XamlIlClrPropertyInfoEmitter.Emit (cognitive 28): XamlIlClrPropertyInfoEmitter.Emit 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: 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlClrPropertyInfoHelper.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d13312843bf51ae9d63593d95b6925fc38cc2682b5736efb5c36fbd07ae68f9"}},{"ruleId":"D2","level":"warning","message":{"text":"ConnectedAnimation.RunFallbackAnimationAsync (cognitive 28): ConnectedAnimation.RunFallbackAnimationAsync has cognitive complexity 28 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 11 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":"src/Avalonia.Controls/Animation/ConnectedAnimation.cs"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aa27687b77227403695c2eb365a832fcbbcf616e427e7cd5d77a480d2a7ec94"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectedDatesCollection.InsertItem (cognitive 28): SelectedDatesCollection.InsertItem 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":"src/Avalonia.Controls/Calendar/SelectedDatesCollection.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"35841ab2d04565f976e043db8d3b0d45f0ab8eaa0a323373b80b85145184bb87"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeControlHost.UpdateHost (cognitive 28): NativeControlHost.UpdateHost 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":"src/Avalonia.Controls/NativeControlHost.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"501ccbac4cb7c7c5ec861fdb97b64f2d65b2c3a1229919c87d3bbcfb4b2aaa6e"}},{"ruleId":"D2","level":"warning","message":{"text":"TextSelectionHandleCanvas.MoveHandlesToSelection (cognitive 28): TextSelectionHandleCanvas.MoveHandlesToSelection 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":"src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"66586d8a706d5c6b4f5d7823b0e5272f05f46920b65c90bfbb03436601ae9b6b"}},{"ruleId":"D2","level":"warning","message":{"text":"WrapPanel.ArrangeOverride (cognitive 28): WrapPanel.ArrangeOverride 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":"src/Avalonia.Controls/WrapPanel.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a2599e5de4b28012ae1b47ebf88ca668b07d0e5a6e9c48e6c4a3746e2156b7"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaX11Platform.GetWindowsZOrder (cognitive 28): AvaloniaX11Platform.GetWindowsZOrder 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":"src/Avalonia.X11/X11Platform.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4554414b384d8d53796b8fd77c9fd325b8456acc0582e5dcc491ff20a6364ea"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiAlgorithm.LocatePairedBrackets (cognitive 27): BidiAlgorithm.LocatePairedBrackets has cognitive complexity 27 (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":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":1265}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9fdbf08f8697abff5af4f47ada059e3c78204ae451c7d442a494a6c0e1e0dc9"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeUtilities.TryConvert (cognitive 27): TypeUtilities.TryConvert has cognitive complexity 27 (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":"src/Avalonia.Base/Utilities/TypeUtilities.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a526ebf6a1b5bdcf414ba668b9501e725bc8ca85843a473a501cd54338860b0"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoCompleteBox.UpdateTextCompletion (cognitive 27): AutoCompleteBox.UpdateTextCompletion has cognitive complexity 27 (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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1553}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb1555ede7dd078a80ead77091c0a8b03c56665c8303ad94bfeb7649b7f8feb9"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericUpDown.ConvertTextToValueCore (cognitive 27): NumericUpDown.ConvertTextToValueCore has cognitive complexity 27 (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":"src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs"},"region":{"startLine":1154}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4012293db9d098851bdffe29377f6609e805fdb2770f85a41964ee8026a128"}},{"ruleId":"D2","level":"warning","message":{"text":"RefreshContainer.OnPropertyChanged (cognitive 27): RefreshContainer.OnPropertyChanged has cognitive complexity 27 (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":"src/Avalonia.Controls/PullToRefresh/RefreshContainer.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f124cbfe19fecbc3c471e41d5647c12054882f95f6af0be8e477d1b8e30d4ef"}},{"ruleId":"D2","level":"warning","message":{"text":"StackPanel.GetControlInDirection (cognitive 27): StackPanel.GetControlInDirection 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":"src/Avalonia.Controls/StackPanel.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"1af7b3d1ad3688d9bb0b65d1ddafa6c4438bcd215989eb10f218569c0fee02db"}},{"ruleId":"D2","level":"warning","message":{"text":"OleDataObjectHelper.WriteDataToGdi (cognitive 27): OleDataObjectHelper.WriteDataToGdi 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":"src/Windows/Avalonia.Win32/OleDataObjectHelper.cs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e09e8e29e1448ecf69d8f1b6376ab003b78f6dce97dc77a4245508ec4d8a00"}},{"ruleId":"D2","level":"warning","message":{"text":"ResourceDictionary.TryGetResource (cognitive 26): ResourceDictionary.TryGetResource 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":"src/Avalonia.Base/Controls/ResourceDictionary.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"075f6b46edf259174cdde9bf9c89df15853e7c9a9b3e404fcb52f901fc28ff7c"}},{"ruleId":"D2","level":"warning","message":{"text":"SwipeGestureRecognizer.PointerMoved (cognitive 26): SwipeGestureRecognizer.PointerMoved 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":"src/Avalonia.Base/Input/GestureRecognizers/SwipeGestureRecognizer.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdd5fcdaf1bfc548f2be246b9a31fc4eadf089936e39093ce5ef52c0ac4d788e"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetPreviousCharacterHit (cognitive 26): TextLineImpl.GetPreviousCharacterHit 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08c47053e8e0dfe6c6b0a0c7b753cbff6313ac9dcf8df196c01658f9d71c327"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueStore.ReevaluateEffectiveValues (cognitive 26): ValueStore.ReevaluateEffectiveValues 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":"src/Avalonia.Base/PropertyStore/ValueStore.cs"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc2c1b01308e9f21b3af05b5c59318d660c8e65a6fe0837a6c3e3f71b417e1ea"}},{"ruleId":"D2","level":"warning","message":{"text":"ExpressionVariant.OperatorDeclaration (cognitive 26): ExpressionVariant.OperatorDeclaration has cognitive complexity 26 (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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"991d4e721ceefc54423552846022e70515585a56dee1c48a10dd8008f42e8a14"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlQueryTransformer.Transform (cognitive 26): AvaloniaXamlIlQueryTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"876b62a680337a56c93f19c7a33f3f0d8c0ac9e946b0386e959b12e963527bae"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandBar.OnPropertyChanged (cognitive 26): CommandBar.OnPropertyChanged 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":"src/Avalonia.Controls/CommandBar/CommandBar.cs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"335a1cd434a506db9798c764e729045f21ec36c2f03a917487b7385fd6592369"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectingItemsControl.EndUpdating (cognitive 26): SelectingItemsControl.EndUpdating 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":"src/Avalonia.Controls/Primitives/SelectingItemsControl.cs"},"region":{"startLine":1349}}}],"partialFingerprints":{"codehealthFindingId/v1":"52d1fbb37fdea4a4f0855a12a5137471c796f19dfa17607dc81db88db2939f64"}},{"ruleId":"D2","level":"warning","message":{"text":"Slider.MoveToNextTick (cognitive 26): Slider.MoveToNextTick 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":"src/Avalonia.Controls/Slider.cs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"c400ed324804025dccc7ede079f36f407f0450324bed0c965d6036a86d0d9b8e"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnViewportFractionSwipeGesture (cognitive 26): VirtualizingCarouselPanel.OnViewportFractionSwipeGesture 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1192}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f7da87fa0ea4174fc1e5b45d02928bcc7d6745eb0941b24b3efbddcd70f473"}},{"ruleId":"D2","level":"warning","message":{"text":"FluidNavBar.OnAnimTick (cognitive 26): FluidNavBar.OnAnimTick 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":"samples/ControlCatalog/Pages/TabbedPage/FluidNavBar/FluidNavBar.cs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3be2dab7d43afd8e86d67365179176eac860216928bd135c22a2de03dbda379"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.CreateLazyIntermediatePoints (cognitive 26): WindowImpl.CreateLazyIntermediatePoints has cognitive complexity 26 (threshold 15). Most of this is not in the body itself: 1 of the 26 points is its own statement and the rest belongs to one function literal inside it that branches (line 1083). 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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"866e99cbfb6733ea159a176cad86cd3e621b2452e7e05bbc021ef0951c62aa4e"}},{"ruleId":"D2","level":"warning","message":{"text":"Gestures.PointerPressed (cognitive 25): Gestures.PointerPressed has cognitive complexity 25 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 6 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":"src/Avalonia.Base/Input/Gestures.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a9f197c8eb8d3d6e2faf868c87d1ae5fadeeb107b0caea20668fc0885645eb6"}},{"ruleId":"D2","level":"warning","message":{"text":"TabNavigation.GetNextTab (cognitive 25): TabNavigation.GetNextTab 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2779d7c09933f510508b38a928a111ee35a3982ac3eeb0b4af95e5197ffecc0"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLayout.HitTestTextRange (cognitive 25): TextLayout.HitTestTextRange 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":"src/Avalonia.Base/Media/TextFormatting/TextLayout.cs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac1dc1bc12aef26d480c5df4023dae8ac73dea7913cc68cb3ab70bbbb7cb93e"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueStore.SetInheritanceParent (cognitive 25): ValueStore.SetInheritanceParent 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":"src/Avalonia.Base/PropertyStore/ValueStore.cs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"68457dedf4987fcb0fce27c6ba8370300d4469ef223966a7ad4b4bafaf88b207"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderContext.PostSubgraph (cognitive 25): RenderContext.PostSubgraph 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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"7defe996f0741b41fc44b010d948f6783394ac993aebce4ec211d60516c61900"}},{"ruleId":"D2","level":"warning","message":{"text":"StringSplitter.SplitRespectingBrackets (cognitive 25): StringSplitter.SplitRespectingBrackets 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":"src/Avalonia.Base/Utilities/StringSplitter.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f5b8f4526d87f53c00eaa01c29a39776515bb802fdc4171117b874d126a15e2"}},{"ruleId":"D2","level":"warning","message":{"text":"ComInteropHelper.PatchMethod (cognitive 25): ComInteropHelper.PatchMethod 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":"src/Avalonia.Build.Tasks/ComInteropHelper.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"904d5ca1d9cdf5457df973cb79e859fda94eff4dafa0f5e1235192f126cd93f9"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarItem.PopulateGrids (cognitive 25): CalendarItem.PopulateGrids 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"634fb7ddc2e8ffa49a5c4f1b07aba0fdb514263fe649176b2671a0272b64fe99"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.Main (cognitive 25): Program.Main has cognitive complexity 25 (threshold 15). Of this number, 18 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":"samples/ControlCatalog.Desktop/Program.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d3524abcc1ea623126d68f69a5ef617ce7acd47bd74fab56d8502eb35d39da2"}},{"ruleId":"D2","level":"warning","message":{"text":"TabNavigation.GetFirstChild (cognitive 24): TabNavigation.GetFirstChild 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f3d0b88e801f9ccb2db435cdba4dc54bd1c0a8b8a9de0e4caecbbbfe68f0e5"}},{"ruleId":"D2","level":"warning","message":{"text":"TabNavigation.GetLastChild (cognitive 24): TabNavigation.GetLastChild 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aca6ad510cccfb42119e249957866d26727c8f69884ff21e249c21991a46598"}},{"ruleId":"D2","level":"warning","message":{"text":"FormattedText.BuildHighlightGeometry (cognitive 24): FormattedText.BuildHighlightGeometry 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":"src/Avalonia.Base/Media/FormattedText.cs"},"region":{"startLine":1399}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d1c629b68a9e1d214a5c483700ce93ef45e800464962c67ccf1969d2950f4f"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphRun.GetCharacterHitFromDistance (cognitive 24): GlyphRun.GetCharacterHitFromDistance 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1950bc808edf3e04a0bc259cb6638130fd7289ef313d62e53c491fe3e1191ae"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphRun.FindGlyphIndex (cognitive 24): GlyphRun.FindGlyphIndex 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"8158050f81661f1116c774defcee30ab570bd54e7de05fa181a7858f43aa52ec"}},{"ruleId":"D2","level":"warning","message":{"text":"ShapedBuffer.EnsureClusterCache (cognitive 24): ShapedBuffer.EnsureClusterCache 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":"src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"2876866f397a0b7c1d13b8379235081bbfb8cdf9b6a1add816ad1c31e617b6e9"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueStore.ReevaluateEffectiveValue (cognitive 24): ValueStore.ReevaluateEffectiveValue 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":"src/Avalonia.Base/PropertyStore/ValueStore.cs"},"region":{"startLine":1010}}}],"partialFingerprints":{"codehealthFindingId/v1":"50d1d2efc7ae2112ef99540212374a57d0200615f60d99bce39f2bfb62d2e345"}},{"ruleId":"D2","level":"warning","message":{"text":"AddNameScopeRegistration.Transform (cognitive 24): AddNameScopeRegistration.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AddNameScopeRegistration.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad92283f4217ef23052c8381d4e8de25f5006cc26ec94447873c86bf22dedb3"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlResourceTransformer.Transform (cognitive 24): AvaloniaXamlResourceTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlResourceTransformer.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fe53cfbce0b0fd3885333d62b1d15dba659ac79ca78363c621593fba5f4213"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlTransformRoutedEvent.Transform (cognitive 24): AvaloniaXamlIlTransformRoutedEvent.Transform has cognitive 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, 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformRoutedEvent.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6b384d9d6652b32706ebd646a09d35bac414dbf99522fb7c8814f548fadc4c3"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorSpectrum.OnKeyDown (cognitive 24): ColorSpectrum.OnKeyDown 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"da9965c54cf9b47999490e28f5c2be878540fa9824ef962a67f29feb5537ccf6"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.HighlightDays (cognitive 24): Calendar.HighlightDays 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1194}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da51ca13b6864a241f8773e1df2645fba0b1189f81e96fcf742b2e72357d1c1"}},{"ruleId":"D2","level":"warning","message":{"text":"TextPresenter.GetNextCharacterHit (cognitive 24): TextPresenter.GetNextCharacterHit 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":"src/Avalonia.Controls/Presenters/TextPresenter.cs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd5f8ffd6a974c60fc622773048cb578621dcc4e92e7ad3fc32ddcb8e0eb5cf"}},{"ruleId":"D2","level":"warning","message":{"text":"Popup.Open (cognitive 24): Popup.Open 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":"src/Avalonia.Controls/Primitives/Popup.cs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d3a56ca1b872ba5641a1e0d17f83a96a0f29f7dbea4c2cd4f3cd6061e08c34b"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectingItemsControl.UpdateSelection (cognitive 24): SelectingItemsControl.UpdateSelection 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":"src/Avalonia.Controls/Primitives/SelectingItemsControl.cs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc952c3bfc3de023f9d894dc47f2fe3741e9771d435ffb339879269e0910ee9c"}},{"ruleId":"D2","level":"warning","message":{"text":"TextBox.OnPointerPressed (cognitive 24): TextBox.OnPointerPressed 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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1792}}}],"partialFingerprints":{"codehealthFindingId/v1":"544828b066bda6c01d6b3087d8c0e0be4bfd4f15d17b146ab37ddfad9da00709"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaNativeMenuExporter.DoLayoutReset (cognitive 24): AvaloniaNativeMenuExporter.DoLayoutReset 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":"src/Avalonia.Native/AvaloniaNativeMenuExporter.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"76de37efa7a68d1d7f3107f55ad7e99e3c60cbbc1fb19c1e5c6b84dfa0ae0f37"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidStorageFolder.GetItemAsync (cognitive 24): AndroidStorageFolder.GetItemAsync 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":"src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a08268829a52125988908f2c94ad9cbb01649945f2cd250303608c5a743c61e"}},{"ruleId":"D2","level":"warning","message":{"text":"RenderTarget.EnsureSwapchain (cognitive 24): RenderTarget.EnsureSwapchain 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":"src/Avalonia.Wayland/Server/Transient/Rendering/WaylandEglDmaBufSurface.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a87783f9fc05adfd714aa086fdd61ed94a91653850a09aec882482e5d8e963"}},{"ruleId":"D2","level":"warning","message":{"text":"X11Window.X11Window.ctor (cognitive 24): X11Window.X11Window.ctor has cognitive complexity 24 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9981dfbc960d2c68465a066464644350f35d469d393c507aa0110b5559732b"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlRuntimeCompiler.FindAssembliesGrantingInternalAccess (cognitive 24): AvaloniaXamlIlRuntimeCompiler.FindAssembliesGrantingInternalAccess 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":"src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"862c9bf2df73fad98f357cd74a8f416185e8690dba11bbd334a46a19d592b8f0"}},{"ruleId":"D2","level":"warning","message":{"text":"MainWindow.OnHitsSelectionChanged (cognitive 24): MainWindow.OnHitsSelectionChanged 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":"samples/TextTestApp/MainWindow.axaml.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"265a07683387f64aa6676db035b6f00128269249add7911250d78dcf1e35a520"}},{"ruleId":"D2","level":"warning","message":{"text":"SafeArrayRef.ToArray (cognitive 24): SafeArrayRef.ToArray has cognitive complexity 24 (threshold 15). Most of this is not in the body itself: 1 of the 24 points is its own statement and the rest belongs to one function literal inside it that branches (line 102). 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":"src/Windows/Avalonia.Win32.Automation/Marshalling/SafeArrayRef.cs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ccead16faa7fa160851bbc8f1f7bb09f88e706465c22914f1a9873ef786b57c"}},{"ruleId":"D2","level":"warning","message":{"text":"OleDataObjectHelper.WriteDataToHGlobal (cognitive 24): OleDataObjectHelper.WriteDataToHGlobal 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":"src/Windows/Avalonia.Win32/OleDataObjectHelper.cs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"2587aeeca001b906e2c6e500b70b218734b37731f7326bdd4879f3bcccded66f"}},{"ruleId":"D2","level":"warning","message":{"text":"Win32StorageProvider.ShowFilePickerAsync (cognitive 24): Win32StorageProvider.ShowFilePickerAsync has cognitive complexity 24 (threshold 15). Most of this is not in the body itself: 0 of the 24 points are its own statements and the rest belongs to one function literal inside it that branches (line 115). 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":"src/Windows/Avalonia.Win32/Win32StorageProvider.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ad928088d518e5f3796b03f4ac308232be063a824d2522f3810eada5afee5f"}},{"ruleId":"D2","level":"warning","message":{"text":"Rotate3DTransition.Update (cognitive 23): Rotate3DTransition.Update 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":"src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"3142d1aeb91c7ded3ec438666f831d52910e81cc140d9d549961b2c98d72ccb3"}},{"ruleId":"D2","level":"warning","message":{"text":"FontFamily.GetFontSourceIdentifier (cognitive 23): FontFamily.GetFontSourceIdentifier 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":"src/Avalonia.Base/Media/FontFamily.cs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dfa168cde53c8b2fd749259a507aa361d936cef4ec55141578033886ecec370"}},{"ruleId":"D2","level":"warning","message":{"text":"GeometryBuilder.CalculateRoundedCornersRectangleWinUI (cognitive 23): GeometryBuilder.CalculateRoundedCornersRectangleWinUI 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":"src/Avalonia.Base/Media/GeometryBuilder.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd95ebc91e4d6dcf93ecca93bd814825b21d9bccacdaa8ae4847e6ac6afbd818"}},{"ruleId":"D2","level":"warning","message":{"text":"TextCharacters.TryGetShapeableLength (cognitive 23): TextCharacters.TryGetShapeableLength 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":"src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e4981690b73a637821218bcc255b815f32b492f928fae13000a918590f87a7"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositionTarget.HitTestFirstCore (cognitive 23): CompositionTarget.HitTestFirstCore 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":"src/Avalonia.Base/Rendering/Composition/CompositionTarget.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"69987112c8476af48d00b9f17fc64d40bdcb00a2f3136569f50eff435a470008"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectedDatesCollection.AddRange (cognitive 23): SelectedDatesCollection.AddRange 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":"src/Avalonia.Controls/Calendar/SelectedDatesCollection.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"76b90d88a8d406317248974e1a5a019b1e085bc0d38f7e21d8388d804b23e211"}},{"ruleId":"D2","level":"warning","message":{"text":"ComboBox.OnKeyDown (cognitive 23): ComboBox.OnKeyDown 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":"src/Avalonia.Controls/ComboBox.cs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8bf33ab03d0c427c4116ce19106457db91237e2a46fc6106a507459cef9ab4d"}},{"ruleId":"D2","level":"warning","message":{"text":"TimePicker.SetGrid (cognitive 23): TimePicker.SetGrid 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":"src/Avalonia.Controls/DateTimePickers/TimePicker.cs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"e907125d7f65a8d8c18e9f88c4d6d9ca71aa57c892ff97093f71f86ff78e66be"}},{"ruleId":"D2","level":"warning","message":{"text":"Grid.MeasureCellsGroup (cognitive 23): Grid.MeasureCellsGroup 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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":997}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbaf21a398dfe6268bbe00049a06cb35511540ae0c8028bd6d7086318bd8c9fb"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationPage.UpdateActivePage (cognitive 23): NavigationPage.UpdateActivePage 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":"src/Avalonia.Controls/Page/NavigationPage.cs"},"region":{"startLine":1772}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b1814a1d824dee30c3f64cc607baf584a01954eb53b501b169a900e4d26b6c"}},{"ruleId":"D2","level":"warning","message":{"text":"StackPanel.GetIrregularSnapPoints (cognitive 23): StackPanel.GetIrregularSnapPoints 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":"src/Avalonia.Controls/StackPanel.cs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"043b4e2716b9db55a6a9e2c2bd198369810f53b8f49b0ad296ad5cdf0523748d"}},{"ruleId":"D2","level":"warning","message":{"text":"RealizedStackElements.ItemsRemoved (cognitive 23): RealizedStackElements.ItemsRemoved 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":"src/Avalonia.Controls/Utils/RealizedStackElements.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"13f89c78c9b12d9a0b141cb0308b002b288177cd30507028a67ea7a41739ba64"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingStackPanel.ArrangeOverride (cognitive 23): VirtualizingStackPanel.ArrangeOverride 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"68eec9bf94f6caeb47f9a6c5f22d0e94b25db7a68e11505dd10862b4db8cae52"}},{"ruleId":"D2","level":"warning","message":{"text":"ManagedFileChooserViewModel.OnSelectionChangedAsync (cognitive 23): ManagedFileChooserViewModel.OnSelectionChangedAsync has cognitive complexity 23 (threshold 15). Most of this is not in the body itself: 1 of the 23 points is its own statement and the rest belongs to one function literal inside it that branches (line 214). 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":"src/Avalonia.Dialogs/Internal/ManagedFileChooserViewModel.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"738043c34489c0fcb294860ff0a6e6627d43ed9c2880e6b9d4868117bc4cf638"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTransferItemToAvnClipboardDataItemWrapper.GetValue (cognitive 23): DataTransferItemToAvnClipboardDataItemWrapper.GetValue 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":"src/Avalonia.Native/DataTransferItemToAvnClipboardDataItemWrapper.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb7304ea087c438afe1e9f293ba3236fa5a38d4789d40c970b4764f3d4916668"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidMotionEventsHelper.DispatchMotionEvent (cognitive 23): AndroidMotionEventsHelper.DispatchMotionEvent has cognitive complexity 23 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 3 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":"src/Android/Avalonia.Android/Platform/Specific/Helpers/AndroidMotionEventsHelper.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec96b60135d07dd3e63a42b7a4daaf7d55fe0fc8754b885efd379c093a669cc5"}},{"ruleId":"D2","level":"warning","message":{"text":"AtSpiNode.ComputeStatesCore (cognitive 23): AtSpiNode.ComputeStatesCore 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":"src/Avalonia.FreeDesktop.AtSpi/AtSpiNode.StateMapping.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1334bc67b391b51b76844926dc388695e79b43bf739cc757187db44fa84e849"}},{"ruleId":"D2","level":"warning","message":{"text":"StaticResourceExtension.ProvideValue (cognitive 23): StaticResourceExtension.ProvideValue 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":"src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fba8ad5964b29d437f323d7564ccfd74785cbf0dfc88383d20f492636688c5a"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoCompleteBoxPage.LastWordContains (cognitive 23): AutoCompleteBoxPage.LastWordContains 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, 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":"samples/ControlCatalog/Pages/AutoCompleteBoxPage.xaml.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df9e383cf0862dccd7130fd7207b77140bf86b29f317d01a936b55821c73918"}},{"ruleId":"D2","level":"warning","message":{"text":"CardStackPageTransition.Update (cognitive 23): CardStackPageTransition.Update 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":"samples/ControlCatalog/Pages/Transitions/CardStackPageTransition.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"867f1ebcf8490acb3c012bfdd62f568922bee05e7a2e8170a0c775e406f837fe"}},{"ruleId":"D2","level":"warning","message":{"text":"CompileAnalyzer.AnalyzeMethodInvocation (cognitive 23): CompileAnalyzer.AnalyzeMethodInvocation 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, 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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a23d005656a525355a36977e98b177e497482698bb8ac6d5f5135171368bd2"}},{"ruleId":"D2","level":"warning","message":{"text":"AnimationInstance.Subscribed (cognitive 22): AnimationInstance.Subscribed has cognitive complexity 22 (threshold 15). Most of this is not in the body itself: 6 of the 22 points are its own statements and the rest belongs to one function literal inside it that branches (line 128). 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":"src/Avalonia.Base/Animation/AnimationInstance\u00601.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d0d2a19fac578f5c89e73a128ee348332e22148c3dc79488547e8f7ebada138"}},{"ruleId":"D2","level":"warning","message":{"text":"TransformAnimator.Apply (cognitive 22): TransformAnimator.Apply 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":"src/Avalonia.Base/Animation/Animators/TransformAnimator.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"412fef94be11fa1f578275a148b9c3f2c2306be4b213da2c2b289d277b06389f"}},{"ruleId":"D2","level":"warning","message":{"text":"KeySpline.SetParameterFromX (cognitive 22): KeySpline.SetParameterFromX 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":"src/Avalonia.Base/Animation/KeySpline.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"4290d2d94e263fdd1a94a1d778ccab4045433c82b7e215fb89b34264aa005777"}},{"ruleId":"D2","level":"warning","message":{"text":"XYFocus.ChooseBestFocusableElementFromList (cognitive 22): XYFocus.ChooseBestFocusableElementFromList has cognitive complexity 22 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 10 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":"src/Avalonia.Base/Input/Navigation/XYFocus.Impl.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7f8d0ce48085082bb980600bb99417a6a9414a86f968b46a97e2c666ae1b65d"}},{"ruleId":"D2","level":"warning","message":{"text":"CmapFormat4Table.GetGlyphs (cognitive 22): CmapFormat4Table.GetGlyphs 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":"src/Avalonia.Base/Media/Fonts/Tables/Cmap/CmapFormat4Table.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"309c4b5e477084972144e2e58f9dd33a0110163af5de48ded44f98bdf6113b1f"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphRun.GetTrailingWhitespaceLength (cognitive 22): GlyphRun.GetTrailingWhitespaceLength 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"77d5c4e3161f663997c9d412ca214e51d8a84263ee788807007d08ed832045fc"}},{"ruleId":"D2","level":"warning","message":{"text":"PathMarkupParser.ReadArgument (cognitive 22): PathMarkupParser.ReadArgument 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":"src/Avalonia.Base/Media/PathMarkupParser.cs"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"2873827ee0e76071963cf2b1fdcf7ab6d002cf3ddf704e954d365e51bfd10872"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDecoration.Draw (cognitive 22): TextDecoration.Draw 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":"src/Avalonia.Base/Media/TextDecoration.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc42bd543c1e3b739cffb567660d42146cbcb0d96aae2cc1a97a891a4579d598"}},{"ruleId":"D2","level":"warning","message":{"text":"TextFormatterImpl.ShapeTextRuns (cognitive 22): TextFormatterImpl.ShapeTextRuns 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f5f0d788bcf355a5301e0c8b4c91451a7ee9c4a749437e78259d35b1a4a142"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetDistanceFromCharacterHit (cognitive 22): TextLineImpl.GetDistanceFromCharacterHit 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c7c598764f75537970486649442a54178912857cceed94275a4729a2496f5a8"}},{"ruleId":"D2","level":"warning","message":{"text":"DispatcherOperation.Wait (cognitive 22): DispatcherOperation.Wait 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":"src/Avalonia.Base/Threading/DispatcherOperation.cs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"422101893f966f491ce4c40fe2bd8a6fd53de6518a37757bbce90f7b0a018956"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaBindingExtensionTransformer.Transform (cognitive 22): AvaloniaBindingExtensionTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaBindingExtensionTransformer.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"573b39759388fb85ca374f87953b289230ab77f005a1dacbcee16a6e02d77718"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorSpectrum.UpdateBitmapSources (cognitive 22): ColorSpectrum.UpdateBitmapSources 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1586}}}],"partialFingerprints":{"codehealthFindingId/v1":"42333bb922b89c75b144a5af2df5f355cda7950418103a87231cca019d4b583b"}},{"ruleId":"D2","level":"warning","message":{"text":"Track.ArrangeOverride (cognitive 22): Track.ArrangeOverride 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":"src/Avalonia.Controls/Primitives/Track.cs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"b64e64968d11baa777fd57c14673c29e636b4b01a704af291b6d17529463fe68"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeViewItem.OnKeyDown (cognitive 22): TreeViewItem.OnKeyDown 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":"src/Avalonia.Controls/TreeViewItem.cs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"f346569ca9c7191c12c93559b899dd81ac8c3ef5b6ef845729d402f363fea6c5"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleWebSocketHttpServer.AcceptAsyncImpl (cognitive 22): SimpleWebSocketHttpServer.AcceptAsyncImpl 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":"src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"662e31d69a6c1e6a970ce088ca57be4e7d87ae14078877771ca691211140a055"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.ChromeHitTest (cognitive 22): WindowImpl.ChromeHitTest has cognitive complexity 22 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 5 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":"src/Avalonia.Native/WindowImpl.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2b583b2cf4a4cd278d6146c413162bf0b7a6d4616ec0c95ac072750ffcaabb8"}},{"ruleId":"D2","level":"warning","message":{"text":"ClipboardImpl.TryAddItemAsync (cognitive 22): ClipboardImpl.TryAddItemAsync 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":"src/Browser/Avalonia.Browser/ClipboardImpl.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf18ab34fe520d4d5cbec7b6743d627a217f11131e10a665ae1fd847915f8b6"}},{"ruleId":"D2","level":"warning","message":{"text":"InputHandler.Handle (cognitive 22): InputHandler.Handle has cognitive complexity 22 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 3 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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"77ba6fc8ebec9376ac168772931183e23a62454e8c9d2230cb0d9a12dbd7c7dc"}},{"ruleId":"D2","level":"warning","message":{"text":"AtSpiNode.OnPeerPropertyChanged (cognitive 22): AtSpiNode.OnPeerPropertyChanged 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":"src/Avalonia.FreeDesktop.AtSpi/AtSpiNode.cs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb16014a52a916a19672501f8bb64da151aa0815b926f3d317699db31c9c67f4"}},{"ruleId":"D2","level":"warning","message":{"text":"AtSpiCollectionHandler.CollectMatchesOrdered (cognitive 22): AtSpiCollectionHandler.CollectMatchesOrdered 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":"src/Avalonia.FreeDesktop.AtSpi/Handlers/AtSpiCollectionHandler.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"4688a37ad91458d0ea63d3e67c9736c2efd6a102f1a0c5a7fe9ea86285e86110"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaX11Platform.InitializeGraphics (cognitive 22): AvaloniaX11Platform.InitializeGraphics has cognitive complexity 22 (threshold 15). Of this number, 20 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":"src/Avalonia.X11/X11Platform.cs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ff5c356a0ae17dd881a41b7dda718799e2c49b91fb13ecc0aacbb35e8314ff1"}},{"ruleId":"D2","level":"warning","message":{"text":"ComVariant.Create (cognitive 22): ComVariant.Create has cognitive complexity 22 (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":"src/Windows/Avalonia.Win32.Automation/Marshalling/ComVariant.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b43e1e2c0362de530840b4aaae719d7488e358635a833ba70d4dbc2b8f54f08"}},{"ruleId":"D2","level":"warning","message":{"text":"SbomGenerator.GenerateForPackage (cognitive 21): SbomGenerator.GenerateForPackage 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":"nukebuild/SbomGenerator.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3855f7f65579fbbed2a7dc411ebb0d8b4afb093cd60aeca0cab28a2cab3840f"}},{"ruleId":"D2","level":"warning","message":{"text":"Bcp47ScriptResolver.GetScriptSubtag (cognitive 21): Bcp47ScriptResolver.GetScriptSubtag 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":"src/Avalonia.Base/Media/Fonts/Bcp47ScriptResolver.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"417d2fd31b6f13902a475e206c810e863ba0bcd845d9014e6bbf998f9810d757"}},{"ruleId":"D2","level":"warning","message":{"text":"Dispatcher.ExecuteJobsCore (cognitive 21): Dispatcher.ExecuteJobsCore 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":"src/Avalonia.Base/Threading/Dispatcher.Queue.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"9569135914db295130742d730cdc0234f8bffafa6ccd89de0e8872f9ba1aaa2e"}},{"ruleId":"D2","level":"warning","message":{"text":"Dispatcher.PromoteTimers (cognitive 21): Dispatcher.PromoteTimers 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":"src/Avalonia.Base/Threading/Dispatcher.Timers.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c7f1d841bcdde1f79b058ad99eb983a093fd37e3f71fda6759a69f653360278"}},{"ruleId":"D2","level":"warning","message":{"text":"SixItemList.Remove (cognitive 21): SixItemList.Remove 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab3e7b926c80b38dddf1ca6d5d5ffe1de6817f12f0a87053be245f1698891215"}},{"ruleId":"D2","level":"warning","message":{"text":"SixItemList.ToArray (cognitive 21): SixItemList.ToArray 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1188}}}],"partialFingerprints":{"codehealthFindingId/v1":"0261bcffeceeaba3080af31ace8b15e9f1660b3ac310555d68d3772a2e931cd2"}},{"ruleId":"D2","level":"warning","message":{"text":"SixItemList.CopyTo (cognitive 21): SixItemList.CopyTo 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1219}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae435449d455377c4a75b596beff5c3ea2e2040bc6c03e15d3f9d98f5d51491e"}},{"ruleId":"D2","level":"warning","message":{"text":"SpanStringTokenizer.SkipToNextToken (cognitive 21): SpanStringTokenizer.SkipToNextToken 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":"src/Avalonia.Base/Utilities/SpanStringTokenizer.cs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"5314f87b092bed81aea0f84c1f612269564c7b02299fc96bdb4ef7e298cc84d8"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIncludeTransformer.Transform (cognitive 21): AvaloniaXamlIncludeTransformer.Transform has cognitive 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, 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/GroupTransformers/XamlIncludeGroupTransformer.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae66054881bed6d9f1d3b9a6f783a6e8cf8f85af5db962062d5b68c241d1c79d"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaXamlIlReorderClassesPropertiesTransformer.Transform (cognitive 21): AvaloniaXamlIlReorderClassesPropertiesTransformer.Transform 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlReorderClassesPropertiesTransformer.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd75535ba002899dedc83323d8cd825800aebec32e953467975ba5f43d4950fd"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.FindDayButtonFromDay (cognitive 21): Calendar.FindDayButtonFromDay 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1038}}}],"partialFingerprints":{"codehealthFindingId/v1":"386ce3985bdcf89ed80a0eb566cfcfaf42b6eef573274d7614a5933a1e83d295"}},{"ruleId":"D2","level":"warning","message":{"text":"TimePicker.SetSelectedTimeText (cognitive 21): TimePicker.SetSelectedTimeText 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":"src/Avalonia.Controls/DateTimePickers/TimePicker.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"82eb956ab27c28d4506d69699bd4fddb775781b5f81e464d893847dcf57f63bb"}},{"ruleId":"D2","level":"warning","message":{"text":"NavigationPage.PushModalAsync (cognitive 21): NavigationPage.PushModalAsync 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":"src/Avalonia.Controls/Page/NavigationPage.cs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee945284b7f0f8c3818edd9cf016821dee11dcd3e64c151334f1de2137fa0bb"}},{"ruleId":"D2","level":"warning","message":{"text":"RefreshContainer.OnPullDirectionChanged (cognitive 21): RefreshContainer.OnPullDirectionChanged 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":"src/Avalonia.Controls/PullToRefresh/RefreshContainer.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"246ba10401c9f93835b06566693afcdb8207ab67761a18038b312424be1d82f6"}},{"ruleId":"D2","level":"warning","message":{"text":"RefreshVisualizer.UpdateContent (cognitive 21): RefreshVisualizer.UpdateContent 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":"src/Avalonia.Controls/PullToRefresh/RefreshVisualizer.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"81101913902ccf96e00d411e1a973d51ca7973f763ea5e362e383423ccf8e851"}},{"ruleId":"D2","level":"warning","message":{"text":"Slider.SnapToTick (cognitive 21): Slider.SnapToTick 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":"src/Avalonia.Controls/Slider.cs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"37f19c1760a33c37e377577c2f20b40584a3dbefc08d7446d92d50f01a86e4ad"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaNativeApplicationPlatform.UrlsOpened (cognitive 21): AvaloniaNativeApplicationPlatform.UrlsOpened 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":"src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ecfbe284f78d4199108314418791e6f0db58f7d17de03e66f41d10a7f68034c"}},{"ruleId":"D2","level":"warning","message":{"text":"Deserializer.ReadObject (cognitive 21): Deserializer.ReadObject 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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1180}}}],"partialFingerprints":{"codehealthFindingId/v1":"d204969e8ffa72834273a4b8d4a0fd518f6f0444c1505ebb722d72212fea9a7d"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaAccessHelper.GetOrCreateNodeInfoProvidersFromPeer (cognitive 21): AvaloniaAccessHelper.GetOrCreateNodeInfoProvidersFromPeer 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 into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Android/Avalonia.Android/AvaloniaAccessHelper.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a96265b0b1283031055484b00fef420a2b7096314bf42d7b62f0c81c4dc5be5"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyInterop.KeyFromDomKey (cognitive 21): KeyInterop.KeyFromDomKey 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":"src/Browser/Avalonia.Browser/KeyInterop.cs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ff8b07a49974ceaf9ba963d31e13faf409131904d2ca80570767d79db1cdcba"}},{"ruleId":"D2","level":"warning","message":{"text":"X11PlatformThreading.RunLoop (cognitive 21): X11PlatformThreading.RunLoop 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":"src/Avalonia.X11/Dispatching/X11PlatformThreading.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d089e6db8f8e16a00dfd7e29e5a1aec4b2cd49593a14301455e1adf5f9890ae"}},{"ruleId":"D2","level":"warning","message":{"text":"Randr15ScreensImpl.GetRefreshRateForOutput (cognitive 21): Randr15ScreensImpl.GetRefreshRateForOutput 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":"src/Avalonia.X11/Screens/X11Screen.Providers.cs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"46477eda1162c7ee0fdc7160926bcf5319fa9afe1f263268333c1a502e15cb6e"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionDataProvider.OnSelectionRequest (cognitive 21): SelectionDataProvider.OnSelectionRequest 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":"src/Avalonia.X11/Selections/SelectionDataProvider.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff6e8e74245421883f98eddbc1bae7d207b03d96889dffe6f4f8e4ece0f12ad9"}},{"ruleId":"D2","level":"warning","message":{"text":"X11Info.X11Info.ctor (cognitive 21): X11Info.X11Info.ctor 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":"src/Avalonia.X11/X11Info.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d16f8c4ee4e29753e9ded1820fe2f7dbb70dd2e16d9f8033fa29dedef7e8395"}},{"ruleId":"D2","level":"warning","message":{"text":"VulkanImage.VulkanImage.ctor (cognitive 21): VulkanImage.VulkanImage.ctor 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":"samples/GpuInterop/VulkanDemo/VulkanImage.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"323140905dabc77a564b0c5bb1952c1e4f5050443134155453f225e8356e7083"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultConverter.TryConvert (cognitive 20): DefaultConverter.TryConvert 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":"src/Avalonia.Base/Data/Core/TargetTypeConverter.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"0782ca378be3fd30e821c5fb8547833dd70ec4e917ee44a5347c910335ccdc73"}},{"ruleId":"D2","level":"warning","message":{"text":"Color.TryParseCssFormat (cognitive 20): Color.TryParseCssFormat 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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a0c0f9b27e8d3cd49e3464a32ed03af3159a5dd29d6ad58af646bf9741ab3f"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphTypeface.TryGetGlyphMetrics (cognitive 20): GlyphTypeface.TryGetGlyphMetrics 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":"src/Avalonia.Base/Media/GlyphTypeface.cs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd81f01394f829f15cce0a83c422153cf996de7e3b069186e362f8fcf93f111b"}},{"ruleId":"D2","level":"warning","message":{"text":"TextFormatterImpl.MeasureLength (cognitive 20): TextFormatterImpl.MeasureLength 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"13dba925b442e7cb807fae2f0f3a5b946c9a10b49fe55461d7e92e0f40ef74bf"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetTextRunBoundsRightToLeft (cognitive 20): TextLineImpl.GetTextRunBoundsRightToLeft 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0231a5c0cf377c7e5403721e20580cec60b1b33d133c56181f3261cc59081b0"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLineImpl.GetTextBoundsLeftToRight (cognitive 20): TextLineImpl.GetTextBoundsLeftToRight 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":1029}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6e2c67fc2544dc86aefa4921542d8601e822461a137937895993b0a1988f47"}},{"ruleId":"D2","level":"warning","message":{"text":"DelegateExpressionFfi.CallWithCast (cognitive 20): DelegateExpressionFfi.CallWithCast 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":"src/Avalonia.Base/Rendering/Composition/Expressions/DelegateExpressionFfi.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"c203d1951b8151145e9ed957f6b19a22fec1745bf9a6823d612ed94fb14ab7f0"}},{"ruleId":"D2","level":"warning","message":{"text":"TokenParser.TryParseIdentifier (cognitive 20): TokenParser.TryParseIdentifier 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":"src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dd558a2c818fa7048df3e605a5e8f69b9c9a6611ce0a99e5e22a582159cc416"}},{"ruleId":"D2","level":"warning","message":{"text":"ContainerQueryGrammar.ParseFeature (cognitive 20): ContainerQueryGrammar.ParseFeature 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":"src/Markup/Avalonia.Markup/Markup/Parsers/ContainerQueryGrammar.cs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfcfe5e88b34a289124d2fc11b58a0469e2787aa8711e487a78cdb3ce2969ee3"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPreviewer.ConnectEvents (cognitive 20): ColorPreviewer.ConnectEvents 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":"src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"b189a8bda1177bebb32b00a3dcc250481572208a31bad19e0795855597062a4a"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorSpectrum.CreateBitmapsAndColorMap (cognitive 20): ColorSpectrum.CreateBitmapsAndColorMap has cognitive complexity 20 (threshold 15). Most of this is not in the body itself: 7 of the 20 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 1137, 1181). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60701b37b0fd3581efeb3cf50002cd0eaac9ac2846e27f8f7c56be308be5ff7"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoCompleteBox.ItemsCollectionChanged (cognitive 20): AutoCompleteBox.ItemsCollectionChanged 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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1448}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe599f2bc8a72d96c52bca76b9d131aa292997c69d4147815f329dd233644dd"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarItem.SetYearButtons (cognitive 20): CalendarItem.SetYearButtons 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b81e87b24bff122543a37b1c4539f44ba00af0709e95a66f892de3ce63513aa"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarDatePicker.SetSelectedDate (cognitive 20): CalendarDatePicker.SetSelectedDate 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":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"485e3a86a68681c14c8023318e480ef0752990cc91132e147db63e2dc94a5145"}},{"ruleId":"D2","level":"warning","message":{"text":"Control.OnGotFocus (cognitive 20): Control.OnGotFocus 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":"src/Avalonia.Controls/Control.cs"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fa04a691866cea587517104710be659c8dec4cdc026b64b3b04381b6bae307"}},{"ruleId":"D2","level":"warning","message":{"text":"DatePicker.SetGrid (cognitive 20): DatePicker.SetGrid 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":"src/Avalonia.Controls/DateTimePickers/DatePicker.cs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"acaab0b0f0bd7a3b1fc8ab7ed58b72eab1730f7ea89d6675ec06b5cb30742c8e"}},{"ruleId":"D2","level":"warning","message":{"text":"TimePickerPresenter.SetGrid (cognitive 20): TimePickerPresenter.SetGrid 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":"src/Avalonia.Controls/DateTimePickers/TimePickerPresenter.cs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"eadc1fc170d1ad425d76c1066af439aa2d04d2a4886599f0f41f883ede523220"}},{"ruleId":"D2","level":"warning","message":{"text":"GridSplitter.SetupDefinitionsToResize (cognitive 20): GridSplitter.SetupDefinitionsToResize 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":"src/Avalonia.Controls/GridSplitter.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"752dda240cddd80e8165be65dadf9a14364ff860b515315315b88b4a79d182a3"}},{"ruleId":"D2","level":"warning","message":{"text":"ItemsControl.PrepareContainerForItemOverride (cognitive 20): ItemsControl.PrepareContainerForItemOverride 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":"src/Avalonia.Controls/ItemsControl.cs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba184b264ec12e81d62ba8c826cdcb4e452cccdfbc5c2eee4860b99947b073bb"}},{"ruleId":"D2","level":"warning","message":{"text":"CarouselPage.OnKeyDown (cognitive 20): CarouselPage.OnKeyDown 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":"src/Avalonia.Controls/Page/CarouselPage.cs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"d019affb91c4c7fa267a2acee116f66a71672103b9d8ebc9a8cfb344e7ba49ac"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultMenuInteractionHandler.PointerEntered (cognitive 20): DefaultMenuInteractionHandler.PointerEntered 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":"src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a800a1182f77d0250c6fd82ab1396bcec3902c4b11e878c6610d811eb02851"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeView.UpdateSelectionFromContainer (cognitive 20): TreeView.UpdateSelectionFromContainer 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":"src/Avalonia.Controls/TreeView.cs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce41062e2ebc47e35fcdb9c60d7cb949d4541ec3597c347f345a754f13d08b36"}},{"ruleId":"D2","level":"warning","message":{"text":"Window.ShowCore (cognitive 20): Window.ShowCore 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":975}}}],"partialFingerprints":{"codehealthFindingId/v1":"19c57d5bf4d972072dcf5d1224ffac4de93692e07ea610f557c0b9e8ee3e94e2"}},{"ruleId":"D2","level":"warning","message":{"text":"HtmlWebSocketTransport.AcceptWorker (cognitive 20): HtmlWebSocketTransport.AcceptWorker 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":"src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"78e200844e561a8a2d21f12a29fb888f284fb77df1a81a4e2677f7f38b1445f6"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaNativePlatform.DoInitialize (cognitive 20): AvaloniaNativePlatform.DoInitialize 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":"src/Avalonia.Native/AvaloniaNativePlatform.cs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aba7cc616f9cd38bf12fa7d680f460d40ec35a2e22354f6d2a9e387dc898f8d"}},{"ruleId":"D2","level":"warning","message":{"text":"Deserializer.DeserializeValue (cognitive 20): Deserializer.DeserializeValue 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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1109}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de609d5a5a40b189834a6617895a2a9117d0580c2d4feaa10e6812b1ab091dc"}},{"ruleId":"D2","level":"warning","message":{"text":"TopLevelImpl.SetTransparencyLevelHint (cognitive 20): TopLevelImpl.SetTransparencyLevelHint 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":"src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"8adf3846208691be001c15ab6566d7c4104bc1faf890a31217dfd681641ee2dc"}},{"ruleId":"D2","level":"warning","message":{"text":"DBusSystemDialog.ShowFilePickerAsync (cognitive 20): DBusSystemDialog.ShowFilePickerAsync has cognitive complexity 20 (threshold 15). Most of this is not in the body itself: 6 of the 20 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 148, 174). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.FreeDesktop/DBusSystemDialog.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f22d7e0bf5db42f30622250ceed731e8417490526640bf1cf15c89d4fe47e02"}},{"ruleId":"D2","level":"warning","message":{"text":"EpollDispatcherImpl.RunLoop (cognitive 20): EpollDispatcherImpl.RunLoop 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":"src/Linux/Avalonia.LinuxFramebuffer/EpollDispatcherImpl.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"066c71a9d462b54b31c6704579fc5fb30d6807e12a5d11149dc917d3cdd9ec72"}},{"ruleId":"D2","level":"warning","message":{"text":"JSONParser.ParseAnonymousValue (cognitive 20): JSONParser.ParseAnonymousValue 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":"src/tools/Avalonia.Designer.HostApp/TinyJson.cs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"76acd68ae89f70b386cb9801e8730506da3f6ac38bb260d127676b6097213840"}},{"ruleId":"D2","level":"warning","message":{"text":"Win32GlManager.InitializeCore (cognitive 20): Win32GlManager.InitializeCore 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":"src/Windows/Avalonia.Win32/Win32GlManager.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"efa3459bdd1b2fb77c875b4bb7bb67899fed7472af69db9ce23aab486ef1cbd1"}},{"ruleId":"D2","level":"warning","message":{"text":"Win32Platform.WndProc (cognitive 20): Win32Platform.WndProc 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":"src/Windows/Avalonia.Win32/Win32Platform.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"4242e9b7dfec837f6b714a7cffd018e180ff7711c1e0a31f25e4683c689dd51c"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.SetTransparencyLevelHint (cognitive 20): WindowImpl.SetTransparencyLevelHint 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9820e67ea1a9aa8540795905de772dfe723f9593b98ba99122d3534ba319845"}},{"ruleId":"D2","level":"warning","message":{"text":"BindingExpression.OnNodeValueChanged (cognitive 19): BindingExpression.OnNodeValueChanged 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":"src/Avalonia.Base/Data/Core/BindingExpression.cs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"de2f248ef1a2644aa69a80475e7137897535b1bc7133386442a5f66959677071"}},{"ruleId":"D2","level":"warning","message":{"text":"XYFocus.FindElements (cognitive 19): XYFocus.FindElements 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":"src/Avalonia.Base/Input/Navigation/XYFocus.FindElements.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f542bea83b517de5721fcad2e1085c4281a0cb141e997bd848a97f6f507a72a"}},{"ruleId":"D2","level":"warning","message":{"text":"Layoutable.ArrangeCore (cognitive 19): Layoutable.ArrangeCore 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":"src/Avalonia.Base/Layout/Layoutable.cs"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c3822054f0e2f896bf44c9f3db112ff02056b6c38a69c9bb0e0159d4ad5f295"}},{"ruleId":"D2","level":"warning","message":{"text":"Color.TryParse (cognitive 19): Color.TryParse has cognitive complexity 19 (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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"883449d262c93cd237d7ad63c955dc21fb460da7ce2c93a2385e4369b9e46d13"}},{"ruleId":"D2","level":"warning","message":{"text":"Color.TryParse (cognitive 19): Color.TryParse has cognitive complexity 19 (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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a504724a2ea2b5f60e2886aea0d2ecda4144b71043c54149889bd137890df3"}},{"ruleId":"D2","level":"warning","message":{"text":"FontCollectionBase.TryMatchCharacter (cognitive 19): FontCollectionBase.TryMatchCharacter 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"efce0e1285bd7091f8f29c3e2bb833e3a74de4b7542b0933f12524a1e5ddc33e"}},{"ruleId":"D2","level":"warning","message":{"text":"FontCollectionBase.TryCreateSyntheticGlyphTypeface (cognitive 19): FontCollectionBase.TryCreateSyntheticGlyphTypeface 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a77d593764ee0f22e161a1b5c7ed4b87e81236a6dfc4fee40f031cd628717ef"}},{"ruleId":"D2","level":"warning","message":{"text":"Codepoint.ReadAt (cognitive 19): Codepoint.ReadAt 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/Codepoint.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"404b5fbacef8ca47b6b2fa4c69d88d58d69d2914bf39e6f926bf3a62e69b4120"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyFrameAnimationInstance.EvaluateImpl (cognitive 19): KeyFrameAnimationInstance.EvaluateImpl 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":"src/Avalonia.Base/Rendering/Composition/Animations/KeyFrameAnimationInstance.cs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c73152b19858e731c18c983803b7b0cec31d826c8f3665a0313d31d210ca758"}},{"ruleId":"D2","level":"warning","message":{"text":"CDirtyRegion2.Add (cognitive 19): CDirtyRegion2.Add 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":"src/Avalonia.Base/Rendering/Composition/Server/DirtyRects/MultiDirtyRectTracker.CDirtyRegion.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e4500833aac53b226182d4c44ac5f8cd4b25575fc6251fd9a79d574eeae029"}},{"ruleId":"D2","level":"warning","message":{"text":"Dispatcher.RescheduleTimers (cognitive 19): Dispatcher.RescheduleTimers 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":"src/Avalonia.Base/Threading/Dispatcher.Timers.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"74315bcd3c7bc3c5bd0d60dc0848163ecbf2b44ab12acf8dfb30dd0dc40b2589"}},{"ruleId":"D2","level":"warning","message":{"text":"XDataTypeTransformer.Transform (cognitive 19): XDataTypeTransformer.Transform 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, 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XDataTypeTransformer.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"c002c963aae78bf832ab67b7c3f0f4f0547fe5afe65dd4a79f2b4796ef834a86"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.OnPreviousClick (cognitive 19): Calendar.OnPreviousClick 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1295}}}],"partialFingerprints":{"codehealthFindingId/v1":"056a2141123aaf4b406779b28a8bdb5ce12adde1233e7a35a9427a3e5c322582"}},{"ruleId":"D2","level":"warning","message":{"text":"Calendar.OnNextClick (cognitive 19): Calendar.OnNextClick 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1343}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb315f6e3c877d91c66bf5806bfdf1d88183a21c146a5bd6f68e6ad6380fb16f"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectedDatesCollection.SetItem (cognitive 19): SelectedDatesCollection.SetItem 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":"src/Avalonia.Controls/Calendar/SelectedDatesCollection.cs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddfd7f0accef348af94b0c2df640662ead0d7b3a45e85425fe7eb173bbf714d5"}},{"ruleId":"D2","level":"warning","message":{"text":"CalendarDatePicker.OnApplyTemplate (cognitive 19): CalendarDatePicker.OnApplyTemplate 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4142fb0d05b4c92cf8bdcba6da8eccbe067d6f0fd1e11c0cfc7279bd60958323"}},{"ruleId":"D2","level":"warning","message":{"text":"DatePickerPresenter.SetGrid (cognitive 19): DatePickerPresenter.SetGrid 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":"src/Avalonia.Controls/DateTimePickers/DatePickerPresenter.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff6f0ef4b64bcf7a746cac70e1754eb9792cbd156d9234f15713e621bafe5851"}},{"ruleId":"D2","level":"warning","message":{"text":"Design.CreatePreviewWithControl (cognitive 19): Design.CreatePreviewWithControl 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":"src/Avalonia.Controls/Design.cs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bce81b3d1a68346084e55bd79ff3ef61f62e9fce41658c2621b02ac96a1bc79"}},{"ruleId":"D2","level":"warning","message":{"text":"PopupFlyoutBase.HandleTransientDismiss (cognitive 19): PopupFlyoutBase.HandleTransientDismiss 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":"src/Avalonia.Controls/Flyouts/PopupFlyoutBase.cs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"81cacdf3edc270b462aadeecd0638e264590be883cd0e44d8594bc81c053409b"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericUpDown.SyncTextAndValueProperties (cognitive 19): NumericUpDown.SyncTextAndValueProperties 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":"src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs"},"region":{"startLine":1089}}}],"partialFingerprints":{"codehealthFindingId/v1":"517990b4ec4554e3b057b9385c15a521c2f5605c79a3b0848d6474a2dfc32bbb"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollViewerIRefreshInfoProviderAdapter.AdaptFromTree (cognitive 19): ScrollViewerIRefreshInfoProviderAdapter.AdaptFromTree 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":"src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"205f00f5f8532b396a4c2f038b8679d88a0ccb802eff84184f7060062e0a6dff"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTemplateExtensions.FindDataTemplate (cognitive 19): DataTemplateExtensions.FindDataTemplate 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":"src/Avalonia.Controls/Templates/DataTemplateExtensions.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f832e3b7eccc544a4f2b32611138b0d63f3620c463a44246c82a7275c651036"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnPropertyChanged (cognitive 19): VirtualizingCarouselPanel.OnPropertyChanged 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1529}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b95a0f2e6ba36538d8b31d607d242d706ffd10b251e507692253df71ce87dc8"}},{"ruleId":"D2","level":"warning","message":{"text":"Window.SetWindowStartupLocation (cognitive 19): Window.SetWindowStartupLocation 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":1294}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60ba7c04aa0616e10698eaa5db4c4ebef192453487c02248225194d1437ae33"}},{"ruleId":"D2","level":"warning","message":{"text":"Window.MeasureOverride (cognitive 19): Window.MeasureOverride 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"72ccf43a71ab2e451cbf0300db63755f29725d6f4ea6265f9cbc128e3b1a5a9a"}},{"ruleId":"D2","level":"warning","message":{"text":"DBusTextInputMethodBase.OnOwnerChanged (cognitive 19): DBusTextInputMethodBase.OnOwnerChanged 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":"src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e9eb1cc640bf1b1b58a3ccf3e246f3d11dc26694207e24a12b16f56fd52ead2"}},{"ruleId":"D2","level":"warning","message":{"text":"X11EventDispatcher.DispatchX11Events (cognitive 19): X11EventDispatcher.DispatchX11Events 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":"src/Avalonia.X11/Dispatching/X11EventDispatcher.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3292460c8d2d1496d07c26d53e419efa6fef5ca924c9ff484c7517fa8a4beae1"}},{"ruleId":"D2","level":"warning","message":{"text":"GlxDisplay.CreateContext (cognitive 19): GlxDisplay.CreateContext 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":"src/Avalonia.X11/Glx/GlxDisplay.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eec9e7f9dc2515426605fc88dbd81dfdb8f5139538df66ce81cb878f451fe41"}},{"ruleId":"D2","level":"warning","message":{"text":"UnicodeDataGenerator.AssignScriptExtensions (cognitive 19): UnicodeDataGenerator.AssignScriptExtensions 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":"src/tools/Avalonia.UnicodeTrieGenerator/UnicodeDataGenerator.cs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c9dbf4c3cecfbf54213d5a30b5b57041e2a5a80409f4a4e2c8d7bab51a28718"}},{"ruleId":"D2","level":"warning","message":{"text":"TabNavigation.GetPrevTabWithPrevIndex (cognitive 18): TabNavigation.GetPrevTabWithPrevIndex 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"cacb29913d5abe0bc6842406226e0f0cb818f903c064a9c4f682232ca513e81a"}},{"ruleId":"D2","level":"warning","message":{"text":"Color.ToHsv (cognitive 18): Color.ToHsv 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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd29e06fe7ef5ba0c3f63db480c0cd23766a2d67d829194377ed90ca066a20a8"}},{"ruleId":"D2","level":"warning","message":{"text":"HslColor.TryParse (cognitive 18): HslColor.TryParse 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":"src/Avalonia.Base/Media/HslColor.cs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"c270b29cf1a0800c03f5965f8b1f962f9aa987ff1d9dc187ba85bb071e6fb5a7"}},{"ruleId":"D2","level":"warning","message":{"text":"HsvColor.TryParse (cognitive 18): HsvColor.TryParse 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":"src/Avalonia.Base/Media/HsvColor.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"a438408487daf3e539b59fc907387151cdeb7ac3b7563127b7e10ddace1d9920"}},{"ruleId":"D2","level":"warning","message":{"text":"EllipticalArc.BuildArc (cognitive 18): EllipticalArc.BuildArc 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":"src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs"},"region":{"startLine":866}}}],"partialFingerprints":{"codehealthFindingId/v1":"657f9e4a02a94f7690f3cc08cd2fc3e50ad1c7588c356d701ab9175dff7a9bb4"}},{"ruleId":"D2","level":"warning","message":{"text":"FormattedTextSource.CreateTextStyleRun (cognitive 18): FormattedTextSource.CreateTextStyleRun 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":"src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"794cbd6b6a9d1e9941ef48c3a19bbb013d2ad86287658ed6f67e63e7e132f4a7"}},{"ruleId":"D2","level":"warning","message":{"text":"TextLayout.GetHitTestResult (cognitive 18): TextLayout.GetHitTestResult 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":"src/Avalonia.Base/Media/TextFormatting/TextLayout.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"d106639732128e68f0c34f0e45036d5632849d59e9851737054db118a1ac252c"}},{"ruleId":"D2","level":"warning","message":{"text":"ManagedDispatcherImpl.RunLoop (cognitive 18): ManagedDispatcherImpl.RunLoop 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":"src/Avalonia.Base/Platform/ManagedDispatcherImpl.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"f40e978d338c0c7063879fbbfa55e4aaf4c1c7a28fa3e8d754e5b3366d07740f"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardAssetLoader.TryGetAsset (cognitive 18): StandardAssetLoader.TryGetAsset 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":"src/Avalonia.Base/Platform/StandardAssetLoader.cs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"92a5417255df9bfeb62642c8912e8f2876557d4d53764b910544afff24c75f79"}},{"ruleId":"D2","level":"warning","message":{"text":"TokenParser.TryParseCall (cognitive 18): TokenParser.TryParseCall 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":"src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc8178e72b10b73e21493141dff5d1d41491f523724f200ef0ecdf2275f6402"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeNameAndClassSelector.Evaluate (cognitive 18): TypeNameAndClassSelector.Evaluate 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":"src/Avalonia.Base/Styling/TypeNameAndClassSelector.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e2a35212ccb74d873573514beb5ee5d9f1a59e2f5150b0c8d5a5a6ab064ca9"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorHelper.ToDisplayName (cognitive 18): ColorHelper.ToDisplayName 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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorHelper.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"365a662e6296af2ff04d38fdd6a04c6b02c10286ddee197624e7f9f4c0e47e2a"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandBar.TrimOrphanedSeparatorsFromVisibleCommands (cognitive 18): CommandBar.TrimOrphanedSeparatorsFromVisibleCommands 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":"src/Avalonia.Controls/CommandBar/CommandBar.cs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"d090d7013ec543fa0496035309d749f57464d780e6fdacf36cc0f760d39cbd14"}},{"ruleId":"D2","level":"warning","message":{"text":"MarginMultiplierConverter.Convert (cognitive 18): MarginMultiplierConverter.Convert 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":"src/Avalonia.Controls/Converters/MarginMultiplierConverter.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"731e0357a943babdde35b033da9541c066979d9cb83ec12501a0b462f7d890be"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectableTextBlock.OnPointerMoved (cognitive 18): SelectableTextBlock.OnPointerMoved 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":"src/Avalonia.Controls/SelectableTextBlock.cs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d3dfafd9cee683b44de0c6fc6971cf04a3ffe295a32af48c86e0962cef8ea93"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingCarouselPanel.MeasureSinglePageOverride (cognitive 18): VirtualizingCarouselPanel.MeasureSinglePageOverride 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d301a289a07fa914ffe48566e704fcf928a95bd477ee8afcb133ae3b44e2ec3"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingStackPanel.GetControl (cognitive 18): VirtualizingStackPanel.GetControl 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"d767d526d99137d12559babb7c6063e4e53ab2323f34b084a77b6ea6ad3d7f30"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingStackPanel.CalculateExtendedViewport (cognitive 18): VirtualizingStackPanel.CalculateExtendedViewport 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"b67f0ca3330daefcaa44aa7b023b254d4a34e69a29125bc1dfeb8737fc8fbf23"}},{"ruleId":"D2","level":"warning","message":{"text":"PasteboardItemToDataTransferItemWrapper.TryGetRawCore (cognitive 18): PasteboardItemToDataTransferItemWrapper.TryGetRawCore 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":"src/iOS/Avalonia.iOS/Clipboard/PasteboardItemToDataTransferItemWrapper.cs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"b512b6b33e20df174b044b4261c87cfada6c9499a29a63f78e3fcba08030f69f"}},{"ruleId":"D2","level":"warning","message":{"text":"WaylandClipboardImpl.SerializeForMimeAsync (cognitive 18): WaylandClipboardImpl.SerializeForMimeAsync 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":"src/Avalonia.Wayland/Clipboard/WaylandClipboardImpl.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f230bb0ab2119dc2e849b2a631ef8fe584686b88da44c24e2d92a8dac537fa7"}},{"ruleId":"D2","level":"warning","message":{"text":"SeatListener.Done (cognitive 18): SeatListener.Done 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":"src/Avalonia.Wayland/Server/Transient/WaylandTextInputV3.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"d30415ce1b9223eff9b9e9d8399788107516a589b2770ef508e5b4643c4e71d8"}},{"ruleId":"D2","level":"warning","message":{"text":"DataFormatHelper.ToDataFormats (cognitive 18): DataFormatHelper.ToDataFormats 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":"src/Avalonia.X11/Selections/DataFormatHelper.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb52c88376bfd42e5fe6ff0aad407cf4accb650ab07c8756c9a519cab7d22e4"}},{"ruleId":"D2","level":"warning","message":{"text":"X11Window.Cleanup (cognitive 18): X11Window.Cleanup 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":1110}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae29abc8e99441b1e06034f0236de0d7e213c321411717ca07b355ebb908d656"}},{"ruleId":"D2","level":"warning","message":{"text":"DrmOutput.Init (cognitive 18): DrmOutput.Init 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":"src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"64955f4022b2ee17e015977f6ac829e4bc998a20b9ee69c06e5f3ef70fd41cdb"}},{"ruleId":"D2","level":"warning","message":{"text":"FadeThroughTransition.Start (cognitive 18): FadeThroughTransition.Start 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":"samples/ControlCatalog/Pages/NavigationPage/Transitions/FadeThroughTransition.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d799515bfab91449566a2710cb0253c6e495a59a106280bc678ad5bfedbae36"}},{"ruleId":"D2","level":"warning","message":{"text":"MainWindow.ListBuffer (cognitive 18): MainWindow.ListBuffer 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":"samples/TextTestApp/MainWindow.axaml.cs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"612058d5e7d96478548f87a18ad412ec02c1e8029da85f71d0f01261b4954c1b"}},{"ruleId":"D2","level":"warning","message":{"text":"DesignXamlLoader.ParseRuntimeDeps (cognitive 18): DesignXamlLoader.ParseRuntimeDeps 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":"src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fa59d94cc862b17c896672ddf34632a3c5d5f81c7935d3d4a77691e1460f851"}},{"ruleId":"D2","level":"warning","message":{"text":"SubtypesFactoryGenerator.PopulateMethodTargets (cognitive 18): SubtypesFactoryGenerator.PopulateMethodTargets 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":"src/tools/DevGenerators/SubtypesFactoryGenerator.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ca6b3a9fe97f34b0f6a8237ceca2207fc090cc1811e3383d47a45f481ed6cea"}},{"ruleId":"D2","level":"warning","message":{"text":"Imm32InputMethod.HandleComposition (cognitive 18): Imm32InputMethod.HandleComposition 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":"src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"5749a711690d1fabe365156ed58cc938776b53b9a96e421d99bc4e4fbc729462"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.HitTestNCA (cognitive 18): WindowImpl.HitTestNCA 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":"src/Windows/Avalonia.Win32/WindowImpl.CustomCaptionProc.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7db91b50b8f35ac862cff023c80293590eb1aeb7385e5d2c8f31904c25dbdf7"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaSwapChainPanel.PopulateDataPackageAsync (cognitive 18): AvaloniaSwapChainPanel.PopulateDataPackageAsync 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":"src/Windows/Avalonia.WinUI/AvaloniaSwapChainPanel.cs"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"acaef1d6e43a1f4baa746d03198b2be0379a7a81599d7197fbb29c302afadd48"}},{"ruleId":"D2","level":"warning","message":{"text":"Animation.Apply (cognitive 17): Animation.Apply 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":"src/Avalonia.Base/Animation/Animation.cs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"81d8a01c7a7f09aabd8eaedf9aa2a05c25924db5e5f67ce5919c87ffc83ce267"}},{"ruleId":"D2","level":"warning","message":{"text":"BindingExpressionVisitor.VisitMethodCall (cognitive 17): BindingExpressionVisitor.VisitMethodCall 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":"src/Avalonia.Base/Data/Core/Parsers/BindingExpressionVisitor.cs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"61983955b16f2f8d92b584369121fbdcca44c5e506dae1d442a6cc85a53c3727"}},{"ruleId":"D2","level":"warning","message":{"text":"TabNavigation.GetNextTabWithNextIndex (cognitive 17): TabNavigation.GetNextTabWithNextIndex 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"095412d152a09ef15fcdf674a9797b0b9fc78bf1f3a1788c9f9a1f6c300b386b"}},{"ruleId":"D2","level":"warning","message":{"text":"XYFocusAlgorithms.CalculatePrimaryAxisDistance (cognitive 17): XYFocusAlgorithms.CalculatePrimaryAxisDistance has cognitive 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":"src/Avalonia.Base/Input/Navigation/XYFocusAlgorithms.cs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"20eb2f987d4f765a78b67fe87c28b2cdd36edf9d5e58e245edc85228e67a66e2"}},{"ruleId":"D2","level":"warning","message":{"text":"EventRoute.RaiseEventImpl (cognitive 17): EventRoute.RaiseEventImpl 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":"src/Avalonia.Base/Interactivity/EventRoute.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"f292c7becd37c8e6ac2be2f31747b89b2ded516a0b49a790983c246e2b922334"}},{"ruleId":"D2","level":"warning","message":{"text":"FontFamily.FontFamily.ctor (cognitive 17): FontFamily.FontFamily.ctor 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":"src/Avalonia.Base/Media/FontFamily.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"a726a6d28e8023deed9ec5d8bf93a1c0fc0aa523c80d04d54f16f7b5c8f64fe0"}},{"ruleId":"D2","level":"warning","message":{"text":"FontCollectionBase.TryGetNearestMatchCore (cognitive 17): FontCollectionBase.TryGetNearestMatchCore 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"51fc7f2eaddd2e0442c09eaa560bdbec6fde5b48bc7fd1c9fcc0da4895e64bb5"}},{"ruleId":"D2","level":"warning","message":{"text":"TextFormatterImpl.CoalesceLevels (cognitive 17): TextFormatterImpl.CoalesceLevels 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f4142549dbc4662a7fb14dd3fdc28e07a0372036a034b8bac6b0cc65832b26"}},{"ruleId":"D2","level":"warning","message":{"text":"DispatcherPriority.ToString (cognitive 17): DispatcherPriority.ToString 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":"src/Avalonia.Base/Threading/DispatcherPriority.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae31f6512fcab20f0106327f2141d0dbf9828ae4b9eba1f9420d88642183c261"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorView.OnPropertyChanged (cognitive 17): ColorView.OnPropertyChanged 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":"src/Avalonia.Controls.ColorPicker/ColorView/ColorView.cs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"a246e7ad4f1debe79efa0b7b1422ead63234cdd066468aebe0cd6ebb4a883d33"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoCompleteBox.OnKeyDown (cognitive 17): AutoCompleteBox.OnKeyDown 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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b856b9ed5a4cdae3a59c0b84134d56bd8739720cf862fabe601c776c62ea4d8"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoCompleteBox.RefreshView (cognitive 17): AutoCompleteBox.RefreshView 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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"641f9134c59c11cf367b72205f16427c0b734144af2799956c8f259cb7222266"}},{"ruleId":"D2","level":"warning","message":{"text":"TimePickerPresenter.OnConfirmed (cognitive 17): TimePickerPresenter.OnConfirmed 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":"src/Avalonia.Controls/DateTimePickers/TimePickerPresenter.cs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"b718b7b2c1acd25f4a6f805d547f594901944d27442632bcbd1ec121a11b18f7"}},{"ruleId":"D2","level":"warning","message":{"text":"DockPanel.MeasureOverride (cognitive 17): DockPanel.MeasureOverride 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":"src/Avalonia.Controls/DockPanel.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"e33b72e023fb54fc76ed1766f1c544e1744a37605ca6eb06c908ff2df6d13434"}},{"ruleId":"D2","level":"warning","message":{"text":"TabbedPage.OnKeyDown (cognitive 17): TabbedPage.OnKeyDown 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":"src/Avalonia.Controls/Page/TabbedPage.cs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"875a8d35521dad6e701c342fdf632ae6cf06734e5b7f7e2ae51d5cbb13278a37"}},{"ruleId":"D2","level":"warning","message":{"text":"ScrollContentPresenter.OnPointerWheelChanged (cognitive 17): ScrollContentPresenter.OnPointerWheelChanged 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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":699}}}],"partialFingerprints":{"codehealthFindingId/v1":"854d9d92c040d9774af9258a1854d6fce1e4724b0ad7e6306bb6c4cd1d21308c"}},{"ruleId":"D2","level":"warning","message":{"text":"TextBlock.ArrangeOverride (cognitive 17): TextBlock.ArrangeOverride 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":"src/Avalonia.Controls/TextBlock.cs"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"acb1881ca00149c8c0c25bfa877fbc14c732f0107d57c8f4aa869a2b868b0897"}},{"ruleId":"D2","level":"warning","message":{"text":"TopLevel.TopLevel.ctor (cognitive 17): TopLevel.TopLevel.ctor has cognitive complexity 17 (threshold 15). Most of this is not in the body itself: 4 of the 17 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 293, 256). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TopLevel.cs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0da922454322dc2b224c0301462e51e9ed9044aa8604a8d3a73d2f4442f04a0"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleWebSocket.ReceiveMessage (cognitive 17): SimpleWebSocket.ReceiveMessage 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":"src/Avalonia.DesignerSupport/Remote/HtmlTransport/SimpleWebSocketHttpServer.cs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a62e3d3bbd5f2ba9e25062240a0b85816ddb97c85112206c506ffba00cd00fa"}},{"ruleId":"D2","level":"warning","message":{"text":"VulkanDevice.Create (cognitive 17): VulkanDevice.Create 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":"src/Avalonia.Vulkan/Interop/VulkanDevice.Create.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"af97c5a0c761587cee1486fca8d9202db01a6a3c5fe38e098af5b2f94ff52cf2"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidScreen.Refresh (cognitive 17): AndroidScreen.Refresh 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":"src/Android/Avalonia.Android/Platform/AndroidScreens.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"a30ac48c786d35e951d255badb7e1050f7d78d1410a283c0e493a886ac478ccd"}},{"ruleId":"D2","level":"warning","message":{"text":"HeadlessVncFramebufferSource.HeadlessVncFramebufferSource.ctor (cognitive 17): HeadlessVncFramebufferSource.HeadlessVncFramebufferSource.ctor has cognitive complexity 17 (threshold 15). Most of this is not in the body itself: 0 of the 17 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 40, 62, 77, \u2026). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Headless/Avalonia.Headless.Vnc/HeadlessVncFramebufferSource.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e1a47996db86b40b544a6ba1424f80e3a616c9a0750e26207f50e06530b69f0"}},{"ruleId":"D2","level":"warning","message":{"text":"LibInputBackend.HandleTouch (cognitive 17): LibInputBackend.HandleTouch 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":"src/Linux/Avalonia.LinuxFramebuffer/Input/LibInput/LibInputBackend.Touch.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"b171e83c9982e473f4e43af7f288ad77fd84e308549349adff7072421c4ce2dd"}},{"ruleId":"D2","level":"warning","message":{"text":"ClipboardPage.CopyFiles (cognitive 17): ClipboardPage.CopyFiles 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":"samples/ControlCatalog/Pages/ClipboardPage.xaml.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"628441454b0e43326ecf3bd3a29221d2eb8002f9af566fe5394f884b96d995ba"}},{"ruleId":"D2","level":"warning","message":{"text":"DragAndDropPage.AddHandlers (cognitive 17): DragAndDropPage.AddHandlers 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":"samples/ControlCatalog/Pages/DragAndDropPage.xaml.cs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"451374836787d4d8407407bdc93cc2be30ccc8d32de7b7f1f9e98074327b0c13"}},{"ruleId":"D2","level":"warning","message":{"text":"FluidNavBar.Render (cognitive 17): FluidNavBar.Render 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":"samples/ControlCatalog/Pages/TabbedPage/FluidNavBar/FluidNavBar.cs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"0368e6ab273211d508b2afb511a49cb0a362ebe3084668b16834fc7335c90cce"}},{"ruleId":"D2","level":"warning","message":{"text":"GeometryGroupImpl.GeometryGroupImpl.ctor (cognitive 17): GeometryGroupImpl.GeometryGroupImpl.ctor 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":"src/Skia/Avalonia.Skia/GeometryGroupImpl.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b491adc7a300b1b839a2c0a1e60e14838404eaca43f9cb18db2cc4d5a0adfaa"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPaletteResources.TryGetResource (cognitive 17): ColorPaletteResources.TryGetResource 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":"src/Avalonia.Themes.Fluent/ColorPaletteResources.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4001f0a2abc91fb1759f79baf92feb70510a4df5fd30c946e4867ff19ebf897"}},{"ruleId":"D2","level":"warning","message":{"text":"CompileAnalyzer.AnalyzePropertyMethods (cognitive 17): CompileAnalyzer.AnalyzePropertyMethods 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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8db9036d889ffaf355219acb6377ad7088abf63c16d298c91f9921924205919"}},{"ruleId":"D2","level":"warning","message":{"text":"TrayIconImpl.ProcWnd (cognitive 17): TrayIconImpl.ProcWnd 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":"src/Windows/Avalonia.Win32/TrayIconImpl.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"248e63b4b3126771130ad7e0fa360e9406b767fb4894fb87bd00e1e6d63ec839"}},{"ruleId":"D2","level":"warning","message":{"text":"Win32Platform.SetDpiAwareness (cognitive 17): Win32Platform.SetDpiAwareness 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":"src/Windows/Avalonia.Win32/Win32Platform.cs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"993455e2648049b82c03d44838c51f238a0773e8441ade7bea758138039ef405"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaList.CopyTo (cognitive 16): AvaloniaList.CopyTo 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":"src/Avalonia.Base/Collections/AvaloniaList.cs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"d311157ec95cbdf8efd99e1dc882db4513fb01aa49e8e2ad32db92c368a6905e"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicPluginPropertyAccessorNode.OnSourceChanged (cognitive 16): DynamicPluginPropertyAccessorNode.OnSourceChanged 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":"src/Avalonia.Base/Data/Core/ExpressionNodes/Reflection/DynamicPluginPropertyAccessorNode.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"f850871dacf121f183d8761b796dbec15848b2014c68e15eabfa97b38e83aba6"}},{"ruleId":"D2","level":"warning","message":{"text":"ArgumentListParser.ParseArguments (cognitive 16): ArgumentListParser.ParseArguments has cognitive 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, 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":"src/Avalonia.Base/Data/Core/Parsers/ArgumentListParser.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1592f7b23b0fb537d3195654840ff1d1553c463014f7027749d6eeac9d25d46"}},{"ruleId":"D2","level":"warning","message":{"text":"BindingExpressionGrammar.ParseRelativeSource (cognitive 16): BindingExpressionGrammar.ParseRelativeSource 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":"src/Avalonia.Base/Data/Core/Parsers/BindingExpressionGrammar.cs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"2535896f8bd24719588af7a8cee69d6fb6b61117131fd3515addb7178cc95fdc"}},{"ruleId":"D2","level":"warning","message":{"text":"FocusManager.GetTabStopCandidateElement (cognitive 16): FocusManager.GetTabStopCandidateElement 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e581e2d50b4d924261bcfc5b8b2ae32c55b2fbabab3a1e657c0d64970f4760e"}},{"ruleId":"D2","level":"warning","message":{"text":"PullGestureRecognizer.PointerMoved (cognitive 16): PullGestureRecognizer.PointerMoved 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":"src/Avalonia.Base/Input/GestureRecognizers/PullGestureRecognizer.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"46214783608c6dc34b80675c8c6d45e3c1e01ac777624bafc7c53758d53bcc30"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyboardDevice.SetFocusedElement (cognitive 16): KeyboardDevice.SetFocusedElement 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":"src/Avalonia.Base/Input/KeyboardDevice.cs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"eefd14af47491760b2042ca1dfae8dbf4dc9e3fbb5919aeb98d3933551fddc2a"}},{"ruleId":"D2","level":"warning","message":{"text":"PointerOverPreProcessor.OnNext (cognitive 16): PointerOverPreProcessor.OnNext 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":"src/Avalonia.Base/Input/PointerOverPreProcessor.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd08fee337e583d89dc1de91d81f7521153269ca45235bfd56f9d957cdca3337"}},{"ruleId":"D2","level":"warning","message":{"text":"GlyphRun.GetTrailingWhitespaceLengthRightToLeft (cognitive 16): GlyphRun.GetTrailingWhitespaceLengthRightToLeft 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":"src/Avalonia.Base/Media/GlyphRun.cs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d6f51175b7ba8f32edb897e7bca899db1f37d5ca8e9411724143c291209473"}},{"ruleId":"D2","level":"warning","message":{"text":"TextFormatterImpl.ResetTrailingWhitespaceBidiLevels (cognitive 16): TextFormatterImpl.ResetTrailingWhitespaceBidiLevels 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":1125}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9983362e6db4ba7134c63d5e9f086bac6afa0eff4e451064e637d2a20af51c"}},{"ruleId":"D2","level":"warning","message":{"text":"LineBreakEnumerator.LB19 (cognitive 16): LineBreakEnumerator.LB19 has cognitive 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d87d6744c7791b82d0b9be8452f6a92e10aa6c8a7f3e4398c6d8b700156982"}},{"ruleId":"D2","level":"warning","message":{"text":"UnicodeTrieBuilder.CompactIndex2 (cognitive 16): UnicodeTrieBuilder.CompactIndex2 has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeTrieBuilder.cs"},"region":{"startLine":818}}}],"partialFingerprints":{"codehealthFindingId/v1":"7386c679cab827a1b900330776396346e0429f205b757e60057e045b2b067940"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerCompositor.ApplyPendingBatches (cognitive 16): ServerCompositor.ApplyPendingBatches 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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"72287c51e5b7b552a38e57739bebd34e591be6d5ad01ea42732eec953b31c7d9"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyComparer.Equals (cognitive 16): KeyComparer.Equals 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":"src/Avalonia.Base/Utilities/WeakHashList.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b251aec2fe73a4ff8dfdcd7767f7f29b7401986ebd2c15bfbf5fd42f2b59e1"}},{"ruleId":"D2","level":"warning","message":{"text":"WeakHashList.GetAlive (cognitive 16): WeakHashList.GetAlive 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":"src/Avalonia.Base/Utilities/WeakHashList.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"e250f8f43e4dd823f17eef161d8d78610678ceb164c73e37718b2dc29514442b"}},{"ruleId":"D2","level":"warning","message":{"text":"Visual.AffectsRender (cognitive 16): Visual.AffectsRender has cognitive complexity 16 (threshold 15). Most of this is not in the body itself: 4 of the 16 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 460, 450). The decisions are inside those literals, 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 literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Visual.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb8f8e47346a79e7c0f3d058d7ba0c3469cf1f5ff5e1b382c97f14dc5352af9b"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorToHexConverter.TryParseHexFormat (cognitive 16): ColorToHexConverter.TryParseHexFormat 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":"src/Avalonia.Controls.ColorPicker/Converters/ColorToHexConverter.cs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"abdedb49d30f8eae0439f731c50aab045fd3c2104cd012c89d2cee0772e4dc1f"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassicDesktopStyleApplicationLifetime.DoShutdown (cognitive 16): ClassicDesktopStyleApplicationLifetime.DoShutdown 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":"src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c0aeed0e40d76a95190b5d86c1a2177a7a2f1d9aa3eae4d4858639cbc9af169"}},{"ruleId":"D2","level":"warning","message":{"text":"ComboBox.MoveSelection (cognitive 16): ComboBox.MoveSelection 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":"src/Avalonia.Controls/ComboBox.cs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"210d6b60fed9c3b13123f5884a65ccca6ad7977023509ae28fd3b0faf64d26d6"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiPage.OnPropertyChanged (cognitive 16): MultiPage.OnPropertyChanged 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":"src/Avalonia.Controls/Page/MultiPage.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"037e5ef748d619fc94d86dc03afff0e45110a4ede6be6abeae2b1be67277090a"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgressBar.UpdateIndicator (cognitive 16): ProgressBar.UpdateIndicator 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":"src/Avalonia.Controls/ProgressBar.cs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7d288e09f8c5d826991b1301179df0e9443c69062b4eeebdf97e2eec850c085"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionNodeBase.OnItemsAdded (cognitive 16): SelectionNodeBase.OnItemsAdded 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":"src/Avalonia.Controls/Selection/SelectionNodeBase.cs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"52394217c49b4408121a845332fd4255171cf28e09a96a8766b2791f321f58ea"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectionNodeBase.OnItemsRemoved (cognitive 16): SelectionNodeBase.OnItemsRemoved has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Selection/SelectionNodeBase.cs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f6745aad240696c5f38154b3c37e34f6d5f9301c806580e3622f6ca26c0c29e"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeView.SynchronizeItems (cognitive 16): TreeView.SynchronizeItems has cognitive complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TreeView.cs"},"region":{"startLine":974}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4170647ccf62267662d3c3f957de47c6e8006a10d697a7165e979e8de58dcd"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingCarouselPanel.OnItemsChanged (cognitive 16): VirtualizingCarouselPanel.OnItemsChanged 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69674ce244155fd3b7cccde51013120ca5416ea14ee242f80e59f0ccf925979"}},{"ruleId":"D2","level":"warning","message":{"text":"VirtualizingStackPanel.GetOrEstimateAnchorElementForViewport (cognitive 16): VirtualizingStackPanel.GetOrEstimateAnchorElementForViewport 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"af9b7da0163bb3be1023c027728d54b1153d00b8abf749586d0f2d8e67eb9f60"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageProviderApi.TryGetStorageItem (cognitive 16): StorageProviderApi.TryGetStorageItem 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":"src/Avalonia.Native/StorageProviderApi.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdbed18ed7cd5889506a5ef2d1eafb9c229cf41e638e8ada719f8374f1a48a00"}},{"ruleId":"D2","level":"warning","message":{"text":"ClipboardImpl.TryCreateDataItemAsync (cognitive 16): ClipboardImpl.TryCreateDataItemAsync 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":"src/Android/Avalonia.Android/Platform/ClipboardImpl.cs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"504913cbe4dd79f198eabfe3d5ce267e143a81e2bb1ba624a2de606053d62ff0"}},{"ruleId":"D2","level":"warning","message":{"text":"DeleteRegionInCodePointsCommand.Apply (cognitive 16): DeleteRegionInCodePointsCommand.Apply 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":"src/Android/Avalonia.Android/Platform/Input/EditCommand.cs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"e02c12636ad073299359e20a99ed25720da9ce5ee4f43de6dbf2e91405998613"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidStorageFolder.GetItemsAsync (cognitive 16): AndroidStorageFolder.GetItemsAsync 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":"src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb16b6c5722f4ec23c850d1fcc45bfc9ea69ee7d7120e9893be759120dac5bcb"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidStorageFile.MoveAsync (cognitive 16): AndroidStorageFile.MoveAsync 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":"src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"059a6c21bcb1f968197d20535381fd68d960cf3ae93c206a0cc429bae1610804"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidStorageProvider.StartActivity (cognitive 16): AndroidStorageProvider.StartActivity 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":"src/Android/Avalonia.Android/Platform/Storage/AndroidStorageProvider.cs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cbd0a00a64a6e6584b5c709b8d47b3fc336ee91df2383c96d5a1baaa82e7324"}},{"ruleId":"D2","level":"warning","message":{"text":"AtSpiCollectionHandler.CollectMatches (cognitive 16): AtSpiCollectionHandler.CollectMatches 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":"src/Avalonia.FreeDesktop.AtSpi/Handlers/AtSpiCollectionHandler.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"548e21d887eea0b1a7bcd5697bccd0283657ce173a48637c30f9ef9a3cc5f2b7"}},{"ruleId":"D2","level":"warning","message":{"text":"Listener.Key (cognitive 16): Listener.Key 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":"src/Avalonia.Wayland/Server/Transient/WaylandInputDispatcher.Keyboard.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"235f231d14dada6be8173c8bc57857211af4f5a29b11b26ea1b6aef361f6e745"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.ApplyConfigureBatch (cognitive 16): WindowImpl.ApplyConfigureBatch 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":"src/Avalonia.Wayland/WindowImpl.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae013903cd6099621a0d0333a7e07ad9cfbc6a964b0da46c60b064d6c746c1c"}},{"ruleId":"D2","level":"warning","message":{"text":"DataFormatHelper.ToAtom (cognitive 16): DataFormatHelper.ToAtom 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":"src/Avalonia.X11/Selections/DataFormatHelper.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"3059069462a55bba0fb7f5fa37928278c33fb226c49a219ccb7a4030c4b74f4f"}},{"ruleId":"D2","level":"warning","message":{"text":"X11DropTarget.OnXdndEnter (cognitive 16): X11DropTarget.OnXdndEnter 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":"src/Avalonia.X11/Selections/DragDrop/X11DropTarget.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2363bf7abdcfdf01bf74e79678c82760c1fd1d4f2717ad47bc8d8444b00ee87"}},{"ruleId":"D2","level":"warning","message":{"text":"ContentPageCommandBarPage.RebuildCommandBar (cognitive 16): ContentPageCommandBarPage.RebuildCommandBar 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":"samples/ControlCatalog/Pages/ContentPage/ContentPageCommandBarPage.xaml.cs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"86a09733cd1ddb2e0e8e9cad4bcc24421b208777c4587db8dbf27b84795af05e"}},{"ruleId":"D2","level":"warning","message":{"text":"GlVisual.OnRender (cognitive 16): GlVisual.OnRender 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":"samples/ControlCatalog/Pages/OpenGl/OpenGlLeasePage.xaml.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ceff66a7f8abbc7e83a3a88daa3fb8c3a415e59e05df7793a23dd91196a0d5"}},{"ruleId":"D2","level":"warning","message":{"text":"ScreenPage.Render (cognitive 16): ScreenPage.Render 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":"samples/ControlCatalog/Pages/ScreenPage.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"b331347ab28231bde089362669c7f61f64f5c77fae4265f3be1f0c8d012cfba2"}},{"ruleId":"D2","level":"warning","message":{"text":"OnPropertyChangedOverrideAnalyzer.AnalyzeMethod (cognitive 16): OnPropertyChangedOverrideAnalyzer.AnalyzeMethod 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":"src/tools/Avalonia.Analyzers.CSharp/OnPropertyChangedOverrideAnalyzer.cs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2677617dcd1c45aa84956e9d488742fb92cc56805a5d90da75cb5a0acafbb3b2"}},{"ruleId":"D2","level":"warning","message":{"text":"OnPropertyChangedOverrideAnalyzer.AnalyzeMethod (cognitive 16): OnPropertyChangedOverrideAnalyzer.AnalyzeMethod 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":"src/tools/DevAnalyzers/OnPropertyChangedOverrideAnalyzer.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4df95691e458b342030a728264febd30fc96d9a3b4d0f930ad86f4976b72877"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowImpl.Resize (cognitive 16): WindowImpl.Resize 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"4299ba4511f8d08e36f068ec0f98b1b0799f83f69794cdfe2de17a3df644d610"}},{"ruleId":"D2","level":"warning","message":{"text":"WinScreen.GetDisplayName (cognitive 16): WinScreen.GetDisplayName 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":"src/Windows/Avalonia.Win32/WinScreen.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a895b4711e0f3a203a6b8216a1fef4e8da492c8b345274bd1533913ed21a57"}},{"ruleId":"D2","level":"warning","message":{"text":"AvaloniaSwapChainPanel.BuildDataTransferAsync (cognitive 16): AvaloniaSwapChainPanel.BuildDataTransferAsync 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":"src/Windows/Avalonia.WinUI/AvaloniaSwapChainPanel.cs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"428cfcfeab209a24423f100d2f01779aaabef2dd252fc6b2d4032967226f4a46"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.X11/Keysyms.cs: FileTooLong \u2014 2101 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":"src/Avalonia.X11/Keysyms.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dc3de84c82bd779c474cf1ffac55c9b7a7c3407bb80bc7af0648a738890d303"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Interop/UnmanagedMethods.cs: FileTooLong \u2014 2036 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":"src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca5627ca0d699215352fdcb40fd9371f19ee7d9974ebda9a67542d5b9c421a0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: UnmanagedMethods: ClassTooLong \u2014 1561 significant lines (blank, comment-only and punctuation-only lines excluded), 212 methods. Its members are declarations rather than behaviour over shared data \u2014 the type holds no instance state \u2014 so there is nothing to group them by and nothing to delegate. To reduce it, split it by area instead: move each cohesive group of declarations onto its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"54df3d25cc63dbec2d7c24a1bba3c00eedb2629f557bdf65178df34752c28bb6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.X11/X11Structs.cs: FileTooLong \u2014 1628 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":"src/Avalonia.X11/X11Structs.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"283fe635f6718e36f55c9a3b5d994ce713b6515488425c764f2916fbd9b3b681"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WindowImpl: TooManyMethods \u2014 1803 significant lines (blank, comment-only and punctuation-only lines excluded), 97 methods, declared across 4 files: Avalonia.Win32/WindowImpl.cs (66), Avalonia.Win32/WindowImpl.AppWndProc.cs (26), Avalonia.Win32/WindowImpl.CustomCaptionProc.cs (4), Avalonia.Win32/WindowImpl.WndProc.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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c775af89c789b1450d9eb230828f7bc2c73df1c2d24696736c137719c31dfe6b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PooledList: TooManyMethods \u2014 525 significant lines (blank, comment-only and punctuation-only lines excluded), 92 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Collections/Pooled/PooledList.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94c63cb4b9120f0a7b671cf9a2677b6c827b3c4bbba535c5bbf4e28429362f96"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GlInterface: TooManyMethods \u2014 248 significant lines (blank, comment-only and punctuation-only lines excluded), 86 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlInterface.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78982b2d4f0430396a1281add6e1947159c88be0070b9deccf1034bdc96479b1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ColorSpectrum: ClassTooLong \u2014 1096 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a3833ea92063e048a01802fe99aaa3b9adb672e9850ed3019b9944a78540dd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: X11Window: TooManyMethods \u2014 1204 significant lines (blank, comment-only and punctuation-only lines excluded), 80 methods, declared across 2 files: Avalonia.X11/X11Window.cs (66), Avalonia.X11/X11Window.Ime.cs (14). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a0baec9bc0f207f77d532eb237c5f1bac392b8671d761d851b7f01f8af18e0d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Controls/Grid.cs: FileTooLong \u2014 1318 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":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"efbfdb4c825d3c538a091d38008ee772c10cd3161be863824ad6c21fef0c9622"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NavigationPage: TooManyMethods \u2014 1127 significant lines (blank, comment-only and punctuation-only lines excluded), 79 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Page/NavigationPage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"99173ab3cb1321fb8f7ba80c250846148992fbf96210ecb5658e3bc6fee7edf8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Dispatcher: TooManyMethods \u2014 658 significant lines (blank, comment-only and punctuation-only lines excluded), 75 methods, declared across 7 files: Threading/Dispatcher.Invoke.cs (29), Threading/Dispatcher.Queue.cs (16), Threading/Dispatcher.MainLoop.cs (8), Threading/Dispatcher.Timers.cs (7), \u002B3 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Threading/Dispatcher.Invoke.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"204a205c92afec227a11ba4c6aa034b3fe6a58538a573676369e951cc003abf7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Controls/TextBox.cs: FileTooLong \u2014 1239 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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49066d2cb2deb5f01eff040aae3f07f8a25a3177a7e007f7fc4fdd8b4f3d6d0d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AutomationPeer: TooManyMethods \u2014 117 significant lines (blank, comment-only and punctuation-only lines excluded), 70 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":"src/Avalonia.Controls/Automation/Peers/AutomationPeer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf052280767cb287f82229d59ca1533a9d253ecec6f5cca386fed1cf7c8e031"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VirtualizingCarouselPanel: TooManyMethods \u2014 975 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f73da4a0c904120e8f35fe52e4c1d3a863c47b95af471c11ba72cc443cf64383"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Page/NavigationPage.cs: FileTooLong \u2014 1146 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":"src/Avalonia.Controls/Page/NavigationPage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31fcff905968ba59911838cb18094a8980ef9df3bd6ea5c74438fc2f5d528e64"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AutomationNode: TooManyMethods \u2014 319 significant lines (blank, comment-only and punctuation-only lines excluded), 66 methods, declared across 7 files: Avalonia.Win32.Automation/AutomationNode.cs (33), Avalonia.Win32.Automation/AutomationNode.Scroll.cs (9), Avalonia.Win32.Automation/AutomationNode.Selection.cs (8), Avalonia.Win32.Automation/AutomationNode.RangeValue.cs (7), \u002B3 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Windows/Avalonia.Win32.Automation/AutomationNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9efb35f34144a5c50dcee6a75374a8eee21e7ff073d78adfa237b5795120d78e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Utilities/FrugalList.cs: FileTooLong \u2014 1091 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b481819b9f6d34dd33a304fc7af17090e2fd857c241e387653bf8f3b3707c37"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.X11/X11Window.cs: FileTooLong \u2014 1043 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de0e97e3ebb29b30e96857806b1e248e6fde7b5ded83cf24cfc90f25d74b9c28"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ColorSpectrum/ColorSpectrum.cs: FileTooLong \u2014 1032 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e22d507ae89212a72c9e7198595272712170f4403d2d149b580bfe140611a1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Calendar: TooManyMethods \u2014 882 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e91de7a1bab954b9ff9b672cc1fd55750485d13ff0bfc60b9e0b6d03f4d265"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextBox: TooManyMethods \u2014 1197 significant lines (blank, comment-only and punctuation-only lines excluded), 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c4b33375ea8e704839f12474801261d0f637cc40ab6063e52a4143b5c192cee"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ThrowHelper: TooManyMethods \u2014 368 significant lines (blank, comment-only and punctuation-only lines excluded), 60 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":"src/Avalonia.Base/Collections/Pooled/ThrowHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49e253deadecc2c18f58e191924610da3f8c199e23c70ba364e4ea7e75fe8e58"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Controls/VirtualizingCarouselPanel.cs: FileTooLong \u2014 997 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"889d2aeff0f8dd9917166f50098e1274a48e2db515e405a2973c06f6bf12ae55"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AutoCompleteBox: TooManyMethods \u2014 572 significant lines (blank, comment-only and punctuation-only lines excluded), 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6790bfcf83d0381e79c1d753181d2af1eeb1adf27da0b7100af1179231297f0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ValueStore: TooManyMethods \u2014 637 significant lines (blank, comment-only and punctuation-only lines excluded), 58 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/PropertyStore/ValueStore.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2940da6af94accd9775fbc581bebf28135d4224538af6f242ba6705e0ee1c48"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SelectingItemsControl: TooManyMethods \u2014 626 significant lines (blank, comment-only and punctuation-only lines excluded), 55 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Primitives/SelectingItemsControl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f11e33808f889d44c2adf9c68582e6e15d5ee80e3625ccb2c48e29a5a694916f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Calendar/Calendar.cs: FileTooLong \u2014 914 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":"src/Avalonia.Controls/Calendar/Calendar.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8833f9f9a793efeedd19c7ee54c54d6f5f7549b2ea1d42dd11e78eadb6b505af"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Win32/WindowImpl.cs: FileTooLong \u2014 904 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c0a00520205d8b70cd160a509397e4977bf755c221082f5d1f7e2b330acae6d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Remote.Protocol/MetsysBson.cs: FileTooLong \u2014 886 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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39067af52ee849cd35cd03304638ddacbaad99438b5a6a54895743aada17b08d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NumericUpDown: TooManyMethods \u2014 456 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":"src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e0440dc121f90f51f109a85bb9f462c3e3c6d6340e566db9418043fb10379b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AvaloniaObject: TooManyMethods \u2014 303 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":"src/Avalonia.Base/AvaloniaObject.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf84415f50a8eb8483d8b070156399dcef3e9c69206f3fb21cb59bf0ddc539c4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AvnAutomationPeer: TooManyMethods \u2014 143 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":"src/Avalonia.Native/AvnAutomationPeer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"636edaac13e47aae99226d543bbe253b8d8370f27de127186e6829ccf676f3f5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TextLineImpl: ClassTooLong \u2014 701 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ae7f12e6df7ced2b4fc924e3955e27ee19b2d5c63d0ac395ee0128753ae2a24"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InputElement: TooManyMethods \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded), 52 methods, declared across 2 files: Input/InputElement.cs (47), Input/InputElement.Gestures.cs (5). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/InputElement.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5815c8646937c0329a6a28e10d47ddd1b3664b390b6485b69b88205fd919686"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScrollViewer: TooManyMethods \u2014 304 significant lines (blank, comment-only and punctuation-only lines excluded), 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/ScrollViewer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"258587ec6e61215e0728047ee8027240862b3b40f86b9a7805d49d3e594ce39b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Window: TooManyMethods \u2014 652 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7575461a498ec3809106a70703ece8a719e5047fcf4562a9c1bc1bd67575e4e4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LineBreakEnumerator: TooManyMethods \u2014 596 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d224969053bcd3f84116436488ccd9da62ecf0ed95b4a378d16ff5a0deaca87"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StyledElement: TooManyMethods \u2014 419 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":"src/Avalonia.Base/StyledElement.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f58bec31bca8314a061541e879f0bb8c8944ffb1385f1cceaaf10c1f8f75661"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DrawingContext: TooManyMethods \u2014 133 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":"src/Avalonia.Base/Media/DrawingContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"312df0444259ad99a1916d028b1df492a99b702caa45f3ad0c83ce492040042d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Win32/WindowImpl.AppWndProc.cs: FileTooLong \u2014 822 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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e32e0899b217e140dab45b885c3f295591b4044e0a02a9eb691ecaf215dd179"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DrawingContextImpl: TooManyMethods \u2014 701 significant lines (blank, comment-only and punctuation-only lines excluded), 49 methods, declared across 2 files: Avalonia.Skia/DrawingContextImpl.cs (46), Avalonia.Skia/DrawingContextImpl.Effects.cs (3). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5134627bb60501a78d6ec2d09ed421b192ab9d32da6802f07bb9b939291dc1c0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BidiAlgorithm: ClassTooLong \u2014 651 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd94081db5244ec9c5e18b0c8aa9d891ec88de699869b20c3b08724e346c3c8e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Grid: TooManyMethods \u2014 1084 significant lines (blank, comment-only and punctuation-only lines excluded), 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"feb68e6f1d2fc9694868f75041cac5f801eff87a8e1d415928a813c69b07ffa3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: XYFocus: TooManyMethods \u2014 434 significant lines (blank, comment-only and punctuation-only lines excluded), 48 methods, declared across 4 files: Navigation/XYFocus.Properties.cs (24), Navigation/XYFocus.Impl.cs (11), Navigation/XYFocus.FindElements.cs (7), Navigation/XYFocus.Bubbling.cs (6). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/Navigation/XYFocus.Properties.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"197138090ef7dc914f72f5e1efd21a3dc65d9b54e86b4931d47c825b71bc389f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Skia/DrawingContextImpl.cs: FileTooLong \u2014 800 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":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82ae6117e64ddbedb0bd2cf361a3c6b4f88cd7339050dde1bf9248b4d0785c2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Controls/VirtualizingStackPanel.cs: FileTooLong \u2014 768 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":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a42875eef9d3cfe0cf65ddc8bc70690cdb76f70e8e2504a245865c5bc2bfd1d4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FocusManager: TooManyMethods \u2014 550 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9494595f64a28ba04f44e438f2a0819a2226e819c99f4c30df2c81168dcd88d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AvaloniaSwapChainPanel: TooManyMethods \u2014 524 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Windows/Avalonia.WinUI/AvaloniaSwapChainPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6125b5da8a2e24e4896dfcb5d5b19648f0affeb40f56bc68e7a7d593c535c850"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScrollBar: TooManyMethods \u2014 265 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Primitives/ScrollBar.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb259f9abfde7e1e7f85350b886efd0ee3e9510f5a2def85c236a9e51d021283"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HeadlessWindowImpl: TooManyMethods \u2014 200 significant lines (blank, comment-only and punctuation-only lines excluded), 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37ae44d2bc43c2960f31232c0e85c0cd8b4cb50555314fb636a5aa6fd39ed123"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ServerCompositionVisual: TooManyMethods \u2014 345 significant lines (blank, comment-only and punctuation-only lines excluded), 45 methods, declared across 8 files: ServerCompositionVisual/ServerCompositionVisual.DirtyInputs.cs (13), ServerCompositionVisual/ServerCompositionVisual.cs (9), ServerCompositionVisual/ServerCompositionVisual.Act.cs (7), ServerCompositionVisual/ServerCompositionVisual.Adorners.cs (7), \u002B4 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.DirtyInputs.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1bc72d9a4e21893731bcec982654280bf1245d9b96291aa9d13f86279f72a56"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ControlAutomationPeer: TooManyMethods \u2014 173 significant lines (blank, comment-only and punctuation-only lines excluded), 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Automation/Peers/ControlAutomationPeer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2446de2d107f104e80ea8c6b5c87b50571228322a4c9aa68a9423b9adc3600"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Unicode/LineBreakEnumerator.cs: FileTooLong \u2014 746 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37b7a240bf781acec0342e59bf844af74a97a7998dacb3c91df0039147c44411"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TextFormatting/TextLineImpl.cs: FileTooLong \u2014 707 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":"src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f18ff13feaaf8695c1209b972b03a497eda4c417e01959101da7e8a30b1608a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: XLib: ClassTooLong \u2014 563 significant lines (blank, comment-only and punctuation-only lines excluded), 198 methods, declared across 2 files: Avalonia.X11/XLib.cs (195), Avalonia.X11/XLib.Helpers.cs (3). Its members are declarations rather than behaviour over shared data \u2014 the type holds no instance state \u2014 so there is nothing to group them by and nothing to delegate. To reduce it, split it by area instead: move each cohesive group of declarations onto its own smaller type, so no one type has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.X11/XLib.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2565e995d3e12fc7eadb0c80ea3eec810f80a8bee207c0b6d73cad183469b29"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PooledStack: TooManyMethods \u2014 239 significant lines (blank, comment-only and punctuation-only lines excluded), 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Collections/Pooled/PooledStack.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"300c6ead830bc50ffb873b6234f01222cb3e759eb2b3de5903685eac12e6863d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AutomationProperties: TooManyMethods \u2014 220 significant lines (blank, comment-only and punctuation-only lines excluded), 42 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":"src/Avalonia.Controls/Automation/AutomationProperties.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"04c74751152d2091780772e2207570c0d9f286b255b8a9dff108208d9c7ee265"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Unicode/BiDiAlgorithm.cs: FileTooLong \u2014 684 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48965c46dd7216dacb74a7eedf53b02787f925e8ea5a7951db283003b28b82c6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.Controls/Window.cs: FileTooLong \u2014 684 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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a05f00a1b3e0fad808d2a7f792506cd1e504c44dc7ef30512d6bbbc363c33fca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CalendarDatePicker: TooManyMethods \u2014 420 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94db64f1aa940ebae925ed2477d27917d628f37596da8a494fac2d05ccd213e0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MenuItem: TooManyMethods \u2014 346 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/MenuItem.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f2beb8d6dfb135315b81cc6e57b8f5e337523954e7418988f61829d05b37c4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Vector: TooManyMethods \u2014 100 significant lines (blank, comment-only and punctuation-only lines excluded), 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Vector.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbd7344e4040ef42303e85f9bcca97eea7152546873e7afd3ee5567470a1123a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EglInterface: TooManyMethods \u2014 99 significant lines (blank, comment-only and punctuation-only lines excluded), 41 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":"src/Avalonia.OpenGL/Egl/EglInterface.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fe178b52a1cb33a5f61839664f1b7206f29565d245f0f7ef34fc0730a1a6add"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Media/FormattedText.cs: FileTooLong \u2014 675 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":"src/Avalonia.Base/Media/FormattedText.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eaa994a97bcb5139c08f724528c4c6c880623b4ad77d3892c3eecbef61eb309"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TextFormatterImpl: ClassTooLong \u2014 538 significant lines (blank, comment-only and punctuation-only lines excluded), 17 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0ed555bcacb00eb13a67d9e33f334f0ce8cea1ff3f674ed13a87166b279c6a8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VirtualizingStackPanel: TooManyMethods \u2014 745 significant lines (blank, comment-only and punctuation-only lines excluded), 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/VirtualizingStackPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a76cbcdc469fc065062084d33123bee6a931c1b46b0dc18eb67e9e82a7ea36a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompositorDrawingContextProxy: TooManyMethods \u2014 225 significant lines (blank, comment-only and punctuation-only lines excluded), 40 methods, declared across 2 files: Server/DrawingContextProxy.cs (35), Server/DrawingContextProxy.PendingCommands.cs (5). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Rendering/Composition/Server/DrawingContextProxy.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0b6ca142fb349b033d17e4343a86ed8df46868cbeb29c4675a1c37adca0a2dc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: AutoCompleteBox/AutoCompleteBox.cs: FileTooLong \u2014 663 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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c46726ed194c4b2589ba8ae9ffdb8f566070e9f6a3d67c1a4618c6a3de5a86"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: PropertyStore/ValueStore.cs: FileTooLong \u2014 661 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":"src/Avalonia.Base/PropertyStore/ValueStore.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b49a084351b2ba0b5b861685caa00a46e7b28cc074b91db70ef9b90cad01ed"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompositionHitTestAabbTree: TooManyMethods \u2014 478 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":"src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed85b06ffda9f2c5c30ef7e2c4e3d905ed6aad1628f276f010ddd85d9aa11390"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Button: TooManyMethods \u2014 278 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":"src/Avalonia.Controls/Button.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eff0d108149936ead79e422205e2a57dba4f30beef16e75e8aac240b2ce85322"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Primitives/SelectingItemsControl.cs: FileTooLong \u2014 649 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Primitives/SelectingItemsControl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38700587bb0f0ceed177d5199304c1a0f20d212bdc06c6c06532ab7cc6d36ffb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ItemsControl: TooManyMethods \u2014 303 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":"src/Avalonia.Controls/ItemsControl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64d3919d7388b38066a24002656b73749ac577eb4c51b1a4c42d8711b5ea43d2"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ExpressionVariant: ClassTooLong \u2014 497 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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc8037b92b62d83b9850aabba6dd23d08cb1bcfa464cfcba348a5078b3b1dec"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Popup: TooManyMethods \u2014 419 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Primitives/Popup.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b8b63e4a723da93ff3c15e65be39f112eeb2bdac2c9a0a3b18045acec63e522"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AvaloniaProperty: TooManyMethods \u2014 266 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/AvaloniaProperty.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"803b1f49cdc32251c0438c8ec3995ae62b570246323ddf5b894e93f39d187778"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AvaloniaList: TooManyMethods \u2014 258 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Collections/AvaloniaList.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74ad1725196b75e338cc8cde59bd6d0f5b2249e48addec5f781837cb4143239f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ServerCompositor: TooManyMethods \u2014 249 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods, declared across 3 files: Server/ServerCompositor.cs (21), Server/ServerCompositor.Passes.cs (8), Server/ServerCompositor.UserApis.cs (8). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"65435a273d7afdbec47eb0b35237a1a835da5ddcb78806579b42b1ca11041988"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RelativePanel: TooManyMethods \u2014 168 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods, declared across 2 files: Avalonia.Controls/RelativePanel.AttachedProperties.cs (33), Avalonia.Controls/RelativePanel.cs (4). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/RelativePanel.AttachedProperties.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49c6fd75989869e74b76b1e9bdce494258c3d242b689672b753dafd911c42640"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AvaloniaToXamlPeerProxy: TooManyMethods \u2014 155 significant lines (blank, comment-only and punctuation-only lines excluded), 37 methods, declared across 8 files: Automation/AvaloniaToXamlPeerProxy.cs (23), Automation/AvaloniaToXamlPeerProxy.Scroll.cs (4), Automation/AvaloniaToXamlPeerProxy.Selection.cs (4), Automation/AvaloniaToXamlPeerProxy.ExpandCollapse.cs (2), \u002B4 more file(s). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Windows/Avalonia.WinUI/Automation/AvaloniaToXamlPeerProxy.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d827ec3e1f97620094a291ecf0c50dcf1a702017e6637c78855e727c585cd86"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Gtk: TooManyMethods \u2014 120 significant lines (blank, comment-only and punctuation-only lines excluded), 37 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":"src/Avalonia.X11/NativeDialogs/Gtk.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9d38f5be90efddbcb5d850371b7b38d02e3b2427dff08c93e7a31324c581d3"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: XkbKeyTransform: ClassTooLong \u2014 490 significant lines (blank, comment-only and punctuation-only lines excluded), 5 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":"src/Avalonia.Wayland/XkbKeyTransform.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"866c779fa8590d6e6e622aaa963253f1c4a9e3f7222941eb1fa672536e237d52"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: CompilerExtensions/XamlIlBindingPathHelper.cs: FileTooLong \u2014 610 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dec92124b75766ea9c51182f4aa5c5fe524e3580bae5eb51a333171e103cfe99"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TreeView: TooManyMethods \u2014 428 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TreeView.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3c8df1a992dd72916fcc287cfbda195fcd0b7caf30378d6a965f874e824aadf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TabbedPage: TooManyMethods \u2014 400 significant lines (blank, comment-only and punctuation-only lines excluded), 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Page/TabbedPage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a7286fb390e2a1ebd2949afb608a9f7bbf6b630e99412fb8e497d859846d62"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: XamlCompilerTaskExecutor: ClassTooLong \u2014 475 significant lines (blank, comment-only and punctuation-only lines excluded), 7 methods, declared across 2 files: Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs (5), Avalonia.Build.Tasks/XamlCompilerTaskExecutor.Helpers.cs (2). 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":"src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf3dae91e82b35aecb686852f8156d0f6477201d2a6f5250675ca90c565477d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: EllipticalArc: ClassTooLong \u2014 470 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":"src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"67a17cabd65bc531fd3fb51b1e58fcfd77cbf44bc6b127faeca2068ae4fa9489"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FormattedText: TooManyMethods \u2014 523 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/FormattedText.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"90bd8496d9910af7b946a439e0e12258fc8f9c8626cf1443cac2acfb45c121ec"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextBlock: TooManyMethods \u2014 367 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBlock.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"feaf0ae4b391c0d219a371a31caa9a32d02814099cfee5cb682eac0b78a15723"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rect: TooManyMethods \u2014 203 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Rect.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"241bb6c43d81f14189ae59a5d404708fac100e032345314faa40c63833410964"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RenderDataDrawingContext: TooManyMethods \u2014 191 significant lines (blank, comment-only and punctuation-only lines excluded), 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f2f65e0a2c6d0f0707a36ad5a6e6d83c08acb4c588f5da38e279f18742b98e5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Pooled/PooledList.cs: FileTooLong \u2014 576 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":"src/Avalonia.Base/Collections/Pooled/PooledList.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f2c060ed9fe3094b28f6945a27d27e4855f474f9a3d2ffd69928b35537c9143"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CalendarItem: TooManyMethods \u2014 536 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4dad0718c597886266fcf953c85aa2f88e47433e80614c605e22d9f59bd9ab3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultMenuInteractionHandler: TooManyMethods \u2014 299 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":"src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6b2d823d25cdc544b28d8d7762c46a88aaeb140f44c55342a2752fdc5ceb4bb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BigEndianBinaryReader: TooManyMethods \u2014 142 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":"src/Avalonia.Base/Media/Fonts/Tables/BigEndianBinaryReader.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bfad3a79965ffb9a66bea316a0bf7d4535ecbd94d195a4a4af42d6afb5145ad"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WindowStub: TooManyMethods \u2014 80 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":"src/Avalonia.DesignerSupport/Remote/Stubs.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b638bf7c48cdd6a0f18639f15ce56ea593b696deac6792602bc3b909b890e152"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: TextFormatting/TextFormatterImpl.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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53ea1269ad4fc9cd62534bfffbb9f86d747e54bb0f1a8666dcec30e76c5b0a5d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ConnectedAnimation: ClassTooLong \u2014 449 significant lines (blank, comment-only and punctuation-only lines excluded), 16 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Animation/ConnectedAnimation.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2710b5d19199e2f53ab77c73ac198986147b59745a8b2eaa7f11abbf6a143f32"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Input/FocusManager.cs: FileTooLong \u2014 558 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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f9330bbd5d12173a19d32890bd16bb38e2c46bb77e5dcf02226855f1af6a04b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TopLevel: TooManyMethods \u2014 348 significant lines (blank, comment-only and punctuation-only lines excluded), 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TopLevel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a5d6de9552af1d153d525f6122d561236192efef0aa0cf3afd2e013aa5bbb42"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.WinUI/AvaloniaSwapChainPanel.cs: FileTooLong \u2014 550 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":"src/Windows/Avalonia.WinUI/AvaloniaSwapChainPanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee39d5663d5148de8952f6590b89b805563d65d2a91a77edd7a87fc1b79d6f8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Avalonia.X11/XLib.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":"src/Avalonia.X11/XLib.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"148373d3da4edf6253a9c53c8fd3c11b14210468af2979c208ce83fc7ad9b87f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Calendar/CalendarItem.cs: FileTooLong \u2014 546 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":"src/Avalonia.Controls/Calendar/CalendarItem.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b547a5349a6031d4b6dc75d096af4f3215f342d3dd2b618928648cbd6bba06b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Page/DrawerPage.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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e988af63291ef0bc92b009461a546b3f1f1bb039f31c1c64cae5fced69b06700"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Presenters/ScrollContentPresenter.cs: FileTooLong \u2014 540 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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e908781f0c155c9ca29dd94ed72ebe15370c0a3c664201c38b10969fc037936f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Handler: ClassTooLong \u2014 427 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":"src/Avalonia.X11/Selections/DragDrop/X11DragSource.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb810217b5e056a1742890f20ecf2119199e758513e1a587106085632dd3803d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScrollContentPresenter: TooManyMethods \u2014 529 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":"src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfb3c3516ed3893328b6657f9533e2ffed6637318223a2e7bc5fbf5f7efdd4ac"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FontCollectionBase: TooManyMethods \u2014 511 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a81cb75776dbbc1cf4114fc02d85781e47c0da78ee770c603c6af951eebe1398"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CommandBar: TooManyMethods \u2014 477 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":"src/Avalonia.Controls/CommandBar/CommandBar.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a37a00d141c939fbcd7ff50537183d509b5114ae7b3249338801dfd069e08e19"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Layoutable: TooManyMethods \u2014 358 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":"src/Avalonia.Base/Layout/Layoutable.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc22851f83c1a6908d0126538ff8ed9e2249522c2d542e23fd672d972769bba"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TabNavigation: TooManyMethods \u2014 330 significant lines (blank, comment-only and punctuation-only lines excluded), 32 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":"src/Avalonia.Base/Input/Navigation/TabNavigation.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca056e58772cec7c738e9047641e50d423d90ed68b96aebf48db8a3c9486aa30"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ComboBox: TooManyMethods \u2014 323 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":"src/Avalonia.Controls/ComboBox.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19a1adc68821f5d76254b50b5c180e4b20d87608f778a1b5e865b98aee998702"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Sink: TooManyMethods \u2014 236 significant lines (blank, comment-only and punctuation-only lines excluded), 32 methods, declared across 4 files: Avalonia.Wayland/WindowImplBase.Pointer.cs (9), Avalonia.Wayland/WindowImplBase.cs (9), Avalonia.Wayland/WindowImplBase.Keyboard.cs (8), Avalonia.Wayland/WindowImplBase.DragDrop.cs (6). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Wayland/WindowImplBase.Pointer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c240ac263760483fc8b73b2a14b120c1d6bf84df0150441a2079052affdd61"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ToolTip: TooManyMethods \u2014 150 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":"src/Avalonia.Controls/ToolTip.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c60b3d8c16bc719fb59ef77364438320824a5cbcc691828f3aba0be26ab1979f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PixelRect: TooManyMethods \u2014 129 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":"src/Avalonia.Base/PixelRect.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c1cca3053905e63ff307cc8eaf97b8493cf13639d0d51943eab45a9951180a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: UnmanagedInterop/VulkanStructs.cs: FileTooLong \u2014 530 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":"src/Avalonia.Vulkan/UnmanagedInterop/VulkanStructs.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93b9690a52401b838715a45c97b91aef6142ada01732421aeec82eaadef1a79"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Presenters/TextPresenter.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":"src/Avalonia.Controls/Presenters/TextPresenter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbdc5043ef88f04e9778dd1744d27900b3c18b924d5e344a70dc6f730ea879ff"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Fonts/FontCollectionBase.cs: FileTooLong \u2014 524 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fbcfe9d0ffbfb829a30083a36d25e21e1dac26bf5072baec312ed95e45cbdfd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Expressions/ExpressionVariant.cs: FileTooLong \u2014 517 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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionVariant.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3480f0b94db16be5612eb5a2057ca3868ecb5bdd7059a86c5e872c19f61f3a0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DrawerPage: TooManyMethods \u2014 527 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":"src/Avalonia.Controls/Page/DrawerPage.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebff1205aba024187f0624b667faf340e6a2db7f70b78af490729d568b1b39f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextPresenter: TooManyMethods \u2014 514 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":"src/Avalonia.Controls/Presenters/TextPresenter.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebd714716e447fdc60b2a93528daa975bf2bf8dfc82d5d26042c33d29a12d02c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Generator: TooManyMethods \u2014 445 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods, declared across 4 files: CompositionGenerator/Generator.cs (24), CompositionGenerator/Generator.Utils.cs (5), CompositionGenerator/Generator.ConfigHelpers.cs (1), CompositionGenerator/Generator.KeyFrameAnimation.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":"src/tools/DevGenerators/CompositionGenerator/Generator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7fcdddea7fe074835298cab68b465552ffbdacfc10fe4c07a41316767f445b4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Visual: TooManyMethods \u2014 404 significant lines (blank, comment-only and punctuation-only lines excluded), 31 methods, declared across 2 files: Avalonia.Base/Visual.cs (26), Avalonia.Base/Visual.Composition.cs (5). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Visual.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fef91069e117aaf67a277cb1720f8c923ce88b0eae660c3d422a33e8fc347747"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SelectionModel: TooManyMethods \u2014 357 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":"src/Avalonia.Controls/Selection/SelectionModel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5142dcecd4293fc42e7b2ea1f80d669b1d1603d69c7e581bf2958ca877bdc8c3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextSelectionHandleCanvas: TooManyMethods \u2014 332 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":"src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7156ba79699ef05a8f5c64d57d25721871d51c03bad2ccdc53d6077ebd0ffb60"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextInputResponder: TooManyMethods \u2014 327 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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43d943f482b862980ab877de721e941a0e46c8c8556b2f23ecde9c2e936bbe6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SplitButton: TooManyMethods \u2014 209 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":"src/Avalonia.Controls/SplitButton/SplitButton.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c074f5207c903c453a154eeb9b7cd9374a925417047f1efd12b9287758bbecdc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MathUtilities: TooManyMethods \u2014 139 significant lines (blank, comment-only and punctuation-only lines excluded), 31 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":"src/Avalonia.Base/Utilities/MathUtilities.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1674f215cc95b01645b4fd80485e68407ce46875e858b938ddebe9c48f7793f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Composition/CompositionHitTestAabbTree.cs: FileTooLong \u2014 512 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":"src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fd407d7048d76fbb50454c92ea6430bc20208e0ad3ada1659aacc4e23ed4b46"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: OleDataObjectHelper: ClassTooLong \u2014 409 significant lines (blank, comment-only and punctuation-only lines excluded), 18 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":"src/Windows/Avalonia.Win32/OleDataObjectHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e864facf8e55d585a5808242004578a6876b2ec1c6a3a618ef2351c5465b1384"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CompileAnalyzer: ClassTooLong \u2014 409 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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae189c0de0b7c70850ac6e4c6cb42295b8bd8d06afeebb3185830131a36f851c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SbomGenerator: ClassTooLong \u2014 405 significant lines (blank, comment-only and punctuation-only lines excluded), 23 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":"nukebuild/SbomGenerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a08d8b70c1bfac52b1f24766816d61998edebc3cb7a475a23675bc56281e02b7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Build: ClassTooLong \u2014 405 significant lines (blank, comment-only and punctuation-only lines excluded), 12 methods, declared across 2 files: nukebuild/Build.cs (10), nukebuild/Shims.cs (2). To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"nukebuild/Build.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e9e57695ed13900d3f40e1a7b56761c3e533fef78a677f14a5983c38ba642a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:934-959 | src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:1027-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 \u0060src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:934\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":934}}}],"partialFingerprints":{"codehealthFindingId/v1":"6da4711d41d49ac24a92bfde7f8a326b9debbb02d8bb21334fbcf4a9f220c872"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): src/Avalonia.Base/Media/HslColor.cs:373-395 | src/Avalonia.Base/Media/HsvColor.cs:403-426 \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 \u0060src/Avalonia.Base/Media/HslColor.cs:373\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":"src/Avalonia.Base/Media/HslColor.cs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"a30acb43340bd89527abb95673ceaad8f05e90b0a899b80c101a8b00ef24d0c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:961-982 | src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:1016-1037 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:961\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":961}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc6e6c72e6a8e4d49d835686963887b6e7a2716d94d6bc1495add4d790b8459e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:851-872 | src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:929-950 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:851\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"d56c6ef35070c7a35f8eca3764f694d4af61caa307f0575f79dab64dbcffa764"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs:289-309 | src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs:367-387 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs:289\u0060 it begins part-way through the construct above it, so those exact 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3922bf2360b2e3d0aadeee15d26f46c581ab0db6817d22a1b75d6ce4169716"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs:1192-1211 | src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs:1213-1232 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs:1192\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Base/Media/Fonts/FontCollectionBase.cs"},"region":{"startLine":1192}}}],"partialFingerprints":{"codehealthFindingId/v1":"47a5c268f249e7c8a7eda3bbfdffbfea47af64d08eb27a20c658e6b329f94ed2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Base/Media/HslColor.cs:182-201 | src/Avalonia.Base/Media/HsvColor.cs:212-231 \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 \u0060src/Avalonia.Base/Media/HslColor.cs:182\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":"src/Avalonia.Base/Media/HslColor.cs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"c120b0fe348a45e8915aa4ae6c23b6181ba186c3d737435a5d343b06d3c01ac3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:1065-1084 | src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:1095-1114 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs:1065\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffb85000bf1d4ab12cfae7d93f750709dead3b94b347c93e1394cda811924a56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:660-679 | src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:714-733 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:660\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":"src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aecb30010b721a538783143eed239fc25283acae801635a848ce57d5a04c3eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Base/Utilities/FrugalList.cs:1714-1733 | src/Avalonia.Base/Utilities/FrugalList.cs:2093-2112 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Utilities/FrugalList.cs:1714\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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1714}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b7501d56ae83cf4b6c572f224b3ea25f46f55eaaed72bf2fef5379323f8d7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Base/Utilities/FrugalList.cs:1936-1956 | src/Avalonia.Base/Utilities/FrugalList.cs:2307-2326 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1936}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5627fb5daa6de0c4ccc196f6db8ae2f9f34e959f471badcb571ea3f859cf440"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs:121-140 | src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs:168-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 \u0060src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs:121\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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca4f104b9a51c2459e32c66d5f948f69bd3b7b7e5a3d0a0bc23bb76929be586"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/Avalonia.Controls/StackPanel.cs:426-445 | src/Avalonia.Controls/VirtualizingStackPanel.cs:1367-1386 \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 \u0060src/Avalonia.Controls/StackPanel.cs:426\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":"src/Avalonia.Controls/StackPanel.cs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"e313b60a37b0e4e57e048f977ca8cf81fde9c36fa8d09c0ee924515ac9da6fa2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): src/Avalonia.Base/Utilities/FrugalList.cs:590-608 | src/Avalonia.Base/Utilities/FrugalList.cs:1070-1088 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Utilities/FrugalList.cs:590\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":590}}}],"partialFingerprints":{"codehealthFindingId/v1":"af8b8314b2f50bc6986bc022189f468d6d550dcbe55f295038022796957fdf9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs:107-125 | src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs:105-123 \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 \u0060src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs:107\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":"src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"f64317e4bf1a8c33390e139ebb23fb59b42a4d9b04ab60fd48eba31db09dc970"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs:65-83 | src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs:109-127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs:65\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Utils/VirtualizingSnapPointsList.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c03cc9cfc56b74a8425b01e1b334144dfb10f3da9b8e0f395a2567e4c885a77d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): src/Headless/Avalonia.Headless.XUnit/AvaloniaDelayEnumeratedTheoryTestCase.cs:60-78 | src/Headless/Avalonia.Headless.XUnit/AvaloniaTestCase.cs:59-77 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Headless/Avalonia.Headless.XUnit/AvaloniaDelayEnumeratedTheoryTestCase.cs:60\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Headless/Avalonia.Headless.XUnit/AvaloniaDelayEnumeratedTheoryTestCase.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"49430cce671ed5c1450a4e2f3f04c4e16f8a8e092a0b0e2143681428d3f3c90b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): src/Avalonia.Controls/Grid.cs:3081-3098 | src/Avalonia.Controls/Grid.cs:3121-3138 | src/Avalonia.Controls/Grid.cs:3161-3178 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Grid.cs"},"region":{"startLine":3081}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5319e6f6d811623fc47bd33357ac712fe04764ab6e5e04bdf3eb5c7cfd6db47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Avalonia.Base/Media/Fonts/Tables/Metrics/HorizontalMetricsTable.cs:125-142 | src/Avalonia.Base/Media/Fonts/Tables/Metrics/VerticalMetricsTable.cs:125-142 \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 \u0060src/Avalonia.Base/Media/Fonts/Tables/Metrics/HorizontalMetricsTable.cs:125\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/Fonts/Tables/Metrics/HorizontalMetricsTable.cs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e8d44e0da95cacd50961a1787c6fefa3d0a3acdd61b3142472c680cbc93c57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Avalonia.Base/Media/PathMarkupParser.cs:319-336 | src/Avalonia.Base/Media/PathMarkupParser.cs:345-362 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Base/Media/PathMarkupParser.cs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3a0d4795036e55994124f38b3b27539c5f648ed30c4e44357f2a8fd004692cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Avalonia.Controls.ColorPicker/Converters/ColorToDisplayNameConverter.cs:25-42 | src/Avalonia.Controls.ColorPicker/Converters/ColorToHexConverter.cs:43-60 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls.ColorPicker/Converters/ColorToDisplayNameConverter.cs:25\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Controls.ColorPicker/Converters/ColorToDisplayNameConverter.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e90160689d33120dd8f8d757014adc66e5d27b55373e287952b4c9686b8a2e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Avalonia.Controls/Button.cs:538-555 | src/Avalonia.Controls/SplitButton/SplitButton.cs:326-345 \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 \u0060src/Avalonia.Controls/Button.cs:538\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Button.cs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ec9c59e4b18a51acd80b60d9a6d5bfad56623f952bd8b13f82fde67496f20c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): src/Avalonia.Native/AvnAutomationPeer.cs:119-136 | src/Avalonia.Native/AvnAutomationPeer.cs:145-162 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Native/AvnAutomationPeer.cs:119\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. 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":"src/Avalonia.Native/AvnAutomationPeer.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3763d988fee57025357a8b14f410b7659eed66c5d9986c3bb4a3b0a54fbabcd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/Avalonia.Base/Utilities/FrugalList.cs:630-646 | src/Avalonia.Base/Utilities/FrugalList.cs:1106-1122 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":630}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aa99385415f7c43374dcc8e183fcfd14fe73cd47f59ed1f4e1b49fa0d29bdb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/Avalonia.Base/Utilities/FrugalList.cs:1168-1184 | src/Avalonia.Base/Utilities/FrugalList.cs:1519-1535 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f7b9fa657f52145c8e802768e6b6e2d57b87e6390111492dd23e3ba8dd5135d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/Avalonia.Controls/Utils/StringUtils.cs:42-58 | src/Avalonia.Controls/Utils/StringUtils.cs:98-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 \u0060src/Avalonia.Controls/Utils/StringUtils.cs:42\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Utils/StringUtils.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c6bdf9c9a61b1b9b7d91f8020e4b94df811aade5b495b36faf1f6af1a811d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/Avalonia.Base/Data/CompiledBinding.cs:215-230 | src/Avalonia.Base/Data/ReflectionBinding.cs:165-180 \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 \u0060src/Avalonia.Base/Data/CompiledBinding.cs:215\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. 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":"src/Avalonia.Base/Data/CompiledBinding.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cb1e5c82f2b475dccc58af569fa6ded0284985a80d3dbbb460c593cf363f4db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/Avalonia.Base/Data/Core/ExpressionNodes/PropertyAccessorNode.cs:66-81 | src/Avalonia.Base/Data/Core/ExpressionNodes/Reflection/DynamicPluginPropertyAccessorNode.cs:61-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 \u0060src/Avalonia.Base/Data/Core/ExpressionNodes/PropertyAccessorNode.cs:66\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":"src/Avalonia.Base/Data/Core/ExpressionNodes/PropertyAccessorNode.cs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"b07f7d77c74f9ab19af27a2ff60949f593a5177b454e2720e14d2eef53004f7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/Avalonia.Base/Styling/ScreenQueries.cs:49-64 | src/Avalonia.Base/Styling/ScreenQueries.cs:130-145 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Styling/ScreenQueries.cs:49\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Base/Styling/ScreenQueries.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"a61ecde48922b54425322c39ce71d99370644fa0eef99ca1413fcbcb44730310"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs:330-345 | src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs:407-422 \u2014 both copies are in the same file, so extract the block 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlQueryTransformer.cs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"58cd657a8c5669a2c965a2bb3507f8ed18f0e102a878a03d63f82ac66a256f3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/Avalonia.Controls/Presenters/TextPresenter.cs:390-406 | src/Avalonia.Controls/TextBlock.cs:615-630 \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":"src/Avalonia.Controls/Presenters/TextPresenter.cs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea7ad37b0f460ec1359d3a638249bf9fe1668d09a44342da23777528ba29f087"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/Avalonia.Base/Data/Core/ExpressionNodes/LogicalAncestorElementNode.cs:22-36 | src/Avalonia.Base/Data/Core/ExpressionNodes/VisualAncestorElementNode.cs:22-36 \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 \u0060src/Avalonia.Base/Data/Core/ExpressionNodes/LogicalAncestorElementNode.cs:22\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":"src/Avalonia.Base/Data/Core/ExpressionNodes/LogicalAncestorElementNode.cs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a32aa31b3506f4589a7d004394441de68489ff38965ab9e3b5fe5481b16e10d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/Avalonia.Base/Input/FocusManager.cs:446-460 | src/Avalonia.Base/Input/FocusManager.cs:502-516 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Input/FocusManager.cs:446\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"b43c3872f910cd3df61b80b54cdd4b11cc715f4b79ce73ad1c874a4b1ced44a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs:664-678 | src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs:737-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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs"},"region":{"startLine":664}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee4338e7b51f7fc976af7e6a8ec26bcbf245c791768c23a2b5608f97cb3773b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): src/Avalonia.Base/Media/Color.cs:420-433 | src/Avalonia.Base/Media/HslColor.cs:309-322 | src/Avalonia.Base/Media/HsvColor.cs:339-352 \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 \u0060src/Avalonia.Base/Media/Color.cs:420\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"7202207d17ec58d6bd858a819de1d7ac69795dae299a57b4475866da9db127f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/Avalonia.Base/Data/CompiledBinding.cs:240-253 | src/Avalonia.Base/Data/ReflectionBinding.cs:212-225 \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 \u0060src/Avalonia.Base/Data/CompiledBinding.cs:240\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. 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":"src/Avalonia.Base/Data/CompiledBinding.cs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff98a838081d431f46b676f8d2dca33141eb5b552512baeae485a4462e84cca2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/Avalonia.Base/Media/GlyphTypeface.cs:201-214 | src/Avalonia.Base/Media/GlyphTypeface.cs:218-231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/GlyphTypeface.cs:201\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/GlyphTypeface.cs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"b79c4feb80c41953e23494a6d8e732ab107e364d425cf51eea6fdab7d76c30f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/Avalonia.Controls/DateTimePickers/DatePicker.cs:400-413 | src/Avalonia.Controls/DateTimePickers/TimePicker.cs:376-389 \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":"src/Avalonia.Controls/DateTimePickers/DatePicker.cs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c556fe3b9505a5064456b2d5f39e6ad0757ce859b3065c017a14a5d9e217355"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/Avalonia.Controls/LayoutTransformControl.cs:363-376 | src/Avalonia.Controls/LayoutTransformControl.cs:390-403 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/LayoutTransformControl.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"633da1a26578e5d5ecea7b331dfcba8b7c5fb666634e784126e7ad3ccca12300"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/Avalonia.Controls/TopLevelHost.cs:52-65 | src/Avalonia.Controls/TopLevelHost.cs:93-106 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/TopLevelHost.cs:52\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":"src/Avalonia.Controls/TopLevelHost.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"70765e6d20111062cc99fa07e9024c8ac009761619839d95a3e1b22a1b056e19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/Avalonia.Base/Reactive/AvaloniaPropertyBindingObservable.cs:30-42 | src/Avalonia.Base/Reactive/AvaloniaPropertyObservable.cs:30-42 \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 \u0060src/Avalonia.Base/Reactive/AvaloniaPropertyBindingObservable.cs:30\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Reactive/AvaloniaPropertyBindingObservable.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fe3f0d559f8e7ae1ced4929a2effec1d0202e17afe8a044e0f1d49928bc9708"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/Avalonia.Base/Styling/Activators/AndActivator.cs:28-40 | src/Avalonia.Base/Styling/Activators/AndQueryActivator.cs:32-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. 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":"src/Avalonia.Base/Styling/Activators/AndActivator.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5cccf9fc66e72405f025aef1b2c3f99ddba4da6f7868a0f6b5fead49e37bf2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin.cs:47-58 | src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin\u00601.cs:23-34 \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 \u0060src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin.cs:47\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c6a78e7a5e036f8d314cbed148e61af8ac6d85311a33e3c8d96d39c6777137c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Base/Styling/AndQuery.cs:58-69 | src/Avalonia.Base/Styling/OrQuery.cs:58-69 \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 \u0060src/Avalonia.Base/Styling/AndQuery.cs:58\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Styling/AndQuery.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"d525395fa189fdc5378efd054866f36b40e60f6482240539a90859745328b093"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Base/Styling/ScreenQueries.cs:23-34 | src/Avalonia.Base/Styling/ScreenQueries.cs:104-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 \u0060src/Avalonia.Base/Styling/ScreenQueries.cs:23\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Styling/ScreenQueries.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0f059e62f0fd72859013ba1a13dfdc77c8e7d761f015e2e70d086a3d6e310f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/Automation/Peers/EmbeddableControlRootAutomationPeer.cs:61-72 | src/Avalonia.Controls/Automation/Peers/WindowBaseAutomationPeer.cs:69-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/Automation/Peers/EmbeddableControlRootAutomationPeer.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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Automation/Peers/EmbeddableControlRootAutomationPeer.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d86f6fcfb88c74ef3baedf1874e5d523d4eb393df0af6d78d123fca0c944501"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs:174-185 | src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs:191-203 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs:174\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":"src/Avalonia.Controls/PullToRefresh/ScrollViewerIRefreshInfoProviderAdapter.cs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bac267a4e87be1bc357212bee3c3478ef919fe06d3f1a4a3ed607f862a9d384"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/RelativePanel.cs:418-429 | src/Avalonia.Controls/RelativePanel.cs:449-460 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/RelativePanel.cs:418\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"c05e8f583dc6381cbd365b4a41af1a5119e870939a7df5ac30098a6072fa2df5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/RelativePanel.cs:434-445 | src/Avalonia.Controls/RelativePanel.cs:464-475 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/RelativePanel.cs:434\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf759aac393fe2da04a72fa13ce6a5cc5e6b139465a4f7e8a48cabbed8c92f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/TickBar.cs:311-322 | src/Avalonia.Controls/TickBar.cs:364-375 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/TickBar.cs:311\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TickBar.cs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0dae754bb898239d1ebd21fe97585f9ab6d1b4609aed1ff0226e5645462dc46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/VirtualizingCarouselPanel.cs:804-815 | src/Avalonia.Controls/VirtualizingStackPanel.cs:1019-1030 \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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"60b0cab11b32f0b039135739752cda9d383feb9815406bcd8ce57edc08bd38d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Avalonia.Controls/VirtualizingCarouselPanel.cs:820-831 | src/Avalonia.Controls/VirtualizingStackPanel.cs:1035-1046 \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 \u0060src/Avalonia.Controls/VirtualizingCarouselPanel.cs:820\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note 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":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":820}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f72ce9593c8432c51bf65173cfdebb87e0bf50ae89e5ba9d0e8d255d5f801e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs:279-290 | src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs:570-581 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs:279\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":"src/Android/Avalonia.Android/Platform/Storage/AndroidStorageItem.cs"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"f196b9064cb8d105950f0d1adb9b36596e50cfc71e7722176093b8d586bad895"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): src/Avalonia.Controls/VirtualizingCarouselPanel.cs:842-852 | src/Avalonia.Controls/VirtualizingStackPanel.cs:1058-1068 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/VirtualizingCarouselPanel.cs"},"region":{"startLine":842}}}],"partialFingerprints":{"codehealthFindingId/v1":"758babdc998272075469e4fd188e4f309d4f12a94d1a0787152c0e6cd776b016"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): src/Avalonia.Base/Input/FocusManager.cs:643-652 | src/Avalonia.Base/Input/FocusManager.cs:744-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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Input/FocusManager.cs:643\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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e39e540fa4e14aa672746bcdd3c5bc6d32ba194efb9f15742b1127b6ade7c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): src/Avalonia.Controls/TextBox.cs:1929-1938 | src/Avalonia.Controls/TextBox.cs:1970-1979 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/TextBox.cs:1929\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1929}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ed3d00fe692f4628cea4ee7c87c36a66be2a6e85616093e4c02e3e9a19fcf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/Avalonia.Base/Media/Color.cs:154-165 | src/Avalonia.Base/Media/Color.cs:166-174 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/Color.cs:154\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dfb74f03658e9da596485b9852a171e59f3b0ae1691df058cdcd585a5b7888a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs:723-731 | src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs:735-743 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs:723\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs"},"region":{"startLine":723}}}],"partialFingerprints":{"codehealthFindingId/v1":"205d94d5c3013189f9fa4dbdc74953ac9dfd625786c6ad3ece6415c85accd150"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs:159-167 | src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs:183-191 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. 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":"src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d148c03662c42ab9d0a1dbf9cab0903326c75fd9431613a42d001d2cf4e238e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/Avalonia.Base/Utilities/FrugalList.cs:1042-1050 | src/Avalonia.Base/Utilities/FrugalList.cs:1057-1065 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1042}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbe0a824fa5da7ff93634a413193a4b6ac5dff15a467a2f5d9c1e0390bc5be01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): src/Avalonia.Base/Platform/LtrbRect.cs:188-195 | src/Avalonia.Base/Platform/LtrbRect.cs:286-293 | src/Avalonia.Base/Thickness.cs:250-257 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Platform/LtrbRect.cs:188\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Platform/LtrbRect.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"392629f98e8734ca52ffdc4efb8905630f2e178f99f01f6b97f7d5002764ffca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/Avalonia.Base/PixelRect.cs:220-227 | src/Avalonia.Base/Rect.cs:346-353 \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 \u0060src/Avalonia.Base/PixelRect.cs:220\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":"src/Avalonia.Base/PixelRect.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"8822ecccd6062e4c058a6f0baef392c4ce9cb90635f345e00900abce119f8c10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/Avalonia.Base/Utilities/MathUtilities.cs:429-436 | src/Avalonia.Base/Utilities/MathUtilities.cs:438-445 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Base/Utilities/MathUtilities.cs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7b2887a72468be5098f3f81664a1c4b1dd499fc015d56c9e26c9ff042f6b857"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/Avalonia.Controls/WrapPanel.cs:220-227 | src/Avalonia.Controls/WrapPanel.cs:274-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 \u0060src/Avalonia.Controls/WrapPanel.cs:220\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":"src/Avalonia.Controls/WrapPanel.cs"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdc9a73d2f1b9206871695d10fdc66fd71a0fd3dadc155c19d4ecf3a664e1475"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs:151-157 | src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs:165-171 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. 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":"src/Avalonia.Base/Animation/Transitions/Rotate3DTransition.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a9387302be95c33ef09a70b30193ada88a54abfa6500cbb0994e49fe080279f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Avalonia.Base/Media/Color.cs:234-240 | src/Avalonia.Base/Media/Color.cs:244-250 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/Color.cs:234\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"b560778705535e90f783850a59d010673bf5ab32031b5b0ba6d98c0c668e1a61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:705-711 | src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:759-765 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:705\u0060 it begins part-way through the construct above it, so those exact 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":"src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8d0cdc1f7675d0387df76ea1d224911638f5ce896942e12f08f3e1640cd4a2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:744-750 | src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:754-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 \u0060src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs:744\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":"src/Avalonia.Base/Rendering/Composition/CompositionHitTestAabbTree.cs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"15af298a42f50c107daf7bfff25ce12a976aec6fe7bd7cae5fe40aa8ba3bba45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs:478-484 | src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs:507-513 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs:478\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"d75aee914be3ff5442c8482bc0f0c780165b2bc9ae7fdaf2dc0df6da3dbf7908"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/Avalonia.Controls/SplitView/SplitView.cs:527-533 | src/Avalonia.Controls/SplitView/SplitView.cs:538-544 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Controls/SplitView/SplitView.cs:527\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":"src/Avalonia.Controls/SplitView/SplitView.cs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"823712414480f37fd5d9bceeace8802fc10a20de20490aa3504b83db854a4499"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/Avalonia.Base/Media/HslColor.cs:281-285 | src/Avalonia.Base/Media/HslColor.cs:291-295 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/HslColor.cs:281\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. 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":"src/Avalonia.Base/Media/HslColor.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b83bfe757aacdadcf5daa416401225a537e2918780829d2b2bf3dd1dcbbb1a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/Avalonia.Base/Media/HsvColor.cs:311-315 | src/Avalonia.Base/Media/HsvColor.cs:321-325 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/Avalonia.Base/Media/HsvColor.cs:311\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":"src/Avalonia.Base/Media/HsvColor.cs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ca5172dbc0a6a1782d2c82c52aa7dd3c58cd60f15f9c73307dbf5e8a8eb9a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/Avalonia.Base/Media/Imaging/PixelFormatReaders.cs:300-304 | src/Avalonia.Base/Media/Imaging/PixelFormatReaders.cs:324-328 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. 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":"src/Avalonia.Base/Media/Imaging/PixelFormatReaders.cs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"fae969af168d43cbd31116bf755decc729524ef8bb1a501d749b6c4dd905b42e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:1358-1362 | src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:1393-1397 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1358}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dd9ea1e3596451c4bb410c4225e1a40611d5b613de6d7e87a6b15e448d637bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:1544-1548 | src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs:1579-1583 \u2014 both copies are in the same file, so extract the block 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":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1544}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8bc67192132bd5493c61086880da5320842eec1f0e3ed23cb7abd00a92e7244"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Avalonia.Build.Tasks: Avalonia.Build.Tasks: abstractness 0.09, instability 0.00, distance 0.91 \u2014 zone of pain \u2014 concrete and depended on by 1 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0038a300eaa54fb597ab3f57dd51cff993e8fb7854bd25ae7186b9196c7b3f22"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Avalonia.HarfBuzz(net10.0): Avalonia.HarfBuzz(net10.0): abstractness 0.00, instability 0.11, distance 0.89 \u2014 zone of pain \u2014 concrete and depended on by 5 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5026e368bf0b4fc67c3418666cc90ccbc945b2b6f02b5717dcca361db608bdb4"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Avalonia.Dialogs(net10.0): Avalonia.Dialogs(net10.0): abstractness 0.00, instability 0.14, distance 0.86 \u2014 zone of pain \u2014 concrete and depended on by 6 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9fe0f76ec3daec3e99b1ec37681c39e4274065d2103bdc7c9930eb7bec3ca845"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Avalonia.Remote.Protocol(net10.0): Avalonia.Remote.Protocol(net10.0): abstractness 0.15, instability 0.00, distance 0.85 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"37461423207b7d61a7a3c7b981f626ed5107c1da3aa06c236ba0be6cef5fa921"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Avalonia.Base(net10.0): Avalonia.Base(net10.0): abstractness 0.26, instability 0.00, distance 0.74 \u2014 zone of pain \u2014 concrete and depended on by 16 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0ec2c1ce183a228046400286150a31b0c0023a911b95b5bb3d87f37489bd1131"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Avalonia.Skia(net10.0): Avalonia.Skia(net10.0): abstractness 0.16, instability 0.10, distance 0.74 \u2014 zone of pain \u2014 concrete and depended on by 6 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7a953c4b33d1358073744573502be7f3e5b9d74818fbb420fb6d5f40049b95d2"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: NavigationPageAppearancePage (LCOM4 10): NavigationPageAppearancePage\u0027s methods form 10 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":"samples/ControlCatalog/Pages/NavigationPage/NavigationPageAppearancePage.xaml.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ef85e5999e959fb67da3089b456caf25aee588d5bca5aa9e9f3bccf2605fb7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TextInputResponder (LCOM4 10): TextInputResponder\u0027s methods form 10 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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"607922769bad70b070846de6a7447396105ff0c3ccf08d4535e0cc53a4379741"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: EmbeddedView (LCOM4 9): EmbeddedView\u0027s methods form 9 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":"samples/WinUIEmbedSample/EmbeddedView.axaml.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"502a395eb1a4357282acc44a7d616273dac9d2a7cf36c5b9d6d3613d279a1044"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Control (LCOM4 9): Control\u0027s methods form 9 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":"src/Avalonia.Controls/Control.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d667e05ebb63e5be7e02706b5afd1f108db882ba7e11652463d1b9596a57d42"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ClipboardPage (LCOM4 8): ClipboardPage\u0027s methods form 8 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":"samples/ControlCatalog/Pages/ClipboardPage.xaml.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"f653320a0f123b48fac29a7fb21c61f9aec1df25a9885c0513460a04806db209"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ShowWindowTest (LCOM4 7): ShowWindowTest\u0027s methods form 7 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":"samples/IntegrationTestApp/ShowWindowTest.axaml.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c81c8521fd776e3f05b2488b5305a11d5953f4d65ed2cc462e5a090ca217d6"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: PlatformRenderInterface (LCOM4 7): PlatformRenderInterface\u0027s methods form 7 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":"src/Skia/Avalonia.Skia/PlatformRenderInterface.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"d14cd7006df1d7d94fd5322adcdd1d9226bbcaadd4875e5895a45fba1fa8fa7a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: MainView (LCOM4 6): MainView\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":"samples/ControlCatalog/MainView.xaml.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"336b8c5a477f76fb613931e56b241ae641efc275d38818389dca115166b7a3a8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GlyphTypeface (LCOM4 6): GlyphTypeface\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":"src/Avalonia.Base/Media/GlyphTypeface.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"702356e0ff11d5f95a4d0f47e8d7426337eb240d1292969e23ea827ab0246443"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: MenuItem (LCOM4 6): MenuItem\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":"src/Avalonia.Controls/MenuItem.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ce75bd43df38b06b8bd161d74c1bb4e1c3ada84de3c5748e2e16873ce670a37"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: WindowBase (LCOM4 6): WindowBase\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":"src/Avalonia.Controls/WindowBase.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"245e12369e841a030f40aa7f98a0b7b9e6deba8251d89d29ed7eb792804c14a8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: WindowBaseImpl (LCOM4 6): WindowBaseImpl\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":"src/Avalonia.Wayland/WindowImplBase.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e25f8eadd7c1a6ec417c02bdd2f4290b8d4c83ebb32fcf4e114f8fd9a9ed72"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AvaloniaView (LCOM4 6): AvaloniaView\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":"src/iOS/Avalonia.iOS/AvaloniaView.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"227680f75d2626bba4c369ed0beb29c2fbc4e97ebbe9bdf5ae5ba303f81bfaa7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: App (LCOM4 5): App\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":"samples/ControlCatalog/App.xaml.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4c35e78718cea66ffdd9e8ea2bc4afa527bac9c8199b12beb58747ea4f47e3e"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: CarouselGalleryAppPage (LCOM4 5): CarouselGalleryAppPage\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":"samples/ControlCatalog/Pages/CarouselPage/CarouselGalleryAppPage.xaml.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"e41038def51827e20484662f7c53747cbed8d3e7a7b6cd1cc8aa8454b8cedb72"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: NavigationPerformanceMonitorHelper (LCOM4 5): NavigationPerformanceMonitorHelper\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":"samples/ControlCatalog/Pages/NavigationPerformanceMonitorHelper.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"75e8e2bda416487025342ad0bb210e126b627ca491256d78ae686ce1660226a2"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AvaloniaActivity (LCOM4 5): AvaloniaActivity\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":"src/Android/Avalonia.Android/AvaloniaActivity.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad71a554b6d7d4fe3272bd1cf6895faaa3ee063ab2b7fd43e362f8f12519b1b2"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: InputElement (LCOM4 5): InputElement\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":"src/Avalonia.Base/Input/InputElement.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"992889f831ed1ed4683a84d4f3b8448235d17710938f88a3a8ff534e8acec13f"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ServerCompositionVisual (LCOM4 5): ServerCompositionVisual\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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.ComputedProperties.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff7ef718f4cc830f5dc97233584b4c6057869a52b52021cb41dc3388a61cd83"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ItemsControl (LCOM4 5): ItemsControl\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":"src/Avalonia.Controls/ItemsControl.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"02990415020524adb4898cd70902176385837e174c5116f695a414ef728fc6d8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ScrollViewer (LCOM4 5): ScrollViewer\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":"src/Avalonia.Controls/ScrollViewer.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7e1dfc6697a66a27a0b7c240eba2cd5fb6ddbd1322b885240e1259fc07778c5"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Win32Platform (LCOM4 5): Win32Platform\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":"src/Windows/Avalonia.Win32/Win32Platform.cs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac294168446ad66643764ff5e584554d51c5ba3022121c7fbf9938579cc3606e"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GestureSwipePage (LCOM4 4): GestureSwipePage\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":"samples/ControlCatalog/Pages/Gestures/GestureSwipePage.xaml.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1c3e680f6a6f7ddb29a504d3bb439472837a203b233b177a77b15682294a35"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: MainViewModel (LCOM4 4): MainViewModel\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":"samples/SafeAreaDemo/ViewModels/MainViewModel.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0616f24a6269c1f08c80c483ac8a52364010dfb90cf815541cc9a02db3f60be"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: AvaloniaObject (LCOM4 4): AvaloniaObject\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":"src/Avalonia.Base/AvaloniaObject.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"898dc64b215d4392389cc26dd3cbb18cd5b76dcb0a514e7a5ba9033e6d3b6c59"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Layoutable (LCOM4 4): Layoutable\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":"src/Avalonia.Base/Layout/Layoutable.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d824807256c30d554bfa1eca6c102f10faf936c04eba28a426491415a7e599"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DrawingContext (LCOM4 4): DrawingContext\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":"src/Avalonia.Base/Media/DrawingContext.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b951af04bde8005ed5ce04e2f0105ef90076e9873a5ed2b944ec07d43a850a13"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: GenericTextParagraphProperties (LCOM4 4): GenericTextParagraphProperties\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":"src/Avalonia.Base/Media/TextFormatting/GenericTextParagraphProperties.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e24f196b62065cbbd702f072740c79df085682b84712d76fae4a0891c5f6f39"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: TextSelectionHandle (LCOM4 4): TextSelectionHandle\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":"src/Avalonia.Controls/Primitives/TextSelectionHandle.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f196c33ea21b4c531619e537da78787da62ce69dd9257c24a4cccc027fb7ac2"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ToggleSwitch (LCOM4 4): ToggleSwitch\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":"src/Avalonia.Controls/ToggleSwitch.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e1686e78c82f92ce123437ce4c88d2198709d3b7486978144349da4bef655e8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Window (LCOM4 4): Window\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":"src/Avalonia.Controls/Window.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d8fea1053bd539bc6aaa9cec0c991aceb91ed35669979d068574af16fd55933"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ManagedFileChooserViewModel (LCOM4 4): ManagedFileChooserViewModel\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":"src/Avalonia.Dialogs/Internal/ManagedFileChooserViewModel.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"61ddd51f1fabe1ba1dcee4bee3555c188c513cafad2dfabd1101acdde9bdb94e"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DBusTextInputMethodBase (LCOM4 4): DBusTextInputMethodBase\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":"src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"fda218b009774414fd56f7282fc5c2488952d4a421dcb50cdc17f52113703ace"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: WindowImpl (LCOM4 4): WindowImpl\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":"src/Avalonia.Native/WindowImpl.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"e305e432167ba0c7ce49ceb95327956f1ba5c77e794dea3e070424ce864c2cf7"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: WindowImpl (LCOM4 4): WindowImpl\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":"src/Avalonia.Wayland/WindowImpl.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"0322fc92f73e596fdda170a3c85337fa80e116853edeaca035ab4636cc688c39"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: PopupImpl (LCOM4 4): PopupImpl\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":"src/Windows/Avalonia.Win32/PopupImpl.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d4e4887ff7daefdf32ea358a054f639b8f7efbb09cd92a50d31083dcdd335d2"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Win32DispatcherImpl (LCOM4 4): Win32DispatcherImpl\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":"src/Windows/Avalonia.Win32/Win32DispatcherImpl.cs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de6aec96764d32f253d593e5fe8c81487f6dc5f6dcc3fcc981b228c95008dbe"}},{"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":"D10","level":"warning","message":{"text":"Skipped test: Nested_Style_Without_Nesting_Operator_Throws: Skipped \u2014 TODO"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Base.UnitTests/Styling/StyleTests.cs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"08e342d65fc5850fe411942762171969262845d107c64dff0bc8ada8e0b353b6"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: SelectedDateChanged_Should_Fire_When_SelectedDate_Set: Skipped \u2014 FIX ME ASAP"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44c48a621768582b3ad186e7e163a46ecd17619468ac172d3e6d18ff7627301"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: Should_Handle_Context_Menu_Item_Click: Skipped \u2014 Flaky test"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.IntegrationTests.Appium/TrayIconTests.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e71f6973d66669fd5fcde3ab01c98505c9f1975874c92638845a8fd95ac5839"}},{"ruleId":"D10","level":"warning","message":{"text":"Skipped test: Can_Toggle_TrayIcon_Visibility: Skipped \u2014 Flaky test"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.IntegrationTests.Appium/TrayIconTests.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cc7bb2312623a51516dbd3f3e234a90ba73c5ce07819d29b588de9eaf8c664f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Should_Negate_Boolean_Value: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.Negation.cs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"6074160e754454e6351594289ab2f4335396239bd6984cc8bc79d7ed666eee1b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: AutomationId: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.IntegrationTests.Appium/AutomationTests.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"778587406c93c30cf69cbe4f0968b2d2248c65d29e2aa5a23c4f9c30a9e7f28f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: MergeResourceInclude_Is_Allowed_After_ResourceInclude: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Markup.Xaml.UnitTests/Xaml/MergeResourceIncludeTests.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc573eeb4d7fb2f8d7962a1f1b1ae5700bca42ef86b70b5a64fc29bec00b26a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Missing_ResourceKey_In_StyleInclude_Does_Not_Cause_StackOverflow: Test method exercises code but verifies nothing \u2014 add an assertion."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleIncludeTests.cs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"267ebda986f1b275b7bb391a0079a8c32063e66ce470cd777586bd92244fb5c7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs: src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs changed 3 times in last 90 days, max complexity 182. 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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a5f032cc352dff3a9f9f7f7c6af55a12a871d0538ccad7f9b92c4c854b063d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Avalonia.X11/X11Window.cs: src/Avalonia.X11/X11Window.cs changed 6 times in last 90 days, max complexity 65. 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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e8f7c68033955a6bc3983fddb8b14820f4f2647acbe8debe980e72adbaa2be"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Avalonia.Controls/TextBox.cs: src/Avalonia.Controls/TextBox.cs changed 4 times in last 90 days, max complexity 63. 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":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca92379eaf3e42b766ee33755dd5bac1a2289b797cf116fe8185173d74fe2932"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs: src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs changed 3 times in last 90 days, max complexity 65. 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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef1dee2beae675d7490257f9874f5daf9e13a9c2ba41d374d27ed75ff08be337"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs: src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs changed 2 times in last 90 days, max complexity 96. 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":"src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1451c2541d125b28e4a98e067231ed0f2e2a005ddacf143c3fba8c410f64e8d9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Windows/Avalonia.Win32.Automation/AutomationNode.cs: src/Windows/Avalonia.Win32.Automation/AutomationNode.cs changed 4 times in last 90 days, max complexity 45. 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":"src/Windows/Avalonia.Win32.Automation/AutomationNode.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a10d284fac6ac302ee681f4dae7cfcb78ff1a488530e76dfd3e745ae894eba64"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Windows/Avalonia.Win32/WindowImpl.cs: src/Windows/Avalonia.Win32/WindowImpl.cs changed 6 times in last 90 days, max complexity 30. 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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"062928ae10dead8e15e07c02024f97a0479e1b48744e096f69c785b8c62e4542"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs: src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs changed 5 times in last 90 days, max complexity 30. 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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e69cfebb1d0d4a597a8f6d04d6964879faf07a8f2259b157ff2030be31e62ac"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs: src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs changed 3 times in last 90 days, max complexity 34. 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":"src/Avalonia.Base/Media/TextFormatting/TextFormatterImpl.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"718c01b57b919ecc88f30650a7bf4f704c4c7e104d87b30535b8d2beca9a5f81"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs: src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs changed 2 times in last 90 days, max complexity 46. 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":"src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreakEnumerator.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2541cdaa2ab559f958c6a7ad01f504cd918b307792175adad409c7853437d40"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 23 significant file(s) lose their only recent owner: src/tools/DevGenerators/CrossThreadProxyGenerator.cs, src/Avalonia.OpenGL/Egl/EglConsts.cs, src/Avalonia.Wayland/Server/WaylandWorker.cs, src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.cs, src/Avalonia.X11/Dispatching/GlibDispatcherImplBase.cs, src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Update.cs, src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs, src/Linux/Avalonia.LinuxFramebuffer/EpollDispatcherImpl.cs (\u002B15 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0985c05605e6b42568ff51d670a5638dbecf792c44c53e0f1fd76c647295a5ac"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 12 significant file(s) lose their only recent owner: src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs, src/Avalonia.Base/Media/GlyphRun.cs, src/tools/Avalonia.UnicodeTrieGenerator/UnicodeDataGenerator.cs, src/Avalonia.Base/Media/TextFormatting/TextCharacters.cs, src/Avalonia.Base/Media/Fonts/FontFallbackScriptHints.cs, src/Avalonia.Base/Media/TextFormatting/InterWordJustification.cs, src/Avalonia.Base/Media/TextFormatting/TextRunCache.cs, src/Avalonia.Base/Media/TextFormatting/Unicode/UnicodeData.Lookups.cs (\u002B4 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1db1c0f1dce0f48ba00a59e9bcf81c9733e97059009ae2d8a7544ec5cd130273"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 9 significant file(s) lose their only recent owner: src/Avalonia.FreeDesktop.AtSpi/AtSpiServer.cs, src/Avalonia.FreeDesktop.AtSpi/AtSpiNode.cs, src/Avalonia.Controls/Calendar/CalendarDayButton.cs, src/Avalonia.Controls/Automation/Peers/ScrollViewerAutomationPeer.cs, src/Avalonia.FreeDesktop.AtSpi/Handlers/AtSpiAccessibleHandler.cs, src/Avalonia.X11/X11AtSpiAccessibility.cs, src/Avalonia.Controls/Automation/Peers/ComboBoxAutomationPeer.cs, src/Avalonia.FreeDesktop.AtSpi/AtSpiNode.RoleMapping.cs (\u002B1 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c1620a8e3f81b6996286b3f4c32479560672dfc12370b5424369e58ec11fb869"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 7 significant file(s) lose their only recent owner: src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs, src/Avalonia.Controls/Page/CarouselPage.cs, src/Avalonia.Controls/Primitives/TextSelectionHandle.cs, src/Markup/Avalonia.Markup/Markup/Parsers/ContainerQueryGrammar.cs, src/Avalonia.Controls/Page/PageNavigationHost.cs, src/Android/Avalonia.Android/Platform/AndroidPlatformSettings.cs, src/Avalonia.Controls/Converters/BorderGapMaskConverter.cs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5396bf087c42833f5a31735d3017feebf3ec75b43a59e303b7c64df7588f6f31"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 6 significant file(s) lose their only recent owner: src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositioner.cs, src/Avalonia.X11/Selections/SelectionDataProvider.cs, src/Avalonia.Controls/Platform/Screen.cs, src/Avalonia.Native/AvaloniaNativeTextInputMethod.cs, src/Avalonia.Base/Input/FindNextElementOptions.cs, src/Avalonia.Base/Input/IFocusManager.cs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ed12f0cbb1add40a03942000cbc930268925bf919d06e07555d64e961e1a15ac"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #6: If anonymized user #6 becomes unavailable, 3 significant file(s) lose their only recent owner: src/Avalonia.Controls/PipsPager/PipsPager.cs, src/Avalonia.Controls/CommandBar/CommandBarToggleButton.cs, src/Avalonia.Controls/CommandBar/CommandBarButton.cs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"84b44b47676719c868f45704752e1f08bf355918fa0bf65907e4f12666513a1b"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 11 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 (73 single-owned of 1236 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 #7 (2 file(s)), anonymized user #8 (2 file(s)), anonymized user #9 (1 file(s)), anonymized user #10 (1 file(s)), anonymized user #11 (1 file(s)), anonymized user #12 (1 file(s)) (\u002B5 more) \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":"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":"nukebuild/BuildTasksPatcher.cs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"444d23ba359017fe51e2699d69842a19b71297eb98c3b316e4e940e97a341f47"}},{"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":"nukebuild/BuildTasksPatcher.cs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"e71e2862bf17f57b0247b1502897bae169ab197908451a2f0aa185ed5fdbd8f9"}},{"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":"nukebuild/Helpers.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef8133da96c74ac7819b0e2797c049a1a9d7c402e49395cb4f6e2d996f39522"}},{"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":"nukebuild/Shims.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cde4385a155df3833e41fa18c7950e4bd78c7283ac92dcbcae25f22c3a026a0"}},{"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":"samples/GpuInterop/D3DDemo/D3D11Swapchain.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"933a2e356c6dd97c4a4594538f0638b9cabbfa11f75c6dc08d2949d9d39a7ba5"}},{"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":"src/Avalonia.Base/Data/Core/ExpressionNodes/LogicalNotNode.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb36561caae3cbc1ef55594db6e69a9be515dd388ec935abd6dbbcd5986da303"}},{"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":"src/Avalonia.Base/Data/Core/Plugins/AvaloniaPropertyAccessorPlugin.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"611f8126c716abc3fe7c7ed898ebad7dc05c88938182c9dd888fe88b1d0db534"}},{"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":"src/Avalonia.Base/Data/Core/Plugins/InpcPropertyAccessorPlugin.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"d010c6fef15e988917813cce29a40b376603084f94a0c333e14556556606a176"}},{"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":"src/Avalonia.Base/Data/Core/Plugins/MethodAccessorPlugin.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9857c87b9dbe363219ebeaff2389f39f47d6890fd0e46659b00f1c702ffe1e4"}},{"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":"src/Avalonia.Base/Data/Core/Plugins/ReflectionMethodAccessorPlugin.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"89092d474eebc703f75adbb169d1740ea24fcabe215b009d8c25b31417ba0888"}},{"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":"src/Avalonia.Base/Platform/StandardAssetLoader.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"284d9b79f662b3d298dc2bedb09a614a1aa8048e71956f41e0ca370c94a178f6"}},{"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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.cs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"8065d94c59e3f02fc4f0af2e301ab106d0f9f40f3aae797be1ad4c8decade5dc"}},{"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":"src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d13aff795bd3822d9b84e83de73c6f6176d447577b3bdd7fdef7a1ceae023a1"}},{"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":"src/Avalonia.DesignerSupport/Remote/PreviewerWindowingPlatform.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"d60dde62a36e90ed112c81de469404a426cbb2b4ca8d8004aa9a692ee5188e11"}},{"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":"src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b5deed0f5b6a7a9b733248fb92c369993151e9fa4298acaa6727d03e889357"}},{"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":"src/Avalonia.Native/AvaloniaNativePlatform.cs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1c426526b7ba9a914facf6c825a382184cce3d763da35428cb5c7959e5b0f36"}},{"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":"src/Avalonia.Native/AvaloniaNativePlatform.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df97d22cd6eb7ed2391f1c2e9bbddc52583a7c71e58ba9c67a89999249863e6"}},{"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":"src/Avalonia.OpenGL/Controls/CompositionOpenGlSwapchain.cs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eebbefb36c1c430e83f255fc0736cb03b684e484d6cd905633fbdace49a4600"}},{"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":"src/Avalonia.OpenGL/Controls/CompositionOpenGlSwapchain.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f1f4799dd050927e27226363f1e56e5ff1a63c527ed3947ef02a0b26505642"}},{"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":"src/Avalonia.Remote.Protocol/TcpTransportBase.cs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f0ba94adfd7e6f4fac1df2bcbf9e83ad93bcf571095aaad5790a0b37578347"}},{"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":"src/Avalonia.Wayland/Server/Transient/WaylandTextInputV3.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"706f4eda52acf356103d250d5c6db418e8eea3a1cf44adc7662a322c3d8357cd"}},{"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":"src/Avalonia.Wayland/Server/Transient/WaylandTextInputV3.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"da5d1f73fc30f776deb496a22cf5bead01895141c72af6f95b2cf42c3d907e3c"}},{"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":"src/Avalonia.Wayland/Server/Transient/WaylandTextInputV3.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c98f70d7a77f425013d729cb870d78b5b2761d4685ea41d7bfe26f22fefdbb6"}},{"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":"src/Avalonia.Wayland/Server/Transient/WaylandTextInputV3.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"54963e764365d5eaa897478f32ad1b497ea9d095b1a03b12527963424010691a"}},{"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":"src/Avalonia.Wayland/WindowImpl.TextInput.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e4795acceeaa89b9d872d1d5d030a6a65608e18565dde0598c36e298a934f11"}},{"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":"src/Avalonia.X11/Dispatching/GlibDispatcherImplBase.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7712edeb8bd34513aa6b8c0a1722d0f2383396cc09435f03d5af2d3b39a9250"}},{"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":"src/Avalonia.X11/NativeDialogs/Gtk.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"763f18e9d3ad9d4955e3608baf361379a19728fb9984d10f321c9b64661813b8"}},{"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":"src/Skia/Avalonia.Skia/Gpu/OpenGl/GlSkiaSharedTextureForComposition.cs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0d9b97716f5272ed3cb52c7e4d805142d65f22740728f3493d87d1192a1a769"}},{"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":"src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8c46f09e537a398c2a5bce881ddc9764cdf009ead5df1d77140ac5f7c5ca5e2"}},{"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":"src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameIncrementalGenerator.cs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"f84e97489e87bf62efbf0f25884dadf01a1e5cec86feb78132ea4d0da5c5827b"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: Toggling the window decorations can cause the window to be moved off screen, \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":"samples/IntegrationTestApp/MainWindow.axaml.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9e0d3786f9a50dffefce9ae31a4bb938966ae8ea18a711a90fde03564b3012"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this work with GTK/Skia/Cairo depending on command-line 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":"samples/RenderDemo/App.xaml.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"15b5f3e026d868875df4688cc66d08905627649c8989b8db973513d3f17921ef"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1416 \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":"src/Android/Avalonia.Android/AndroidDispatcherImpl.cs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"f949bdbd148073b3024d17347cb85b266dfb5681b125e009cd88699b39fd4e59"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1416 \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":"src/Browser/Avalonia.Browser/BrowserAppBuilder.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"5753a45c84e3add621e4f8f6defcd889b0da112261b9ff54f60a9d32309e91e6"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1416 \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":"src/Browser/Avalonia.Browser/WindowingPlatform.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"935bbfa170472b2e0c3bbc76e1869617e7934acc1de04d1ba2416bc32ea9ea4c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1416 \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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3990a860e7d09a66ac07f2d929c2efc408b588c950c1230e87f2aa51d4433c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1416 \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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b9bdca6ba7fee213efdf46029913177c5c8605c12c5f1cf8cd6ab42efed6b54"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1416 \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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e1711772184842394b661ab259fb6b7ab064d7a74368354d8f2564d788ca4b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ideally should be created per view/activity. \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":"src/Android/Avalonia.Android/Platform/AndroidPlatformSettings.cs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5c2fe712c8e7791b0484d8d2772bf1799cb4e77c9b2c8cfb47706d08e0395b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ideally should be created per view/activity. \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":"src/iOS/Avalonia.iOS/PlatformSettings.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"c847ceea9d0ab9fd506936132c3dc27aca5583e25939688e8e4ece24896e9411"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: This animator cannot reasonably animate CSS transforms at the moment. \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":"src/Avalonia.Base/Animation/Animators/TransformAnimator.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"69f01ff17647d599d49e18acd8d1081edfb19511a8b689c28c3e1ae6829c1a15"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use StringTokenizer 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":"src/Avalonia.Base/Collections/AvaloniaListConverter.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a98712163a3270ee794e3834c256fe4fb2c86ec934885c5972e42c9d7836c2f0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0419 \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":"src/Avalonia.Base/Collections/Pooled/IReadOnlyPooledList.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a047ff6acfab0503be85b5005ef935f83dfb6326addf57ea3f008920618ca46"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0419 \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":"src/Avalonia.Base/Collections/Pooled/PooledList.cs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9c657fcc3067f31978990d3a679e4c8b733fd1bbfb69dc185e611b66d3fe9f0"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 0067 \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":"src/Avalonia.Base/Data/Converters/MethodToCommandConverter.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"703ed4d51de7a3b812ef3863e75289dfd6297f2ade4b083d478512b3c38c604e"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage repeated across 11 files: The identical BareSuppressMessage (\u0060UnconditionalSuppressMessage\u0060) appears in 11 files (34 occurrences) \u2014 a single repo-wide policy (e.g. a Directory.Build.props decision or an idiomatic suppression), not 34 independent debts. Decide it once centrally rather than file-by-file. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Data/Core/Plugins/TaskStreamPlugin.cs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"1505ba0574c2b28939655536be533c10967c905a50de753d706de51bbf24b132"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: TypeConverters are not trimming friendly in some edge cases, we probably need \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":"src/Avalonia.Base/Data/Core/TargetTypeConverter.cs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"f606b5603d948d221b2d10160813c78355015d5fe35d3131ca8b403ea367b64f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This requires reflection: we probably need to make compiled bindings emit \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":"src/Avalonia.Base/Data/Core/TargetTypeConverter.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b3decc13ca86e608f730210a71c8ec2e8b4f50b8fe67177bce5fc4487066308"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use FocusScopes to store the current element and restore it when context menu is closed. \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":"src/Avalonia.Base/Input/AccessKeyHandler.cs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"94cb60ded0deea0845a8d97b4088d8ac1edea615a07811c1b8c79777163b56ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add control overrides to return custom focus list from control \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":"src/Avalonia.Base/Input/FocusHelpers.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f03dd543a24dd7b7c49299abd1c98e57764f2d8b183c24eca094a4dda818ce4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this do something useful, i.e. select the first focusable \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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97076c9d01b3c128cc8e002a7f0bc799ee55949dd879489b9549c049e3b51ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO Popup api \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":"src/Avalonia.Base/Input/FocusManager.cs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"1407958007213c921005dfddcdb8908095cd4a3ae6765659a277b74e883cde2f"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: This is a temporary hack for \u0022default focus\u0022 concept. \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":"src/Avalonia.Base/Input/IInputRoot.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"d72687ee861c534d716432b58559c6bdbd37354e830b80b3fa76ce4f9d45d36a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Move that to external key parser \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":"src/Avalonia.Base/Input/KeyGesture.cs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c5b67de3f5251eaea9cf00739a035f2edd278d2a03ec3b4cd858e86037b5ac8"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: a window should always have some element focused, \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":"src/Avalonia.Base/Input/KeyboardNavigationHandler.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ac11531d6e80947cf322441b731b41003e2423244be644b634d0e08209b5444"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable repeated 10 times in 7 files: The identical BarePragmaDisable (\u0060#pragma warning disable CS0618\u0060) appears 10 times in 7 files \u2014 one decision applied repeatedly (e.g. the same rule silenced on every overload of a fluent API), not 10 independent debts. Decide it once \u2014 at the type or project level, or by fixing the underlying pattern \u2014 rather than occurrence-by-occurrence. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/MouseDevice.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"676a6e8124fc1e8b9b82ab94986a9219d267c672751f4d96a6713c4029ff941c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The check for bounds is no longer correct \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":"src/Avalonia.Base/Input/Navigation/XYFocus.FindElements.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b7e6f9bd4f9f46c7e7f0ab7f4cb2b9f18b20aa7cb5950cdd58326f63e4fa0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle non-Visual IInputElement implementations, like TextElement, when we support that. \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":"src/Avalonia.Base/Input/Navigation/XYFocus.Impl.cs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f19a90759d57a4e9768b6957f8ce999dee23ae62520c23199bfc5faf325034d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Avalonia, missing Popup API \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":"src/Avalonia.Base/Input/Navigation/XYFocus.Impl.cs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"66047d817bcf6aa49554f5ee15c19fb0494cab27f4b6532a4bfe428ef02083bb"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/Navigation/XYFocus.Impl.cs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"c112c9cfeada3429b081573ebd2913287307ac03ab4aeca66f2d7c31cd5fd08f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 7 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c47159f0dcc30cdc12816f4a47d0f9a8e1860874c11e03b261cd060c832847c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Input/Navigation/XYFocus.Impl.cs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e47dfbce08144ffb40645881b78832571c379b110e7aa994734c4f1c83da9d1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d047ce971ac0158dbe63eb820ce189235253d5e44978ae21aaa3169240e86e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"506e7a5ab74aa68b536d0349e9a9551c6fe2cc5edca70e0e45de085714815cdd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"21c1cc9e1cbbea6d4c2ed8458f30e5ab553b5659adf64d0681551b79e3033ae7"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 5 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6dca763593a6401e1c285056499d2eed4e4098ee7211259c7d8d80030a108e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make it to be a multi-compositor resource once we support visuals being attached to multiple \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":"src/Avalonia.Base/Media/BitmapCache.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"f39e2c28b332f697476c7329edae628ac1adc531a907164c81eaca5e3e754db7"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1069 \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":"src/Avalonia.Base/Media/FontWeight.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29cbe03125bf0aec18c148e4abe2aed64b8db20ccb6b070c7e4b39f37ed002cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Technically it allocates, so it would be better to sync stops individually \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":"src/Avalonia.Base/Media/GradientBrush.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29fcdb263d0326ae8d4d79067e865231cddb81a124c16378544d780cfc0a7f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Eliminate platform-specific push opacity call \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":"src/Avalonia.Base/Media/ImmediateDrawingContext.cs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"546685d76a718dcbd25ed8bd2fd62dd833c927785e0255045946f20617082f3a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: do we need to execute a render pass here too? \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":"src/Avalonia.Base/Media/MediaContext.Compositor.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"f09a24e40873cd0520eb2020879e2a16f259efa78dd1bbf03ae09bc14e6387d6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We are sending a dispose command outside of the normal commit cycle and we might \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":"src/Avalonia.Base/Media/MediaContext.Compositor.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"5159c7933996a94b9663d15d46dbe15578e42830b5f01463fd651adb972edada"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: maybe skip the full render 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":"src/Avalonia.Base/Media/MediaContext.Compositor.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c97aab233526a142cdfbf3b996055e6b810232ed06bb7c44e2c33294d23570b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: port the rest of the Loaded logic later \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":"src/Avalonia.Base/Media/MediaContext.cs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd75c0c5ab608244524c6cf1c3b72d852bc6c004618d084c3c93ed9dbf1bed3"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GetTextRenderingMode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/RenderOptions.cs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c2e8fb127ff289152b64b169c2d0f9173af7c1b9598c0161ed55ab707140e3e"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] SetTextRenderingMode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Media/RenderOptions.cs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"116695ae0d7fc3e15ac3eabbde2a6332bd6b1c20fc1e24e15ebe771696e7caad"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1823 \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":"src/Avalonia.Base/Platform/Storage/FallbackStorageProvider.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"23965b6c7c366f216a32b9ef1a32d5c85c0c415a25058744dc5684c9ed882e83"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1823 \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":"src/Avalonia.Vulkan/UnmanagedInterop/VulkanStructs.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"61c05d9120f0fbce56eb5d826db8f403a34a23a3f56f3f5b49455903670be267"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1823 \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":"src/Browser/Avalonia.Browser/Rendering/BrowserSoftwareRenderTarget.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"1402842cae32ad88f2dd47658bc6f8adb8344142e68c787aba29384920978893"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO, replace with https://github.com/dotnet/runtime/issues/70484 when implemented."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Platform/Storage/FileIO/BclStorageProvider.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"f67bf744b87740b41ead5640ca7eba6f73a20390e069bc150ca4c83301f2eaca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Update subscriptions based on the current keyframe rather than keeping subscriptions to all of them \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":"src/Avalonia.Base/Rendering/Composition/Animations/KeyFrameAnimationInstance.cs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"c80ee2a1ec0c810e6b0fd9acc0f4da0bb278427022b9187276692dd349102331"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Uniform, UniformToFill \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":"src/Avalonia.Base/Rendering/Composition/Enums.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7bb3e112c020f3d43b53b3637f367d3e8978890fb1cc38dc0fcf97dda12c07a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /*\n                TODO:\n                    ColorHsl(Float h, Float s, Float l)\n                    ColorLerpHSL(Color colorTo, CompositionColorcolorFrom, Float progress)\n                */ \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":"src/Avalonia.Base/Rendering/Composition/Expressions/BuiltInExpressionFfi.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"be15835703d836030bfd85f8069e9cdfbd401b492dec88c1f683ccf429bbd038"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8509 \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":"src/Avalonia.Base/Rendering/Composition/Expressions/ExpressionParser.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d6eeb54f3c4f2f838fa9a4eb1a684c01a08fbcc3235ea5fac9094dcb341c0af"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8509 \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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9657c3790e7b5683e0cd5df20b9409402d01a9551d85931e781d226a231b7af"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8509 \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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e2a8db1690714cfbd6422ef119a72b4ac479d7b21b85563cd64ab768c7627ab"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS8509 \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":"src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1ab8199cf336ec359646e6b6e35a94237feb62d73a8777cdf86a2d43eca4716"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: RotationAxis support \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":"src/Avalonia.Base/Rendering/Composition/MatrixUtils.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"95187ac7977acb2029b9a4968f66661b35009a5379da8e36e63dac2d8b8a7797"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: add a way to always render the whole bitmap instead of just assuming 96 DPI \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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionSurfaceVisual.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e682c19e81c14fd6f7514a89279b8e9a91905024f77e2c91c231b0bb2b10e4f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check per-platform to make sure that it\u0027s safe to dispose anyay \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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"c258f45770a01b476a9e3d70622a6028daddab1ef7782e286dd16b55825fc670"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Maybe adjust for that extra pixel added due to rounding? \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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisualCache.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eec2499433e3110eb9f2ece3f30f60c94f06290e3a6f2ec2de70cc2731e0792"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: parallel processing maybe \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":"src/Avalonia.Base/Rendering/Composition/Server/ServerCompositor.Passes.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"6175b230b3b267ff4ff9b5fb9a8a53d94bfb58094e32056fbb711fda178a157c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: dispose once we implement pooling \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":"src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f42616fa91f03e093feba2a47ec5770f44afcc457a04aac7c091b7f910f8acf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider moving the helper out of Avalonia.Win32 so \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":"src/Avalonia.Base/Threading/Dispatcher.cs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcb112b4874b843ed1ebe14a38a1cd100a088c92b10ec615e8714d5f10b1de70"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Base/Utilities/FrugalList.cs"},"region":{"startLine":1991}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b731cc1456f296deeb17163cce3a4251d1d938f037891ad95906a692228a1b5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcbcd490566c283d4d4412f52e33e20f5302c5baee529c284f907c637a63097d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"036ba1b9cb7fd6853667fd58f847b1e221d2b023a300857b2c3324beb80f27e1"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb6cf53d869073a23af4e078f165c5edb0bb00767fc3314ab39e3364f839263f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fa83b2532c4f37033b0c42a9c17c23403647ca9be40fe2f6ede50da162f5fd6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"2531ae9dd8d5e931ab460c0d578611ee029898b42cb28c68e3c8bad053a9ecd9"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"38abd93695a5347e605be5f0a2e5e3e868ad34996afce142372c3f1398032bf5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a76b01b41125dd2d56cee563dfa7ca799deac31a4493c1b9e5b3687ede2298e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfc39fdf9f3d52ef4248824716f581f922feb01618484b40dd3e29e10abe4981"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":3377}}}],"partialFingerprints":{"codehealthFindingId/v1":"b45ef8b1d9f234323905c309e1431966aeeb97c3a5e43992ad9c001a5e6cc9aa"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":3381}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6b708c0305313f86f318fd25ae1b44178bed9bed12428dcf07bdf5b9f07a5a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":3487}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b6805455788132b556272e07ae09b24a3905acf1468189de5f9fac86907b513"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Controls.UnitTests/GridTests.cs"},"region":{"startLine":1304}}}],"partialFingerprints":{"codehealthFindingId/v1":"07331e83cd79118c749a9f5260399cbf8de8cd92df59b4357fa09351ee1cfa8d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Controls.UnitTests/GridTests.cs"},"region":{"startLine":1316}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fec152dc3f1d2af40b029a950680e67e4eeed44653df23c5abc39b7bef715f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Introduce a dirty mask like WPF has, so we don\u0027t overwrite properties every time \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":"src/Avalonia.Base/Visual.Composition.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c5fdc5fa23a748a2e6372571005e37c792ebb4674ee1f52e1b53ec53c62c3a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Verify all usages, this is no longer necessary a TopLevel \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":"src/Avalonia.Base/VisualTree/VisualExtensions.cs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"becae560a660f534bfa12f38c8b8cb23b2ad78a439868dc6c45046369358df4d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: After Pen PR is merged: https://github.com/AvaloniaUI/Avalonia/pull/7412"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.cs"},"region":{"startLine":1012}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4c8fb690858cbc5105e85d7b1dbb517abf9f928325378089dcb476719d61b3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fix this, for now we keep this behavior since someone might be relying on it in 0.9.x \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":"src/Avalonia.Controls/Application.cs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"edfcf92871111510b79865e5298a74ff34815aebdc09282891278c1c9805f2cd"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] Watermark"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.Properties.cs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"780dfe837a2afb5fa8926d46706b4ebeef17646f9d96d76bc5ca8b9f4efc8efa"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] Watermark"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.Properties.cs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e3680897adf4a7d447f2e58cb1a12615cff92a0b5c27ce326078a6ea00c19b"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] Watermark"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f71d172c04025e136ccaccb24d45e4275e51b1820b7f3dca74f1e7031a4df3"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] Watermark"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"de60ef15136c897f47e7a1094c323ab065e0424aab690e4158920a261748e184"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] WatermarkForeground"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.Properties.cs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e59aa8a1cac4f78872046becdfd4d995a90132dc9144e123ce94bdea83929fd"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] WatermarkForeground"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.Properties.cs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe94777cb04c15702da87928871329d089c9125482a4a788bedb573d199bf380"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] WatermarkForeground"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"c986a425e15a57ae7f4cb17f7e17232d82611531d7c42cdf6e580319e10018bd"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] WatermarkForeground"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"151ba07ddc079a9f7e547970fb706fe156058d79da3a8bf1ac3983e845002bb5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO Check UpdateTextCompletion \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":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":1719}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea578fad5746c6949302547abd781fc07024f67c5dd0090d9fe3112241df2450"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] HasFocus"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/AutoCompleteBox/AutoCompleteBox.cs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8f8e1273f43f433720860c0c581d72142c1db3cbf263b2b00aff5fb4da34c95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Investigate whether this needs to be done by changing 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":"src/Avalonia.Controls/Calendar/CalendarDayButton.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"9150ad995ea7231224bb7d759a5392ff0101ca8769e2079d66af0aaada8172b3"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] UseFloatingWatermark"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/CalendarDatePicker/CalendarDatePicker.Properties.cs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fe5fb102f92fa1e6acdca94b7323119e84f4801e0056ebd4b6629c572ecb5b9"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] UseFloatingWatermark"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/TextBox.cs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa037ee9771bb8112b305f9cefd1d8cd5b28126004fca142288d186a7c59badc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement this \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":"src/Avalonia.Controls/Canvas.cs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c84023da6d388d68bf1e60888900927854516b463880ae08cc257edfea1bec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Looks like that sometimes thumb will raise multiple drag started events. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/GridSplitter.cs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef8233118fe99c0f043841c5ccb8d8413758c414f00e74bf8cf1be7649323cfc"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: In theory, this method and the UseRenderTransform shouldn\u0027t exist but \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":"src/Avalonia.Controls/LayoutTransformControl.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa7b0c2fc76d6a99662dedf69b66d7b6d4a32047fc91e22973f99616c349c90a"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: This nasty but it\u0027s all WPF\u0027s fault. Grid uses an inherited attached \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":"src/Avalonia.Controls/MenuItem.cs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"b59e7c7016df4e448b6754e53305ba3f2c31eefce9d92ab56b936a2ab9905c64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is confusing for some ppl. Need to think about alternatives 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":"src/Avalonia.Controls/MenuItem.cs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ef201bc0759713cf9b1603865f1ca7df52d3d53673667be7b4da9d544b494c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable AVP1013 \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":"src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c9e9d2644f83ce6d473932460b0c8d1da2434c9cffe78adef0f96777363ea73"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: #8179 needs to be addressed to correctly implement it in the PointerPressed 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":"src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b929e78f1565f7f5ce22281c762f868f5fbb53b4d1eb5ad2bbd549d00da04ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Can we PLEASE get rid of this abomination in tests and use actual hit-testing engine 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":"src/Avalonia.Controls/PresentationSource/PresentationSource.RenderRoot.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7e0e45fc2ae1d6a26dd4285aa2d6966b677d62f30d7e4596d6a17b7094628b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make popup positioner to use PresentationSource internally rather than TopLevel \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":"src/Avalonia.Controls/PresentationSource/PresentationSource.cs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d9c2e9b1d244a8bc8fd8bee7323da0a87209a995e170fdd6e205d970da415f6"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] UpdateSelectionFromEventSource"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Primitives/SelectingItemsControl.cs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"237ea54fbfa74a74337e402a44d506f8700021c2460bbdc5d7995ee0784fffa6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Somehow react on closed connection? \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":"src/Avalonia.Controls/Remote/RemoteServer.cs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"56d88db793ac584f4db22569adb135684551882260923d3af8e19146e313c0e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Somehow detect the actual DPI \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":"src/Avalonia.Controls/Remote/RemoteWidget.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"aee602905cf0c2bd7b791bc739196628e1ea09f815726c02049e0c159c67d3df"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: 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":"src/Avalonia.Controls/TableView.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f2f8f690486da07a5031c3270ab04938e854900e5cf2ba30a5d442e64141561"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: 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":"src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bab635224c793d4151c0acad4981a47a7f2f4890399f26442eb34ba4199bde1"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: 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":"src/iOS/Avalonia.iOS/AvaloniaView.cs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"310f3d8be99999a1728118fc2d7c84acc2b11632ff00a358b53fcfe70c957908"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: 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":"src/tools/DevAnalyzers/GlobalSuppressions.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"efb4f70967143a6099ca1b15d8288c3c34fcbb9accb44debfdeee819a1a6b6a6"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: 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":"tests/Avalonia.Controls.UnitTests/GridMocks.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"35677a88234187fa614059e1153d3715e2e0a0aa8e41607704fe1dd8f4188dcc"}},{"ruleId":"D17","level":"warning","message":{"text":"BareSuppressMessage: 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":"tests/Avalonia.Controls.UnitTests/GridMocks.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1245c0d2e04e11a4c282beab93ac8cce86187d79904c67e8df03b95d94b2390b"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] GetTemplateChildren"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls/Templates/TemplateExtensions.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed4a43570be648f62f6a3eb316c558ad875681776a058daa2afb35defc4f9146"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1815 \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":"src/Avalonia.Controls/TextBlock.cs"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"de7d1c15e1032ecdfcec0cc18ae1c4a6a13a5b972cbd177187dcb6128f9707ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Un-private \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":"src/Avalonia.Controls/TopLevel.cs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a0182371167dea02a7945031142d997e91e60c9982df1e43b041be77e0ec23"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How do you do this in .NET? \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":"src/Avalonia.Controls/Utils/StringUtils.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"58a6e06c242dbf9f205e5f21d8453a68099ed2c1dd9a86da030d45c29502b2ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: How do you do this in .NET? \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":"src/Avalonia.Controls/Utils/StringUtils.cs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"b263062f78e2316541feee2cbaeee1f60705f9ff8013016dff8450d108b87650"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Better way of doing this? \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":"src/Avalonia.FreeDesktop.AtSpi/AtSpiConstants.cs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a4c0bd9c0b98cd320c765133a26b900287f0fa10975a7322250f55949aca12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Proper mapping of ActionList keybindings to AutomationPeers. \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":"src/Avalonia.FreeDesktop.AtSpi/Handlers/AtSpiActionHandler.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4c22f2a16613da8fdf2973a1869c3964789df8fe743f8442f6ce6a273ca740"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This method is a bit sketchy. Might need to wired up to \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":"src/Avalonia.FreeDesktop.AtSpi/Handlers/AtSpiTextHandler.cs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"107b1f97c6f34a4ea2fbbada275d43ec246188b8b14a9385c92632f39c12fe46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Avalonia.Native/AvaloniaNativeGlPlatformGraphics.cs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"e08e7d2e243808600867a4df6a1535c9b86b558d5393f988c5b50c7c868eb23c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Avalonia.OpenGL/Egl/EglGlPlatformSurface.cs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"7adfc8417339067cd7e9688cc48ef98d847ef34d51a796bac3b592a11e66992b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Skia/Avalonia.Skia/Gpu/Metal/SkiaMetalGpu.cs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb195b7dc3392126e7b75cb51e496ed9c18b0af9c18335e5f81bc74f5888fc14"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Skia/Avalonia.Skia/Gpu/Vulkan/VulkanSkiaRenderTarget.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed369e3cdc51896dd88163c2a789509fd3ff16ebc954e8e4a0f6d687e9e5ab47"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Windows/Avalonia.Win32/DirectX/DxgiRenderTarget.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"c988db6a27003fa2c71d4d2a802b2f3f7ff82f55722c6b95a6cf9e09ddb37101"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Windows/Avalonia.Win32/OpenGl/Angle/AngleD3DTextureFeature.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a7b96d8c1d6ab84de24216e7e026cca482f912e2749cf634d2a5a055de10bc8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use expectedPixelSize \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":"src/Windows/Avalonia.Win32/OpenGl/WglGlPlatformSurface.cs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf149096e7ff469996c1969faf3cd362143f0c5f4caec2eea85f2b6a63a95c2d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO hide native types behind IAvnClipboard abstraction, so managed side won\u0027t depend on macOS. \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":"src/Avalonia.Native/ClipboardDataFormatHelper.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef4b10ba028b2b545791b149f28eaf462bc982449d8d6b9efbb4164c7777887c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: We ignore the scaling override 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":"src/Avalonia.Native/PopupImpl.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b4f370dfaa631772b477570cb3f5ca705590fbdbbb2c4c4b18c47dc30331a6e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: We ignore the scaling override 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":"src/Windows/Avalonia.Win32/PopupImpl.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"71413532f42c85b373d363dd1ef5d9daf5869fd4e94c4c0940a64a944cb12d09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Casts like this are evil \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":"src/Avalonia.Native/WindowImpl.cs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"69092d08ffab1508fbdcd420e65dea79a300ebb6cc3cc4daf296bc8a1bed0c09"}},{"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":"src/Avalonia.Native/WindowImplBase.cs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6df6aa69aeae9384ef40246850e233aafbc1840cafa1adbc98501ce3ff3a1ef"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] InvalidateVisual"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Controls/OpenGlControlBase.cs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"d694c4e2597642c74e42ef1b490146a00333a3276af77a44b6d7d23c0533b990"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"053366f95d2f978a9c432d30c063488f93cb5d31b6d56aa4ecb483bcb0541743"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0071e4c831afba9a0e9d05321a4353fd7fb2bb53bc2949c727326ce2604c329"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"616499eadcc261a2eb66a3b40fc7ee43198b1aaeaec933c0d4024a3bd6084afa"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1117}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e43f56208db66e2ddc93936d142172cd03677730775e7ddc0752d3434c7273"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1124}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1b1f1ed8a3ada18e7b1ee20bf7c2ca056ea20756a5e3569110033c688c7fd1d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 16 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"b181392f37381b69ee5c9cbe45024d3ae05f78b65b1fb87e1b68cdc4b5579d5b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"a753db6a0d99566fb53a30869bc875bca397653ee9a1100375272ff907b424a3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a0cbc82d445c4f609c71fe1a120517a2e16f12611c15553effcf719bdf44de8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 9 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"14dc7fbe3a5bf7359616aa2c4fd8086da2a2296786ab1a023f3b52dd974ec92c"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 13 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"28f6a1f4aa3b85f809a0529e5fc8d2d5bf3208a59d892a5ecee1ddb6c4527e37"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 13 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"387a27717809e2bd5264cb1a9e08048aea512ca8b5180eb544b872a4604b9948"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 18 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6333a38457a2cc58ad9e20a80b191c2fc82e63890c54d1a631fa9cdca164214"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/Egl/EglConsts.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbbb7c73c96ca69ce2aba893e3d482f9f0e61d346f98e9b3a0c7d78bd8004d8a"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"946f24103c9956f6104792dc1bd066da0d0d8e848bc92a376d0049e67ccb5596"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Controls.UnitTests/GridTests.cs"},"region":{"startLine":1240}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b07e78f96429b96698e9212088ae93cfeaa571341536710abb5843efa39baa3"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/Avalonia.Controls.UnitTests/GridTests.cs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f59fa6937818817c94a1e63792d104cfe556a5354a6bca4fd01b272b22fdae7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: AvaloniaLocator.Current.GetService\u003CAngleOptions\u003E()?.GlProfiles \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":"src/Avalonia.OpenGL/Egl/EglDisplayUtils.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d06638b0047989c73a5460812cf4b667f7574980f615d606a4513e3f115cba"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc2028aae90eddd9d1f839dec298dc942e0d01e0fcbc9146789a487f862cdc09"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"eff55ee1becb7f3efd197d0c26857076ecc4f5e7fa6629d0369b599b1a7c1c43"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 8 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a6fdcd58935f7680b407653e3618f36662609f5746e365019c1ad01c4af61a6"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 64 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"46d73a9bf85a390487b6de6c8bcf19e0b7f84dc8c071f86db1e4e8dc66c4a37b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 93 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9152204c9303efcdb83561addb2b759a2fee999cb2a7da168ef7b2d53d0675"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 22 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e87acaa15104473e540e31e11af8ccbd0a83f0132416f6c417829f073b23178"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 48 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2bd4ec8e6bc1d15a56106f9e9326f50f963dc261f5d027eeb5885cdad001533"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 75 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a18ae904ba84b986f9141de4825ff98c6d78d442c40a3856dbcd43ab4f73f56"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 51 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"548f176ee2165125feb4020ae294fcd367b4178a5b593d8499986386c30f67bd"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 28 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0ec478942447defda43330d6df8bddc4a8def87671467e6456a97c3f6feffb0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 11 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"88faa579ca2faa53ecd213e71d274b34b14300a40b73a2da232c71bd527aec85"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 30 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"3833bb229915f610fe0ede418c97f7dba0d3f4ce2934ff1eb0d6c4227935401d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 30 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":681}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9e149728e71780fa2f2507d9cd1f36fecd9231ef59083458b134d10145d9d0b"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 100 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e80d07331257db428e1d3f1c6f51dd12513a958e4dd4ddccbf236c9a5923698"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 31 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b1aea82bd8f1c037c53c13f7aa60b00f436d0f8de0913f2064e744d3fdd8735"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 31 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2cabf6e9270615e5d60dcb0f174faefafd7cc71d1e562f308f1eafe08a0af94"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 73 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"c23f6e9bdbb02470e58fc826a311842faf2f815ed6a382693b60508ef8b15313"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 39 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":794}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a7be3c471fe4c4b999b5ce55525c9b4e6bee7aa6f20c3695e93f69f1887b10"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 12 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a9f2abe143065a8434c904f53c53880daa46696854df648cd3739670ec577d5"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 62 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"825edbb58f172eb365426250137d7d0893befc88e7e5c5b3cfdeb10dc99599d0"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 62 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1172}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2784fac8f2729b22b755aa2a16518132dde260f1b786176b8aaffb631c92049"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 26 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a0075108a1f85b99df98c7406d9cdb8709d3000b7eafa9953affea4e9579c8"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 54 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":942}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf63f0fea8ee21a23934572f9cfbc9401e80dc9fdfb9f9767cdf0c28b4715e2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 102 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":999}}}],"partialFingerprints":{"codehealthFindingId/v1":"580e6347af70d57f093c2a638c710d7287e15fe3bcf994cee1ea8f9ef9fa562d"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 49 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1236}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dafb199cab22eee28d49c615acc24231a58f8d8b437bc9b1f3111bda4652e8e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 19 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1287}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa959dc80bdb0e02070eafc30e318bd7b161cf688a1036baf71d3991dc139bdc"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 2068 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":1307}}}],"partialFingerprints":{"codehealthFindingId/v1":"fabcdb0ec5150d12d0afca8fce8b9a5bbe4f10d5ef74fb83523d77e945f1f5ae"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 101 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":3385}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e5e70e327b32f54afc88bd3c6b7ae994adb099769215e03ddfaf8efc5521e1e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 1971 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.OpenGL/GlConsts.cs"},"region":{"startLine":3491}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a2d4be7a6b62ffc535c52450a2b57c0bb57a4abeb78268b616e5fba811b9d62"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: generate random-ish bits. \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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeed2fe930562b76e8185d25ee6d30efdb89855a5f5c4be41591f7cd309bf291"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo: use a pool to prevent fragmentation \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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3331ce2f485fb3e045b7381702efa721424c178b68c9d94fdff45c308b9c08d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo: again, look at fragmentation prevention \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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1324}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a63b74d77b529790523f2936197e3756625362ee52f6b48bc58c61a49d9d17"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Is there a more certain way to determine if this is an indexed property? \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":"src/Avalonia.Remote.Protocol/MetsysBson.cs"},"region":{"startLine":1553}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f6b8beebdd56c210540bda48845c4f5020e7c85e1549d3a467763776a394d3f"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0649 \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":"src/Avalonia.Vulkan/UnmanagedInterop/VulkanStructs.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"5acb9846008a2c083e24724a5d7938334f88088a16b1e676de55a146166ec7b9"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0649 \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":"src/Windows/Avalonia.Win32/DirectX/DirectXStructs.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"651d6f2293b5f87c2f1794b54840b155dab6434f3a4279539a5fb67bc0bcf6ec"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0649 \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":"tests/Avalonia.RenderTests/Media/BitmapTests.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c877fc6cabeab1c1bc3d20b119c6cdf3b85065f2b8f0b27d3258434ec708f60"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0649 \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":"tests/Avalonia.RenderTests/Media/BoxShadowTests.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"23e6bca5b9ab98d068b2d5635b03e8c249fb535caa780558c8cc12e59303dd05"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0649 \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":"tests/Avalonia.RenderTests/Media/DrawingContextTests.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbe8cd615501f4d126bcb502ba0df92c3cef6eb5920cae7b3f39d7848b246621"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0649 \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":"tests/Avalonia.RenderTests/Media/EffectTests.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7f5ed9bd974e6957352213875eab4cee13ab44b5ffd8ad50097d9023aac23c"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0169 \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":"src/Avalonia.Vulkan/UnmanagedInterop/VulkanStructs.cs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6689ca4e97113dd564833e58eb428f4b96fcaea39ebceecf79404e32a782a7d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CS0169 \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":"src/Browser/Avalonia.Browser/Rendering/BrowserSoftwareRenderTarget.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fef9fd81382e90af54b3823be6785935e790f2d176db7e2ab92e32b7c0e5c9c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: keyed muted \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":"src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bb653d525ce2418f699377dc63d966a10800975344597be376d7a8c77593f5c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: keyed muted \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":"src/Avalonia.Vulkan/VulkanExternalObjectsFeature.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ee19cead72330520ddb0be4d9966a855166abc1b884d23af602b464710ad280"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Wait for V2 version of the protocol to gain more adoption and implement it on our side \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":"src/Avalonia.Wayland/Server/Persistent/WSurface.cs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"7510fd4f7543b66944464a5be3b1e59c684c174e652cf4ed5046fd4caca144a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Reduce to 2 or 3 if explicit sync is supported (once we implement it) \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":"src/Avalonia.Wayland/Server/Transient/Rendering/WaylandEglDmaBufSurface.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cd06c905c09b156a78b43f5472162ec0750004ba852d7b4eddf2839d308421a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Pool buffers \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":"src/Avalonia.Wayland/Server/Transient/Rendering/WaylandFramebuffer.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f4586c6c91b305c7aa5db2150545d7587388fb541b7807fdc5abc59265fb254"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support \u0022damage\u0022 regions \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":"src/Avalonia.Wayland/Server/Transient/Rendering/WaylandFramebuffer.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5639d9fb54d67b7992785640c4ef3bee0cf8318a74f5c595b5fc96e97bf5026"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: sanity checks \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":"src/Avalonia.Wayland/Server/Transient/WaylandGlobals.cs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eeaf58fb4a90dfc88417f5d58f294ca04a118f5b122bc297689945e5720cf84"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable AVALONIA_WAYLAND_FORCE_CSD \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":"src/Avalonia.Wayland/WaylandPlatformOptions.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f61945702ede7abac4037ba5eca5f08437078731c540df96df79aca47237b8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We need to properly check if touch contact is primary, but it\u0027s tracked in TouchDevice, \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":"src/Avalonia.Wayland/WindowImpl.Sink.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf6c74aadf0a7432562ddb031dbb8f4c28cb59f842064aae2609c028a853e876"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: relies on focus root being TopLevel which currently is true \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":"src/Avalonia.Wayland/WindowImpl.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ddb1d459659c1d43c699da20d1fb77b6861c2e53175aabb1757479c2848adac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query client decorations \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":"src/Avalonia.Wayland/WindowImpl.cs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"116eef3ecc839e733853bea1d3b0d88deedd272fa55a49da603594f969cf5d25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Re-apply window state \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":"src/Avalonia.Wayland/WindowImpl.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"040c79fdfa5db2e3a1fc9fe09411032e5bdfd695fb781a8df67ec0cb1e0f146b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 414 \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":"src/Avalonia.X11/Glx/GlxConsts.cs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc1c2632be9877b6722865971789dbd68454c37bf33ed4e3a9d7aed55994bffb"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 649 \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":"src/Avalonia.X11/X11Atoms.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb76ce08229974fb6a15251974ebe91983f0076fa766740a76a57eac878a37a8"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 649 \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":"src/Avalonia.X11/X11Structs.cs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"0342f1831fc80b5b002d662c90fefb15a93fd3a32953d9a9cc89698784aaa8e5"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 649 \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":"src/Avalonia.X11/XIStructs.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf077680805a4039457971078a574dd6075d2d6cf1848f489fd05abffa596897"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check if other platforms have dnd-none, dnd-no-drop and dnd-ask \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":"src/Avalonia.X11/X11CursorFactory.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d49e0d3867cc11dfa6150d710b6c97f7dc4809285b824ddcdc498d3242e528b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Actually implement XEmbed instead of simply using XReparentWindow \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":"src/Avalonia.X11/X11NativeControlHost.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdda742c6619fad2a8232856719724b4c90c75fa6a4b09047db6c9e199628d58"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable AVALONIA_X11_CSD \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":"src/Avalonia.X11/X11Platform.cs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"e91b9f55be18c3bca313930d51217890bbd8d26b3b4420448c044fac00458e51"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable AVALONIA_X11_FORCE_CSD \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":"src/Avalonia.X11/X11Platform.cs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c075d4fe4dbf58dd788c64f3d392468802d9247200a22b457a0123a48664c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should query this from the active render surface, however we don\u0027t actually track what \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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d6d2d2c009cb0044f24b82e83abb2e0fd567d20c4d939dab8d0fc9bc5d9c4a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This will be incompatible with \u0022root element is not a TopLevel\u0022 scenarios, \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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"b670379964fcc56e26dcafe9a9a5abdfce04242718d715d175b5408d0c1f930e"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: this relies on focus root being TopLevel which currently is true \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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"4366601667e411fba488ee07ffa137da10a722dc7beb23173101fe8eabd7e0d8"}},{"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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ffbaebb25d4c64cbd30636d09469d50813399397eb68bd04600a260e784d620"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Not yet implemented: need to check if this is required on X11 or not. \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":"src/Avalonia.X11/X11Window.cs"},"region":{"startLine":1722}}}],"partialFingerprints":{"codehealthFindingId/v1":"85082f771cbc137735c263317d5dc638c1a609fff739c8ba45e8132338523357"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use Start\u002BStopRenderer() 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":"src/Browser/Avalonia.Browser/AvaloniaView.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b148793d31eb632eb1b505b78d6618922ae939f1b6d6d7c4ed70106d93907b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: restructure JS files, so it\u0027s not needed. \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":"src/Browser/Avalonia.Browser/BrowserInputHandler.cs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"85120e8681f1bf52b2c032db3be78eb4c4a2fd3f01ff7a7caf164b0eab40eae0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: refactor pointer devices, so we can reuse single instance 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":"src/Browser/Avalonia.Browser/BrowserInputHandler.cs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"705c5996aab8f1953a76823232496e1efc570dbaf52a13aea295d9fc38983de8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement \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":"src/Browser/Avalonia.Browser/Rendering/BrowserWebGlRenderTarget.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d2176c3121c4144a3484261f53138a5bd7c7bc6ae11a35590653c11a6687b79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Replace with public API https://github.com/dotnet/runtime/issues/77541."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Browser/Avalonia.Browser/WindowingPlatform.cs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4aa9aa98627fa9595d3d96ad0154eb5d1efc7fd6e07746902771abb97656127"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Headless/Avalonia.Headless.XUnit/AvaloniaDelayEnumeratedTheoryTestCase.cs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc0b7fb31e92d574103b494a4e9e9a36e59563ee2f51fa9e0869d3c07e50d97b"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Headless/Avalonia.Headless.XUnit/AvaloniaTestCase.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"260ff554ed1649a109785c4cdf9c9aa10f9d31b3fae3b475ab459c66a4061ec0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Hook recent Popup changes. \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":"src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"338558901d5f4e15651af7d73612ecd3115ac7d5c7de0c78407d7153d81cc2a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Hook recent Popup changes. \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":"src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab95930933db442855e01e9754c396f8049642ca6b7bf16e024a64ff437b1f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: support input modifiers \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":"src/Linux/Avalonia.LinuxFramebuffer/Input/LibInput/LibInputBackend.Pointer.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"3903f2e79ba67d38e0f92b1357ee8fff5288766c89bc07e04559698a957b208d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: provide anchor? \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":"src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlClassesPropertyResolver.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"d32fbde5d0e591360e716b3a9a8a4990f9bdee5d504241ff1b42afae569459f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Investigate \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":"src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f4828d076912e0fae3c46db074cfc23a8db226ec44482fd17931bbec4ce7d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this a weak event listener. \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":"src/Markup/Avalonia.Markup/Markup/Data/DelayedBinding.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ae133ff66a424a927941a1ac230c6106e35daf7eb5dab54e254ebedaa3d57d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make this a weak event listener. \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":"src/Markup/Avalonia.Markup/Markup/Data/DelayedBinding.cs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"f77c2b7a5c3754197d7a81fd73e58d2399c5bb84f3d6c8d926f076cd7f46550d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Get rid of this value, it\u0027s currently used to calculate intermediate sizes for tile brushes \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":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"9057e70c213e62dd44e729d0be528739e7ee94368fe3465a5c1f4de3020f932e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Still something is off, dashes are now present, but don\u0027t look the same as D2D ones."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Skia/Avalonia.Skia/DrawingContextImpl.cs"},"region":{"startLine":1469}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6b58bbe5f67fd1684c7e6b989c94422a9512ceb1730bd0a546dfe6f740af19d"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] SaveImage"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Skia/Avalonia.Skia/Helpers/ImageSavingHelper.cs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d07717ecccf7ade861e1065e67f6f89f80aa6011db8ccfaeb5ab3347678ea2f"}},{"ruleId":"D17","level":"note","message":{"text":"ObsoleteWithoutCallers: [Obsolete] SaveImage"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Skia/Avalonia.Skia/Helpers/ImageSavingHelper.cs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6de3e3b81ba63882b50b08fa8eb967d69991b532bfd6c9fb20a30c2cfee8a46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Skia doesn\u0027t have an API for DPI. \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":"src/Skia/Avalonia.Skia/ImmutableBitmap.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"81d7d29a0063ef593d972b5443322c7177275406ccb378356363bb4d77fa58dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Skia doesn\u0027t have an API for DPI. \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":"src/Skia/Avalonia.Skia/ImmutableBitmap.cs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"17828bccd0b303d57bd18d7157af5cb397665e4e53050df27b006e3b1c411f8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Skia doesn\u0027t have an API for DPI. \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":"src/Skia/Avalonia.Skia/ImmutableBitmap.cs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"8194d0c8574292f9d8e3df6894f31a4ac3b6dbf41ca1c3b79e7b97d87103803d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace with GetNativeIntPtr in TryGetInProcessDataObjectAsync \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":"src/Windows/Avalonia.Win32/ClipboardImpl.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5b4f6990dfd95827473c99da7cb02be9a235ec8201d77de14ab058479100598"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we can implement BlurEffect.GaussianBlur in with IDCompositionDevice3.CreateGaussianBlurEffect. \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":"src/Windows/Avalonia.Win32/DComposition/DirectCompositedWindowSurface.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"0998a6d3e423b09f21a180fedc54b6a6b8519b089276aebfd0d04f8bba8775e1"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable 169, 649 \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":"src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bda9cb94db6482042af73a61eca13a79a312dd6c4a9bcf5651045db4b594b2a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO handle composition 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":"src/Windows/Avalonia.Win32/WindowImpl.CustomCaptionProc.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"94886a6507d313d2ed01f303586c8ae8dc27e8d0aafc4105217117da3aae08ed"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //ToDo - there is something missed. Needs investigation @Steven Kirk \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":"src/Windows/Avalonia.Win32/WindowImpl.cs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"6751d189387ca324f62af994c56a02eb1a2d78bc390a688d0bfb06ebe80c4d10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Custom bitmap cursors... \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":"src/Windows/Avalonia.WinUI/WinUICursorFactory.cs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaf213720a488ee65b74504c1876b9a85452bb26af9c23515a4c7262287c54f0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO adjust status bar depending on full screen mode. \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":"src/iOS/Avalonia.iOS/AvaloniaView.cs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"476c120d8cce0feb3005cb582abbcc5479d83930894a2845d5d001d9ce84b498"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: start/stop on RenderLoop request \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":"src/iOS/Avalonia.iOS/DisplayLinkTimer.cs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"56fc3ec1de14716cd812058b45cb1b8d40a9820e126958345c3ecfb7461a98d1"}},{"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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"8af9780860dfbcd5d3510808b5e6eea1e34def32c93bd9fca8c507f7b52ccafe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO raise RawPointerGestureEventArgs \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":"src/iOS/Avalonia.iOS/InputHandler.cs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"d84a45c1e8ce5b2324c95a9c1bc4f93c9dc8fca1d12a3acb328876e09701dc3e"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1422 \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":"src/iOS/Avalonia.iOS/Platform.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d6377ffe3a7cdfa648fd19114bce233d217c65272a79b07750f43700fac5789"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1422 \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":"src/iOS/Avalonia.iOS/Storage/IOSStorageProvider.cs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f26c8498c7b35547339a5557462fd678451deed759966102df9ec42d733c79b"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1422 \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":"src/iOS/Avalonia.iOS/Storage/IOSStorageProvider.cs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7930fd3e2f28e14662377de50378e6861f1273aa467b1a08664cb10f6fd70ad"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1422 \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":"src/iOS/Avalonia.iOS/Storage/IOSStorageProvider.cs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3c7118407be286a7daaf697af91bfbf6ecb6c4c91c4b81d61438dcdfb1455d"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #pragma warning disable CA1422 \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"81b33b714cc76f651a1c7f3914bf61697084a59b78ec6b6fef51a56ad45f092d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find out if it can be lazily enumerated. \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":"src/iOS/Avalonia.iOS/Storage/IOSStorageItem.cs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee7e599768b43d015fc181b82aa74c30ebb93dbdc7da0dfa39a5aef6ad3a4379"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo query and retyrn RTL. \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff97d0d3e096cf08cb5bbc8279d51f7e9142a0df7d6517bed7d48af3a695069c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo ? ignore? \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1243024163d3977a9bceae8aa8d84d2b182c8b5011d2f33d945abd1df8ae88f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query from the input client \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9d1c7ceec7a0d61e762da035d3f69efed4ae1f74bcc8ae2775cb30dc57ba90c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query from the input client \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cd980cee8e529449ee18481c311db43d01eadda9edef4f946b4bf3933ea7caf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query from the input client \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee73518d15abc7e507ade4d54cf9f33bcfb1e273a05da55d0ee28e659334aced"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query from the input client \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c05474d6f70061d1156defa802bc0a6503f416b1def9e78ac3e8ee3d4314161"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query from the input client \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":"src/iOS/Avalonia.iOS/TextInputResponder.cs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a1679d318d93ff02727075660f860c4a4c3c7e93dcb17416370cf543ca93766"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"64dc5c682376d6ed242888b5ed2da497151bb205f5cee35a9c07326ef6658ee2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc4df607e72d4b2c1ca7bcb4133d09a80678d16fc03eda945f8c108403cc298c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2fa57cab2caab95797786df3e491f81b11b13a80af7715805bdfae970553c9e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"728fb207decc5c8798358b005baf276c12227d1bcdf3f8a93dbc74349acee41c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"c393884ebcb5153b30cc0ba024258cffaae042cbc1d41d8e97bdd3fe2e6e78e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a822c22a0e3090f5dae47b406fac4aa45896aed9a6e1ff95fecb211dbe55f028"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"b830f7a6eaae87266ea7157e4abf3b19e1c1f50ba7dcdbc5bc3de7428adbb5ca"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a46d30632dc1e5226724ae4ce860c15cd0dca57c681a9be6693e7662abb7a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"853c079c93ce427a5a722fb03a3739954bd0ca8706c7665d2e113dfbf437e529"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd2f0ab643efa6068c4256d09f54d391171d91a3c778c8aabbea4b047249ced4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: autogenerate property metadata preserved in ref assembly \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":"src/tools/Avalonia.Analyzers.CSharp/AvaloniaPropertyAnalyzer.cs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba4512094cc708177237783a30ccb95c6ec1b5696eed9c46f576f8ca00a246b7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add other generators properties 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":"src/tools/Avalonia.Generators/GeneratorOptions.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f922c83ffc4469cd5417ac1f171bb318227b6af4698a29e1a988ba8748b28c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate why this case fails. \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":"tests/Avalonia.Base.UnitTests/Animation/BrushTransitionTests.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"59ab8bb0cab1c73ffb37107690177be1ff0b365da071127eadb2fee3c0bf2876"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should this be 5? \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":"tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.DataValidation.cs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e3c2c3aee54693bbf6e046122ac2fb29cf8b8fff0398b6a9145b262c38c1e2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should this be 5? \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":"tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.DataValidation.cs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf54eed7ff663fb0349f59992589e6fe7713d74ca173c3201d605c4a97a75072"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: [InlineData(2, NavigationDirection.Down, 4)] Actual: 3 \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":"tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_XY.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd6f6809c700037647cd7c343eff4f277109ec1451ff44e7a00f22ca2404b65e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: [InlineData(2, NavigationDirection.Up, -1)] Actual 1 \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":"tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_XY.cs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd18f32c31ac0d204305b05e3d32563481264b42d817e54adaf82208af6d8d42"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: [InlineData(3, NavigationDirection.Up, 1)] Actual: 2 \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":"tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_XY.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b0b3723cd5f33ce0178f77e1ef52677f0d922ca3f843e6019e67466f2431385"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: [InlineData(3, NavigationDirection.Right, 4)] Actual: 1 \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":"tests/Avalonia.Base.UnitTests/Input/KeyboardNavigationTests_XY.cs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"2545d8b67f1fe0eda94ac12e66a2e2c1dc20b5d03354547d12021200815eddd9"}},{"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":"tests/Avalonia.Base.UnitTests/PropertyStore/FramePriorityExtensionsTests.cs"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac47fcf148a034ea56d5b0171c760f189ed57d592569eb80869ce5c16a62e6dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This doesn\u0027t need an intermediate render target. \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":"tests/Avalonia.Base.UnitTests/Rendering/Utilities/TileBrushCalculatorTests.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"709a5c1cf8752b8dc30244e5e39238a2d27a1229fde56d09a5f7626faa046bdf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Tests are running against TestRoot, so behavior DOES NOT match the actual TopLevel. \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":"tests/Avalonia.Base.UnitTests/VisualTests.cs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"38692ba6dc002a137be5a5fa916ab522e00350f4b1e5a495a883b2a305d26758"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Tests are running against TestRoot, so behavior DOES NOT match the actual TopLevel. \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":"tests/Avalonia.Base.UnitTests/VisualTests.cs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b32bf1c2e210a93b65ac9c558b33e864ba6f8d31c41fdef5482c7bc31977a4c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove after review together with related benchmark code. \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":"tests/Avalonia.Benchmarks/Utilities/AvaloniaPropertyDictionaryBenchmarks.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"724df9039df596b327819f617761ac9ad36d012ee34d7ca545cb97c2632fcc34"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We should be able to use Cmd\u002BW here but Avalonia apps don\u0027t seem to have this shortcut \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":"tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f34ace07f40d91613e0d0ccadae05a3c82f3688e43277c9bc9e7d520b9934a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: double check why we don\u0027t throw error on other supported types. Should it be warnings? \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":"tests/Avalonia.Markup.Xaml.UnitTests/Xaml/AvaloniaIntrinsicsTests.cs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"543ad363d06975cb71cc49e60afbe4a4c81714610395f2fdb5b8f1b086d3f5a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Direct2D implementation return textposition 6 \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":"tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5a203903be12ebae3e1f670d401a2dc4038391dbb26bac644aa13f5b9e7039f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS0649 \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":"nukebuild/_build.csproj"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"a169039ab3682c35cc1f626c0238f1ecf932f2fced8f11071d7a1628bd97296b"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1847 \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":"nukebuild/_build.csproj"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"59341e9b09e4b84b5fd3bd835410328b737f3b4ca0aaabb2afddb52792e98c03"}},{"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":"tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb0e30361909cd29f9bac0796f02170a3a65ee0d266c133493eb68d2a22c0120"}},{"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":"samples/GpuInterop/GpuInterop.csproj"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"745e3d4ab5adb3343167375f22a3deeac6f3f8699c2c4937b704f7169f003f39"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS1591 \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":"src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"54db83f7ddc0e53ad5e4cbc2a0e11c537f6477f213ce86c301ef76ac2f3f72c2"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS1591 \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":"src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"c23d36fb90941d6fee236d933eef5a8d64c87ca4b8f701fb3309470030f70630"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: NU1605 \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":"src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"6180beda77cad80a7235a03660ab8141405c0d02a7e4dcf1348bf1e996c6ecf5"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS8632 \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":"src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"1da62b7f41f40407a846856fb130552c96514994f8e22893535cf65f7ceb7952"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: AVP1012 \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":"samples/IntegrationTestApp/IntegrationTestApp.csproj"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c2d332009dbe754f808343acaa33adaa7767b0ac720d854d9d94a5f57c3302"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: AVLN3001 \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":"samples/IntegrationTestApp/IntegrationTestApp.csproj"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"145520af66ddf1ef5c7c757507076abe9e6d052a37f29848a1531a5c219cefd3"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1304 \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":"src/tools/Avalonia.UnicodeTrieGenerator/Avalonia.UnicodeTrieGenerator.csproj"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dc3d5e2b71f080dd1588a7435a3cd5419d49c0271e9a90821d423e1047a9d3d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1815 \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":"src/tools/Avalonia.UnicodeTrieGenerator/Avalonia.UnicodeTrieGenerator.csproj"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"0726ffcd09316c13cc7d43a1006e9c02e1f84e1605eed00f38f2a6e0ee563f2d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1854 \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":"src/tools/Avalonia.UnicodeTrieGenerator/Avalonia.UnicodeTrieGenerator.csproj"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"475fb27898755119d39b15f1a09664e2da7080712452aedc2c26eee917c65b0c"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1416 \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":"src/iOS/Avalonia.iOS/Avalonia.iOS.csproj"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"f248c26ee72cdf406f5fc9097e0311024b60d0dc09da98098fa10b58d0e266cc"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1416 \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":"src/Windows/Avalonia.WinUI/Avalonia.WinUI.csproj"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"818d7f0e51cef02160e98e0afc5a37f9412694ebc567d7ca51274ea2206487dc"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CA1416 \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":"src/Windows/Avalonia.Win32/Avalonia.Win32.csproj"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"70c5864dd5b9c10eb7f280473703626af80c9d82ee333980f16f337f6d43e626"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS8002 \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":"src/Android/Avalonia.Android/Avalonia.Android.csproj"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c3dff8a717f9de040dd1dc757cdc86efeb11675f27831f94eb359b920840696"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: CS8002 \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":"samples/Directory.Build.props"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"71fb6eaec82cc122f061911c491f31b72cd33787b094b07e21dddb656ea2d51f"}},{"ruleId":"D18","level":"note","message":{"text":"Thin analysable surface across projects: 8 project(s) carry only a thin slice of real code (e.g. \u0060Avalonia.Themes.Simple(net10.0)\u0060 with 15 significant line(s)). The mean analysable-surface weight is 95 %, lowering Solution Shape by about 0.39 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 379k LoC across 141 projects the codebase is both 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":"D24","level":"note","message":{"text":"redundant comment: \u0022Green\u0022 \u2014 delete - restates the color value \u0027#FF8C00\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d1af2d3a4b4464316a8f8ca2164d20e5478ba951e1bb3e77645d53ae7ec4220"}},{"ruleId":"D26","level":"note","message":{"text":"Split Avalonia.Base: Generic Avalonia base at 135k LoC and 955 types across 52 unrelated namespaces is a sprawling grab-bag. Suggested: by namespace: Avalonia.Graphics, Avalonia.Input, Avalonia.Rendering"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9e14703c679222af9b476cc56a53142916c0cc4727392331eaefb07652edf18c"}},{"ruleId":"D26","level":"note","message":{"text":"Split Avalonia.Controls: Generic Avalonia controls library at 84k LoC and 521 types across 26 namespaces is a large sprawling assembly. Suggested: by namespace: Controls, Layout, Animation"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0e364918754a84ba739b812a3ba5c110b3c9d3b0dbdfa04dfab5eaac8b37491e"}},{"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":"92283223aa8cd1a4ab486e8887d1fe431dc2e8bcd9feb10b25e118f99c218312"},"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":"2b9eec13e6a326b4f32c0073ae632eadd7f60120f4c54a03c2e683af5a0cdd39"},"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":"1d685fcf90c6fb08515cf43259654e3359a4b04fcc46b9651bf4f06a0b700c5b"},"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":"43ebee51181064e5a89211cc5f2f0a7de38bc164ab9a00a445197b0e56b4d3f1"},"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":"fa29d32e6c1902c666c48579c3fe1fb48585b2ea962828491f6c06aab883b860"},"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":"9a8afcab3abc60f9597f99e07a149bcca4c5f3762036f91303f9973d51825963"},"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":"ea8b627b793ae91326d58c3e56032ff67deee95bac9a77914c357c5a30af8eba"},"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":"53bf2cb6d21a19ba5e6a6f9a2c2a24830ffa45dc3641ba3145aa135c82ead119"},"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":"4a89f0722b1d2e6d6e4f72961f8a786bfb88cf6fcec8f90679a5caa752dcd3c2"},"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":"93773f33596b12a4ac02e7f57f3a1466f1679338c45e257e585cf19e34c6bb91"},"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":"48df249a08436e821a5ab819341a216c9d5f6180f6e3b0dc8297765fc985ac8a"},"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":"f4b7e3ea03fe78d6b27c88711cbcf2bda4fd9c4fe006684eb72d4c4e5ab0bec4"},"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":"ad636103d7ea354e0367ded729ed190b9eec1c386c9f0e81ea165a18ae41531b"},"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":"b13411d875fdf666e45f6bdbc3cbdca4f4729fee7e6a083d7f402381aef2718d"},"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":"28be42aa86bf83729c868bc310774c55b45dd4693c71a44fe1820517ac38b602"},"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":"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":"6c93f0f33c62910012f1cc6eb96d181cbe7f6ea0cbd430f64254f09b5613f312"},"taxa":[{"id":"CWE-345","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"src/Avalonia.Base/Collections/Pooled/PooledList.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef5d3b4ae591d39cf91d542a7553f3fd4fc979c5d0a55352ce6d031cabb4bf6f"}},{"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":"src/Avalonia.Base/Media/PreciseEllipticArcHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"942db7c8ff83020c9bed47a603031c115e67ba4494a21b6e1b90ee07b274a224"}},{"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":"src/Avalonia.Base/Collections/Pooled/ThrowHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af327a29afdd2c907087e7f70677ad1513837733225bb22278769d2b2fdf76b"}},{"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":"src/Avalonia.Base/Media/Color.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"312bfbf7aa8985b0b2deb99dedcb97e9986fe2a329ad833128d8c35c136c01a1"}},{"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":"src/Avalonia.Controls.ColorPicker/Helpers/ColorPickerHelpers.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db7db5e16374c336f931c81411d5c33c625701646ca60cab9736289d91e1fdf2"}},{"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":"src/Avalonia.Controls.ColorPicker/ColorPalettes/MaterialColorPalette.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7466ac8529cbb25e6dfb941984150528c1a6606ea43c32c3acaaec8aea652f2d"}},{"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":"src/Avalonia.Controls.ColorPicker/ColorPalettes/FlatColorPalette.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e556c173697fe2edb0cad60483363c6592fed332a6763ffe535b1b2566d9970"}},{"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":"src/Avalonia.Controls/RelativePanel.AttachedProperties.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c246e91350b030180fdf12a87d430cb8f774dd586980bcdd232ad8f48fa9f6da"}},{"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":"src/Avalonia.Base/Media/HsvColor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbb1cefe8c8fe89feba27ed36ad2d716082ef573795bbb609d6effe649857cc0"}},{"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":"src/Avalonia.Base/Media/GeometryBuilder.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f3c5df46b3510f1904fb1d03d4311678ad3c17839a6337ebbc318d7d63250a"}},{"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":"src/Avalonia.Base/Collections/Pooled/PooledStack.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57196cf7b10c6962626fc6f106a4d1214b4f40790ece6c3d5b27a1c3ce012627"}},{"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":"src/Avalonia.Controls/RelativePanel.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"825157fbdde90ebbb9b38d65cdd5ef0770656178776557fd25ad37071129606a"}},{"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":"src/Avalonia.Base/Media/HslColor.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"77678b51c1992e901d34a5edf0eec7262a21777b166a163649d82b9e67c6a895"}},{"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":"src/Avalonia.Controls.ColorPicker/ColorView/ColorView.Properties.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc6acbcc2a02e0bfb4c07e9ff0492d866fa582a5e8e93b4eeb3b55a68d972926"}},{"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":"src/Avalonia.Base/Utilities/Span.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2d969fd76af6f5c976d2dc47a2168d7d78fac77734dc3a03cb2cfcb58a60fcf"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 81 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than listed individually (96 orphaned of 1244 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: FcitxICWrapper.cs \u2194 IBusX11TextInputMethod.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs\u0060 change together 85% of the time (11 of the 13 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":"src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a3576c1f2fa9e0441bd74685e9b2ef1cf3e94151cef44297c77b85b8b407a10"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: FcitxICWrapper.cs \u2194 DBusMenuExporter.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusMenuExporter.cs\u0060 change together 77% of the time (10 of the 13 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":"src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f980503eaa90333dfceef953f28e40cd4eb23c9b5cbb602835a391e07f38a445"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: FcitxICWrapper.cs \u2194 DBusTrayIconImpl.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs\u0060 change together 77% of the time (10 of the 13 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":"src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab789aa09352109e3074303a77bd1e6056f50d55d8e030d6284af75e5900be2d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: FcitxICWrapper.cs \u2194 DBusSystemDialog.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusSystemDialog.cs\u0060 change together 69% of the time (9 of the 13 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":"src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb3cfd675df9027aaed5dac6165ccce090e51fa92553f87a2ec20b8c65afa12d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: MouseDevice.cs \u2194 PenDevice.cs: \u0060src/Avalonia.Base/Input/MouseDevice.cs\u0060 and \u0060src/Avalonia.Base/Input/PenDevice.cs\u0060 change together 68% of the time (15 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":"src/Avalonia.Base/Input/MouseDevice.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f2bc3c92efc36e8a763d4d690ff349746e60e9cbc5009ac6b67fd45453893f2"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: IBusX11TextInputMethod.cs \u2194 DBusSystemDialog.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusSystemDialog.cs\u0060 change together 67% of the time (12 of the 18 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":"src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3144e05923d948e4355ca1be41519290a4b078893bfa4953b38bec2e31d6d4e5"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: IBusX11TextInputMethod.cs \u2194 DBusMenuExporter.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusMenuExporter.cs\u0060 change together 67% of the time (12 of the 18 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":"src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f45f742ee88eee42fc66af44e3273da84f63f0a36a757e859a878c66ac5e8e33"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: BrowserStorageProvider.cs \u2194 storageItem.ts: \u0060src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs\u0060 and \u0060src/Browser/Avalonia.Browser/webapp/modules/storage/storageItem.ts\u0060 change together 64% of the time (7 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well) and are written in DIFFERENT LANGUAGES, so no import can join them and they cannot be co-located into one unit \u2014 they compile and ship as separate artifacts. What binds them is a CONTRACT across that boundary \u2014 an event or message name, a route, a serialised shape \u2014 that each side currently spells out on its own, which is exactly why a change to one drags the other. Declare that contract once where both sides read it (a shared schema, a generated constants file, an interface-definition file) so a change on one side fails the other\u0027s build instead of drifting silently; where the surface is too small to be worth that, name the counterpart in a comment on both sides so the next reader finds it. There is nothing here to merge."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Browser/Avalonia.Browser/Storage/BrowserStorageProvider.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1eb6be9b4d300dc379392f1f1e63b28b885183c2388e2c91f22e22c58e008fb"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: IBusX11TextInputMethod.cs \u2194 DBusTrayIconImpl.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs\u0060 change together 61% of the time (11 of the 18 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":"src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9651127056a098ed3d491425f073e2b958b2eed9960d328d89edafdcf2de25"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: FcitxX11TextInputMethod.cs \u2194 DBusTrayIconImpl.cs: \u0060src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs\u0060 and \u0060src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs\u0060 change together 60% of the time (12 of the 20 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":"src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbbcd9e633124ca530ab0f778c5f4783522ee40f2d7ce6b359c72b13933cbea7"}},{"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":"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":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"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":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}}],"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-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-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-345","guid":"d80d4b65-bbbe-b65d-958e-7ac466af18f9","name":"CWE-345","shortDescription":{"text":"CWE-345"},"helpUri":"https://cwe.mitre.org/data/definitions/345.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-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":21,"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."]}]}