From 8a49d88153b757b72217457d3999720aaa595120 Mon Sep 17 00:00:00 2001 From: honzapatCZ Date: Sun, 23 Aug 2026 22:13:17 +0200 Subject: [PATCH] Better creation in APplyTo --- AutoMapProperty/AutoMapProperty.cs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/AutoMapProperty/AutoMapProperty.cs b/AutoMapProperty/AutoMapProperty.cs index 4bc22a6..581c704 100644 --- a/AutoMapProperty/AutoMapProperty.cs +++ b/AutoMapProperty/AutoMapProperty.cs @@ -665,7 +665,7 @@ namespace AutoMapProperty return (exprSb.ToString(), projectors); } - public static string? GeneratePropertyTo(List otherClasses, string Key, ITypeSymbol FromType, ITypeSymbol ToType, bool nullable = true) + public static string? GeneratePropertyTo(ClassToGenerate classToGenerate, List otherClasses, string Key, ITypeSymbol FromType, ITypeSymbol ToType, bool nullable = true) { @@ -693,7 +693,7 @@ namespace AutoMapProperty sb.Append(nullable ? "?" : ""); if (!SymbolEqualityComparer.Default.Equals(concreteToType, concreteFromType)) { - sb.Append(@".Select(x => (").Append(GetFullString(concreteFromType)).Append(@")x)"); + sb.Append(@".Select(x => (").Append(GetFullString(concreteFromType)).Append(@")x.ApplyTo(providers, (").Append(GetFullString(concreteFromType)).Append(@")(AutoMapProperty.AutoMapPropertyUtils.Create<").Append(GetFullString(concreteFromType)).Append(",").Append(classToGenerate.SourceContainer.Identifier).Append(">(providers, source, \"").Append(Key).Append("\"))))"); sb.Append(nullable ? "?" : ""); } @@ -717,14 +717,14 @@ namespace AutoMapProperty } else { - // if (otherClasses.Select(x => x.Name).Contains(ToType.Name)) - // sb.Append("this.").Append(Key).Append(".ApplyTo(providers, source.").Append(Key).Append(")"); - // else - sb.Append("(").Append(GetFullString(FromType)).Append(@")this.").Append(Key); + if (otherClasses.Select(x => x.Name).Contains(ToType.Name)) + sb.Append("this.").Append(Key).Append(".ApplyTo(providers, (").Append(GetFullString(FromType)).Append(@")(source.").Append(Key).Append(" != null ? source.").Append(Key).Append(" : AutoMapProperty.AutoMapPropertyUtils.Create<").Append(GetFullString(FromType)).Append(",").Append(classToGenerate.SourceContainer.Identifier).Append(">(providers, source, \"").Append(Key).Append("\")))"); + else + sb.Append("(").Append(GetFullString(FromType)).Append(@")this.").Append(Key); } return sb.ToString(); } - public static string? GenerateCorrectToProperty(List otherClasses, string Key, ClassToGenerate.MappableTypes Value, bool nullable = true) + public static string? GenerateCorrectToProperty(ClassToGenerate classToGenerate, List otherClasses, string Key, ClassToGenerate.MappableTypes Value, bool nullable = true) { var retSb = new StringBuilder(); retSb.Append("source."); @@ -732,7 +732,7 @@ namespace AutoMapProperty { if (Value.FromIsReadOnly) return null; - var generated = GeneratePropertyTo(otherClasses, Key, Value.FromType, Value.ToType, nullable); + var generated = GeneratePropertyTo(classToGenerate, otherClasses, Key, Value.FromType, Value.ToType, nullable); if (generated == null) return null; retSb.Append(generated); @@ -999,7 +999,7 @@ namespace ").Append(classToGenerate.Namespace).Append(@" {/* if (prop.Value.FromType.IsAbstract) continue;*/ - var property = GenerateCorrectToProperty(otherClasses, prop.Key, prop.Value); + var property = GenerateCorrectToProperty(classToGenerate, otherClasses, prop.Key, prop.Value); if (property == null) continue; sb.Append(@" @@ -1022,13 +1022,12 @@ namespace ").Append(classToGenerate.Namespace).Append(@" sb.Append(@" public ").Append(classToGenerate.SourceContainer.Identifier).Append(@" Create(System.IServiceProvider? providers = null) { - var dat = new ").Append(classToGenerate.SourceContainer.Identifier).Append(@"(); + var dat = AutoMapProperty.AutoMapPropertyUtils.Create<").Append(classToGenerate.SourceContainer.Identifier).Append(@">(providers); return ApplyTo(providers, dat); } public static explicit operator ").Append(classToGenerate.SourceContainer.Identifier).Append(@"(").Append(classToGenerate.Name).Append(@" source) { - var dat = new ").Append(classToGenerate.SourceContainer.Identifier).Append(@"(); - return source.ApplyTo(null, dat); + return source.Create(null); }"); } }