Skip to content

Commit dd4b19e

Browse files
committed
fix: Add XAML source generator cancellation support
1 parent bde528b commit dd4b19e

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlCodeGeneration.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ public KeyValuePair<string, string>[] Generate()
256256
var lastBinaryUpdateTime = _forceGeneration ? DateTime.MaxValue : GetLastBinaryUpdateTime();
257257

258258
var resourceKeys = GetResourceKeys();
259-
var filesFull = new XamlFileParser(_excludeXamlNamespaces, _includeXamlNamespaces, _metadataHelper).ParseFiles(_xamlSourceFiles);
259+
var filesFull = new XamlFileParser(_excludeXamlNamespaces, _includeXamlNamespaces, _metadataHelper)
260+
.ParseFiles(_xamlSourceFiles, _generatorContext.CancellationToken);
260261
var files = filesFull
261262
.Trim()
262263
.OrderBy(f => f.UniqueID)
@@ -277,6 +278,11 @@ public KeyValuePair<string, string>[] Generate()
277278

278279
var filesToProcess = filesQuery.AsParallel();
279280

281+
#if NETSTANDARD2_0
282+
filesToProcess = filesToProcess
283+
.WithCancellation(_generatorContext.CancellationToken);
284+
#endif
285+
280286
if (Debugger.IsAttached)
281287
{
282288
filesToProcess = filesToProcess

src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileParser.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,19 @@ public XamlFileParser(string[] excludeXamlNamespaces, string[] includeXamlNamesp
3434
this._metadataHelper = roslynMetadataHelper;
3535
}
3636

37-
public XamlFileDefinition[] ParseFiles(string[] xamlSourceFiles)
37+
public XamlFileDefinition[] ParseFiles(string[] xamlSourceFiles, System.Threading.CancellationToken cancellationToken)
3838
{
3939
var files = new List<XamlFileDefinition>();
4040

4141
return xamlSourceFiles
4242
.AsParallel()
43-
.Select(ParseFile)
43+
.WithCancellation(cancellationToken)
44+
.Select(f => ParseFile(f, cancellationToken))
4445
.Where(f => f != null)
4546
.ToArray()!;
4647
}
4748

48-
private XamlFileDefinition? ParseFile(string file)
49+
private XamlFileDefinition? ParseFile(string file, System.Threading.CancellationToken cancellationToken)
4950
{
5051
try
5152
{
@@ -65,6 +66,8 @@ public XamlFileDefinition[] ParseFiles(string[] xamlSourceFiles)
6566
{
6667
if (reader.Read())
6768
{
69+
cancellationToken.ThrowIfCancellationRequested();
70+
6871
return Visit(reader, file);
6972
}
7073
}

0 commit comments

Comments
 (0)