From a387fcd494d5b3d2b63345ff405b95a642f2dcdb Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Thu, 19 Feb 2026 00:18:46 +0000 Subject: [PATCH] fix: propagate CancellationToken to inner DescendantNodes loop in AotConverterGenerator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ScanTestParameters method accepted a CancellationToken but only checked it at the start of the outer syntax tree loop. The inner loop over DescendantNodes — which can iterate over a very large number of nodes per syntax tree — did not check for cancellation, causing the generator to remain unresponsive to cancellation requests during long-running node traversals. Closes #4900 --- TUnit.Core.SourceGenerator/Generators/AotConverterGenerator.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TUnit.Core.SourceGenerator/Generators/AotConverterGenerator.cs b/TUnit.Core.SourceGenerator/Generators/AotConverterGenerator.cs index 20971ca516..bd92667216 100644 --- a/TUnit.Core.SourceGenerator/Generators/AotConverterGenerator.cs +++ b/TUnit.Core.SourceGenerator/Generators/AotConverterGenerator.cs @@ -111,6 +111,8 @@ private void ScanTestParameters(Compilation compilation, List co foreach(var nodes in root.DescendantNodes()) { + cancellationToken.ThrowIfCancellationRequested(); + if(nodes is MethodDeclarationSyntax method) { var methodSymbol = semanticModel.GetDeclaredSymbol(method);