Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
                }
            }
        }
Esempio n. 3
0
 public GeneratorResult(Type generator, CSharpSyntaxGeneratorResult result)
 {
     Generator = generator;
     Result    = result;
 }