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)); }
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)); }
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)); }
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)); }