Browse Source

Use cancellation token in name generator

pull/12043/head
jankrib 3 years ago
parent
commit
48162b0ebc
  1. 8
      src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameGenerator.cs
  2. 12
      src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs
  3. 3
      src/tools/Avalonia.Generators/NameGenerator/INameGenerator.cs

8
src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameGenerator.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Avalonia.Generators.Common.Domain;
using Microsoft.CodeAnalysis;
@ -31,7 +32,7 @@ internal class AvaloniaNameGenerator : INameGenerator
_code = code;
}
public IReadOnlyList<GeneratedPartialClass> GenerateNameReferences(IEnumerable<AdditionalText> additionalFiles)
public IEnumerable<GeneratedPartialClass> GenerateNameReferences(IEnumerable<AdditionalText> additionalFiles, CancellationToken cancellationToken)
{
var resolveViews =
from file in additionalFiles
@ -39,7 +40,8 @@ internal class AvaloniaNameGenerator : INameGenerator
file.Path.EndsWith(".paml") ||
file.Path.EndsWith(".axaml")) &&
_pathPattern.Matches(file.Path)
let xaml = file.GetText()!.ToString()
let xaml = file.GetText(cancellationToken)?.ToString()
where xaml != null
let view = _classes.ResolveView(xaml)
where view != null && _namespacePattern.Matches(view.Namespace)
select view;
@ -51,7 +53,7 @@ internal class AvaloniaNameGenerator : INameGenerator
let fileName = ResolveViewFileName(view, _naming)
select new GeneratedPartialClass(fileName, code);
return query.ToList();
return query;
}
private static string ResolveViewFileName(ResolvedView view, ViewFileNamingStrategy strategy) => strategy switch

12
src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs

@ -22,8 +22,16 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator
return;
}
var partials = generator.GenerateNameReferences(context.AdditionalFiles);
foreach (var (fileName, content) in partials) context.AddSource(fileName, content);
var partials = generator.GenerateNameReferences(context.AdditionalFiles, context.CancellationToken);
foreach (var (fileName, content) in partials)
{
if(context.CancellationToken.IsCancellationRequested)
{
break;
}
context.AddSource(fileName, content);
}
}
catch (Exception exception)
{

3
src/tools/Avalonia.Generators/NameGenerator/INameGenerator.cs

@ -1,11 +1,12 @@
using System.Collections.Generic;
using System.Threading;
using Microsoft.CodeAnalysis;
namespace Avalonia.Generators.NameGenerator;
internal interface INameGenerator
{
IReadOnlyList<GeneratedPartialClass> GenerateNameReferences(IEnumerable<AdditionalText> additionalFiles);
IEnumerable<GeneratedPartialClass> GenerateNameReferences(IEnumerable<AdditionalText> additionalFiles, CancellationToken cancellationToken);
}
internal record GeneratedPartialClass(string FileName, string Content);

Loading…
Cancel
Save