generate other generated types for proejctions
This commit is contained in:
parent
1e0beb41ed
commit
501291c548
|
|
@ -142,7 +142,7 @@ namespace AutoMapProperty
|
|||
foreach (ClassToGenerate classToGenerate in enumsToGenerate)
|
||||
{
|
||||
//throw new Exception(classToGenerate.Name);
|
||||
string result = GenerateExtensionClass(classToGenerate);
|
||||
string result = GenerateExtensionClass(enumsToGenerate, classToGenerate);
|
||||
context.AddSource(classToGenerate.Name + ".g.cs", SourceText.From(result, Encoding.UTF8));
|
||||
}
|
||||
}
|
||||
|
|
@ -521,7 +521,7 @@ namespace AutoMapProperty
|
|||
sb.Append(method.ContainingType.ToDisplayString()).Append(".").Append(method.Name);
|
||||
return sb.ToString();
|
||||
}
|
||||
public static string GeneratePropertyFrom(string Key, ITypeSymbol FromType, ITypeSymbol ToType, bool nullable = true)
|
||||
public static string GeneratePropertyFrom(List<ClassToGenerate> otherClasses, string Key, ITypeSymbol FromType, ITypeSymbol ToType, bool nullable = true, string prefix = "")
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(Key).Append(@" = ");
|
||||
|
|
@ -533,8 +533,8 @@ namespace AutoMapProperty
|
|||
|
||||
if (isArray)
|
||||
{
|
||||
sb.Append("(").Append(ToType).Append(@")(source.").Append(Key).Append(" != null ? ");
|
||||
sb.Append("source.").Append(Key);
|
||||
sb.Append("(").Append(ToType).Append(@")(source").Append(prefix).Append(".").Append(Key).Append(" != null ? ");
|
||||
sb.Append("source").Append(prefix).Append(".").Append(Key);
|
||||
sb.Append(nullable ? "?" : "");
|
||||
if (!SymbolEqualityComparer.Default.Equals(concreteToType, concreteFromType))
|
||||
{
|
||||
|
|
@ -558,7 +558,25 @@ namespace AutoMapProperty
|
|||
}
|
||||
else
|
||||
{
|
||||
sb.Append("(").Append(ToType).Append(@")source.").Append(Key);
|
||||
if (!otherClasses.Select(x => x.Name).Contains(ToType.Name))
|
||||
sb.Append("(").Append(ToType).Append(@")source").Append(prefix).Append(".").Append(Key);
|
||||
else
|
||||
{
|
||||
var classToGenerate = otherClasses.First(x => x.Name == ToType.Name);
|
||||
sb.Append(@"new ").Append(classToGenerate.Name).Append(@"()
|
||||
{");
|
||||
foreach (var prop in classToGenerate.MappableProperties)
|
||||
{
|
||||
var property = GenerateCorrectFromProperty(otherClasses, prop.Key, prop.Value, false, prefix + "." + Key);
|
||||
if (property == null)
|
||||
continue;
|
||||
|
||||
sb.Append(@"
|
||||
").Append(property).Append(@",");
|
||||
}
|
||||
sb.Append(@"
|
||||
}");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
|
|
@ -569,11 +587,11 @@ namespace AutoMapProperty
|
|||
return symbol.ToDisplayString(format: displayFormat);
|
||||
}
|
||||
|
||||
public static string? GenerateCorrectFromProperty(string Key, ClassToGenerate.MappableTypes Value, bool nullable = true)
|
||||
public static string? GenerateCorrectFromProperty(List<ClassToGenerate> otherClasses, string Key, ClassToGenerate.MappableTypes Value, bool nullable = true, string prefix = "")
|
||||
{
|
||||
if (!Value.CustomFrom)
|
||||
{
|
||||
return GeneratePropertyFrom(Key, Value.FromType, Value.ToType, nullable);
|
||||
return GeneratePropertyFrom(otherClasses, Key, Value.FromType, Value.ToType, nullable, prefix);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -581,18 +599,56 @@ namespace AutoMapProperty
|
|||
return null;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append(Key).Append(" = (").Append(GetFullString(Value.ToType)).Append(@")").Append(GetFullMethodName(Value.CustomFromMethod)).Append(@"(providers, source, source.").Append(Key).Append(")");
|
||||
sb.Append(Key).Append(" = (").Append(GetFullString(Value.ToType)).Append(@")").Append(GetFullMethodName(Value.CustomFromMethod)).Append(@"(providers, source, source").Append(prefix).Append(".").Append(Key).Append(")");
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
public static string GeneratePropertyTo(string Key, ITypeSymbol Type)
|
||||
public static string GeneratePropertyTo(List<ClassToGenerate> otherClasses, string Key, ITypeSymbol FromType, ITypeSymbol ToType, bool nullable = true)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(Key).Append(@" = (").Append(GetFullString(Type)).Append(@")this.").Append(Key);
|
||||
sb.Append(Key).Append(@" =");
|
||||
|
||||
|
||||
var concreteToType = GetConcreteType(ToType);
|
||||
var concreteFromType = GetConcreteType(FromType);
|
||||
|
||||
bool isArray = !SymbolEqualityComparer.Default.Equals(FromType, concreteFromType);
|
||||
|
||||
if (isArray)
|
||||
{
|
||||
sb.Append("(").Append(FromType).Append(@")(this.").Append(Key).Append(" != null ? ");
|
||||
sb.Append("this.").Append(Key);
|
||||
sb.Append(nullable ? "?" : "");
|
||||
if (!SymbolEqualityComparer.Default.Equals(concreteToType, concreteFromType))
|
||||
{
|
||||
sb.Append(@".Select(x => (").Append(GetFullString(concreteFromType)).Append(@")x)");
|
||||
sb.Append(nullable ? "?" : "");
|
||||
}
|
||||
|
||||
//Add the appropriate ToHashSet or ToSet or ToCollection or ToList
|
||||
if (FromType.Name.Contains("Set"))
|
||||
sb.Append(@".ToHashSet()");
|
||||
else
|
||||
sb.Append(@".ToList()");
|
||||
|
||||
sb.Append(" : new ");
|
||||
if (FromType.Name.Contains("Set"))
|
||||
sb.Append("HashSet<").Append(GetFullString(concreteFromType)).Append(">()");
|
||||
else
|
||||
sb.Append("List<").Append(GetFullString(concreteFromType)).Append(">()");
|
||||
|
||||
sb.Append(")");
|
||||
}
|
||||
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);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static string? GenerateCorrectToProperty(string Key, ClassToGenerate.MappableTypes Value)
|
||||
public static string? GenerateCorrectToProperty(List<ClassToGenerate> otherClasses, string Key, ClassToGenerate.MappableTypes Value, bool nullable = true)
|
||||
{
|
||||
var retSb = new StringBuilder();
|
||||
retSb.Append("source.");
|
||||
|
|
@ -600,7 +656,7 @@ namespace AutoMapProperty
|
|||
{
|
||||
if (Value.FromIsReadOnly)
|
||||
return null;
|
||||
retSb.Append(GeneratePropertyTo(Key, Value.FromType));
|
||||
retSb.Append(GeneratePropertyTo(otherClasses, Key, Value.FromType, Value.ToType, nullable));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -662,7 +718,7 @@ namespace AutoMapProperty
|
|||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string GenerateExtensionClass(ClassToGenerate classToGenerate)
|
||||
public static string GenerateExtensionClass(List<ClassToGenerate> otherClasses, ClassToGenerate classToGenerate)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
|
|
@ -720,7 +776,7 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
{");
|
||||
foreach (var prop in classToGenerate.MappableProperties)
|
||||
{
|
||||
var property = GenerateCorrectFromProperty(prop.Key, prop.Value);
|
||||
var property = GenerateCorrectFromProperty(otherClasses, prop.Key, prop.Value);
|
||||
if (property == null)
|
||||
continue;
|
||||
|
||||
|
|
@ -736,7 +792,7 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
{");
|
||||
foreach (var prop in classToGenerate.MappableProperties)
|
||||
{
|
||||
var property = GenerateCorrectFromProperty(prop.Key, prop.Value, false);
|
||||
var property = GenerateCorrectFromProperty(otherClasses, prop.Key, prop.Value, false);
|
||||
if (property == null)
|
||||
continue;
|
||||
|
||||
|
|
@ -852,7 +908,7 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
{");
|
||||
foreach (var prop in classToGenerate.MappableProperties)
|
||||
{
|
||||
var property = GenerateCorrectToProperty(prop.Key, prop.Value);
|
||||
var property = GenerateCorrectToProperty(otherClasses, prop.Key, prop.Value);
|
||||
if (property == null)
|
||||
continue;
|
||||
sb.Append(@"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user