Exemple #1
0
        private void GenerateCode(GeneratorExecutionContext context, TypeDeclarationSyntax tds, Type attributeType)
        {
            // Field symbol
            var symbol = context.ParseSyntaxNode <INamedTypeSymbol>(tds);

            if (symbol == null || context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            // Attribute data
            var attributeData = symbol.GetAttributeData(attributeType.FullName);

            // Ignore null
            var ignoreNull = attributeData?.GetValue <bool>(nameof(AutoToParametersAttribute.IgnoreNull));

            // Snake case
            var snakeCase = attributeData?.GetValue <bool>(nameof(AutoToParametersAttribute.SnakeCase));

            // Name space and class name
            var(ns, className) = (symbol.ContainingNamespace.ToDisplayString(), symbol.Name);

            // Keyword
            var keyword = tds.Keyword.ToString();

            // Is Public
            var isPublic = tds.HasToken(SyntaxKind.PublicKeyword);

            // Inheritance
            var externals = new List <string>();

            // Body
            var body = GenerateBody(context, tds, ignoreNull.GetValueOrDefault(), snakeCase.GetValueOrDefault(), externals);

            if (context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            externals.Add("com.etsoo.CoreFramework.Models.IModelParameters");

            // Source code
            var source = $@"#nullable enable
                using Dapper;
                using com.etsoo.Utils.Database;
                using com.etsoo.Utils.String;
                using com.etsoo.CoreFramework.Application;
                using System;
                using System.Data;

                namespace {ns}
                {{
                    {(isPublic ? "public" : "internal")} partial {keyword} {className} : {string.Join(", ", externals)}
                    {{
                        /// <summary>
                        /// Data modal to Dapper parameters
                        /// 数据模型转化为Dapper参数
                        /// </summary>
                        /// <param name=""app"">Application</param>
                        /// <returns>Dynamic parameters</returns>
                        public DynamicParameters AsParameters(ICoreApplicationBase app)
                        {{
                            var parameters = new DynamicParameters();

                            {string.Join(";\n", body)};

                            return parameters;
                        }}
                    }}
                }}
            ";

            context.AddSource($"{ns}.{className}.AutoToParameters.Generated.cs", SourceText.From(source, Encoding.UTF8));
        }
Exemple #2
0
        private void GenerateCode(GeneratorExecutionContext context, TypeDeclarationSyntax tds, Type _)
        {
            // Field symbol
            var symbol = context.ParseSyntaxNode <INamedTypeSymbol>(tds);

            if (symbol == null || context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            // Name space and class name
            var(ns, className) = (symbol.ContainingNamespace.ToDisplayString(), symbol.Name);

            // Keyword
            var keyword = tds.Keyword.ToString();

            // Is Public
            var isPublic = tds.HasToken(SyntaxKind.PublicKeyword);

            // Inheritance
            var externals = new List <string>();

            // Body
            var body = GenerateBody(context, tds, externals);

            if (context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            externals.Add("com.etsoo.Utils.Serialization.IJsonSerialization");

            // Source code
            var source = $@"
                using com.etsoo.Utils.Serialization;
                using System;
                using System.Text.Json;
                using System.Threading.Tasks;

                namespace {ns}
                {{
                    {(isPublic ? "public" : "internal")} partial {keyword} {className} : {string.Join(", ", externals)}
                    {{
                        /// <summary>
                        /// To Json
                        /// 转化为 Json
                        /// </summary>
                        /// <param name=""writer"">Writer</param>
                        /// <param name=""options"">Options</param>
                        /// <returns>Task</returns>
                        public async Task ToJsonAsync(System.Buffers.IBufferWriter<byte> writer, JsonSerializerOptions options)
                        {{
                            // Utf8JsonWriter
                            using var w = options.CreateJsonWriter(writer);

                            // Object start
                            w.WriteStartObject();

                            {body}

                            // Object end
                            w.WriteEndObject();

                            // Flush & dispose
                            await w.DisposeAsync();
                        }}
                    }}
                }}
            ";

            context.AddSource($"{ns}.{className}.AutoToJson.Generated.cs", SourceText.From(source, Encoding.UTF8));
        }
Exemple #3
0
        private void GenerateCode(GeneratorExecutionContext context, TypeDeclarationSyntax tds, Type attributeType)
        {
            // Field symbol
            var symbol = context.ParseSyntaxNode <INamedTypeSymbol>(tds);

            if (symbol == null || context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            // Attribute data
            var attributeData = symbol.GetAttributeData(attributeType.FullName);

            // Auto Utc datetime
            var utcDateTime = attributeData?.GetValue <bool>(nameof(AutoDataReaderGeneratorAttribute.UtcDateTime));

            // Name space and class name
            var(ns, className) = (symbol.ContainingNamespace.ToDisplayString(), symbol.Name);

            // Keyword
            var keyword = tds.Keyword.ToString();

            // Is Public
            var isPublic = tds.HasToken(SyntaxKind.PublicKeyword);

            // Name
            var name = tds.Identifier.ToString();

            // Inheritance
            var externals = new List <string>();

            // Body
            var body = GenerateBody(context, tds, utcDateTime.GetValueOrDefault(), externals, ns);

            if (context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            externals.Add($"com.etsoo.Utils.Serialization.IDataReaderParser<{name}>");

            // Source code
            var source = $@"#nullable enable
                using System;
                using System.Collections.Generic;
                using System.Data.Common;
                using System.Linq;
                using System.Threading.Tasks;
                using com.etsoo.Utils.Database;
                using com.etsoo.Utils.String;
                using com.etsoo.Utils.Localization;

                namespace {ns}
                {{
                    {(isPublic ? "public" : "internal")} partial {keyword} {className} : {string.Join(", ", externals)}
                    {{
                        public static async IAsyncEnumerable<{name}> CreateAsync(DbDataReader reader)
                        {{
                            // Column names
                            var names = reader.GetColumnNames().ToList();

                            while(await reader.ReadAsync())
                            {{
                                yield return new {name} {body};
                            }}
                        }}
                    }}
                }}
            ";

            context.AddSource($"{ns}.{className}.DataReader.Generated.cs", SourceText.From(source, Encoding.UTF8));
        }
Exemple #4
0
        private void GenerateCode(GeneratorExecutionContext context, TypeDeclarationSyntax tds, Type attributeType)
        {
            // Field symbol
            var symbol = context.ParseSyntaxNode <INamedTypeSymbol>(tds);

            if (symbol == null || context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            // Attribute data
            var attributeData = symbol.GetAttributeData(attributeType.FullName);

            // Snake case
            var snakeCase = attributeData?.GetValue <bool>(nameof(AutoToParametersAttribute.SnakeCase));

            // Name space and class name
            var(ns, className) = (symbol.ContainingNamespace.ToDisplayString(), symbol.Name);

            // Keyword
            var keyword = tds.Keyword.ToString();

            // Is Public
            var isPublic = tds.HasToken(SyntaxKind.PublicKeyword);

            // Name
            var name = tds.Identifier.ToString();

            // Inheritance
            var externals = new List <string>();

            // Body
            var body = GenerateBody(context, tds, snakeCase.GetValueOrDefault(), externals, ns);

            if (context.CancellationToken.IsCancellationRequested)
            {
                return;
            }

            externals.Add($"com.etsoo.Utils.Serialization.IDictionaryParser<{name}>");

            // Source code
            var source = $@"#nullable enable
                using com.etsoo.Utils.String;
                using System;
                using System.Collections.Generic;
                using System.Linq;

                namespace {ns}
                {{
                    {(isPublic ? "public" : "internal")} partial {keyword} {className} : {string.Join(", ", externals)}
                    {{
                        public static {name} Create(StringKeyDictionaryObject dic)
                        {{
                            return new {name} {body};
                        }}
                    }}
                }}
            ";

            context.AddSource($"{ns}.{className}.Dictionary.Generated.cs", SourceText.From(source, Encoding.UTF8));
        }