private static IReadOnlyList <GeneratorResult> GenerateCSharpDocuments( MapperContext context, CSharpGeneratorSettings settings) { var generatorSettings = new CSharpSyntaxGeneratorSettings( settings.NoStore, settings.InputRecords, settings.EntityRecords, settings.RazorComponents); var results = new List <GeneratorResult>(); foreach (var descriptor in context.GetAllDescriptors()) { foreach (var generator in _generators) { if (generator.CanHandle(descriptor, generatorSettings)) { CSharpSyntaxGeneratorResult result = generator.Generate(descriptor, generatorSettings); results.Add(new(generator.GetType(), result)); } } } return(results); }
private static void GenerateMultipleCSharpDocuments( MapperContext context, CSharpGeneratorSettings settings, ICollection <SourceDocument> documents) { var generatorSettings = new CSharpSyntaxGeneratorSettings( settings.NoStore, settings.InputRecords, settings.EntityRecords); var results = new List <(Type Generator, CSharpSyntaxGeneratorResult Result)>(); foreach (var descriptor in context.GetAllDescriptors()) { foreach (var generator in _generators) { if (generator.CanHandle(descriptor, generatorSettings)) { CSharpSyntaxGeneratorResult result = generator.Generate(descriptor, generatorSettings); results.Add((generator.GetType(), result)); } } } foreach (var group in results.GroupBy(t => t.Result.Namespace).OrderBy(t => t.Key)) { foreach ((Type generator, CSharpSyntaxGeneratorResult result) in group) { BaseTypeDeclarationSyntax typeDeclaration = result.TypeDeclaration; #if DEBUG SyntaxTriviaList trivia = typeDeclaration .GetLeadingTrivia() .Insert(0, Comment("// " + generator.FullName)); typeDeclaration = typeDeclaration.WithLeadingTrivia(trivia); #endif CompilationUnitSyntax compilationUnit = CompilationUnit().AddMembers( NamespaceDeclaration(IdentifierName(group.Key)).AddMembers( typeDeclaration)); compilationUnit = compilationUnit.NormalizeWhitespace(elasticTrivia: true); var code = new StringBuilder(); // marker for style cop to ignore this code code.AppendLine("// <auto-generated/>"); // enable nullability settings code.AppendLine("#nullable enable"); code.AppendLine(); code.AppendLine(compilationUnit.ToFullString()); documents.Add(new( result.FileName, code.ToString(), SourceDocumentKind.CSharp, path: result.Path)); } } }
public GeneratorResult(Type generator, CSharpSyntaxGeneratorResult result) { Generator = generator; Result = result; }