fix AMP for null with new projectors
This commit is contained in:
parent
0be24c0990
commit
ead01089be
|
|
@ -213,10 +213,10 @@ namespace AutoMapProperty
|
|||
try
|
||||
{
|
||||
var newList = GetModifiedAttributeList(compilation, propSyntax.AttributeLists);
|
||||
|
||||
/*
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
new DiagnosticDescriptor("NEJ23", "Error", "New list on: {1} {0}", "NEJ", DiagnosticSeverity.Warning, true), null, string.Join(", ", newList.Select(x => x.ToString())), propSymbol.Name)
|
||||
);
|
||||
);*/
|
||||
|
||||
//Modify attributes to not include our generation attribute
|
||||
mem = propSyntax.WithAttributeLists(newList);
|
||||
|
|
@ -402,11 +402,11 @@ namespace AutoMapProperty
|
|||
ourType);
|
||||
});
|
||||
//c.MappableProperties = c.MappableProperties.ToDictionary(x => x.Item1, x => x.Item2).Select(x => (x.Key, x.Value)).ToList();
|
||||
context.ReportDiagnostic(
|
||||
/*context.ReportDiagnostic(
|
||||
Diagnostic.Create(
|
||||
new DiagnosticDescriptor(
|
||||
"NEJ01", "Report candidates vs real", "{0} had: {1} possible candidates and:{2} source values, but in the end there were: {3} values",
|
||||
"NEJ", DiagnosticSeverity.Warning, true), null, cls.Name, possibleCandidates.Count, sourceCandidates.Count, cls.MappableProperties.Count));
|
||||
"NEJ", DiagnosticSeverity.Warning, true), null, cls.Name, possibleCandidates.Count, sourceCandidates.Count, cls.MappableProperties.Count));*/
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -562,6 +562,7 @@ namespace AutoMapProperty
|
|||
sb.Append("(").Append(ToType).Append(@")source").Append(prefix).Append(".").Append(Key);
|
||||
else
|
||||
{
|
||||
sb.Append("source").Append(prefix).Append(".").Append(Key).Append(" == null ? null : ");
|
||||
var classToGenerate = otherClasses.First(x => x.Name == ToType.Name);
|
||||
sb.Append(@"new ").Append(classToGenerate.Name).Append(@"()
|
||||
{");
|
||||
|
|
@ -747,7 +748,7 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
[System.CodeDom.Compiler.GeneratedCode(""AutoMapProperty"", ""1.0.0"")]
|
||||
public partial ").Append(classToGenerate.SourceContainer is ClassDeclarationSyntax ? "class " : "interface ").Append(classToGenerate.Name);
|
||||
|
||||
if (classToGenerate.SourceContainer is ClassDeclarationSyntax && !classToGenerate.SourceContainer.Modifiers.Any(x => x.IsKind(SyntaxKind.AbstractKeyword)))
|
||||
if (classToGenerate.SourceContainer is ClassDeclarationSyntax )//&& !classToGenerate.SourceContainer.Modifiers.Any(x => x.IsKind(SyntaxKind.AbstractKeyword)))
|
||||
{
|
||||
sb.Append(": IAutomappedAttribute<").Append(classToGenerate.SourceContainer.Identifier).Append(",").Append(classToGenerate.Name).Append(">");
|
||||
sb.Append(", System.Collections.Generic.IEqualityComparer<").Append(classToGenerate.Name).Append(">");
|
||||
|
|
@ -769,6 +770,12 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
return dat.ApplyFrom(null, source);
|
||||
}");
|
||||
sb.Append(@"
|
||||
object? IAutomappedAttribute.ApplyFrom(System.IServiceProvider? providers, object source)
|
||||
{
|
||||
if(source is ").Append(classToGenerate.SourceContainer.Identifier).Append(@" src)
|
||||
return ApplyFrom(providers, src);
|
||||
return null;
|
||||
}
|
||||
public new ").Append(classToGenerate.Name).Append(@" ApplyFrom(System.IServiceProvider? providers, ").Append(classToGenerate.SourceContainer.Identifier).Append(@" source)
|
||||
{
|
||||
if(source == null)
|
||||
|
|
@ -893,14 +900,16 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
public override int GetHashCode()
|
||||
{
|
||||
return 7;
|
||||
}");
|
||||
|
||||
var abstr = cds.Modifiers.Any(x => x.IsKind(SyntaxKind.AbstractKeyword));
|
||||
if (!abstr)
|
||||
{
|
||||
|
||||
sb.Append(@"
|
||||
}
|
||||
|
||||
object IAutomappedAttribute.ApplyTo(System.IServiceProvider? providers, object source)
|
||||
{
|
||||
if(source == null)
|
||||
return null;
|
||||
if(source is ").Append(classToGenerate.SourceContainer.Identifier).Append(@" src)
|
||||
return ApplyTo(providers, src);
|
||||
return null;
|
||||
}
|
||||
public new ").Append(classToGenerate.SourceContainer.Identifier).Append(@" ApplyTo(System.IServiceProvider? providers, ").Append(classToGenerate.SourceContainer.Identifier).Append(@" source)
|
||||
{
|
||||
if(source == null)
|
||||
|
|
@ -917,9 +926,23 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
sb.Append(@"
|
||||
}
|
||||
return source;
|
||||
}");
|
||||
}
|
||||
Type IAutomappedAttribute.GetSourceType() => typeof(").Append(classToGenerate.SourceContainer.Identifier).Append(@");
|
||||
");
|
||||
sb.Append(@"
|
||||
|
||||
");
|
||||
|
||||
var abstr = cds.Modifiers.Any(x => x.IsKind(SyntaxKind.AbstractKeyword));
|
||||
if (!abstr)
|
||||
{
|
||||
|
||||
sb.Append(@"
|
||||
public ").Append(classToGenerate.SourceContainer.Identifier).Append(@" Create(System.IServiceProvider? providers = null)
|
||||
{
|
||||
var dat = new ").Append(classToGenerate.SourceContainer.Identifier).Append(@"();
|
||||
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(@"();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
|
|
|
|||
|
|
@ -6,12 +6,22 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
|
||||
namespace AutoMapPropertyHelper
|
||||
{
|
||||
public interface IAutomappedAttribute<TSource, TSelf>
|
||||
public interface IAutomappedAttribute
|
||||
{
|
||||
public virtual object ApplyTo(IServiceProvider? providers, object value) => throw new NotImplementedException();
|
||||
public virtual object? ApplyFrom(IServiceProvider? providers, object source) => throw new NotImplementedException();
|
||||
public virtual Type GetSourceType() => throw new NotImplementedException();
|
||||
}
|
||||
public interface IAutomappedAttribute<TSource, TSelf> : IAutomappedAttribute
|
||||
{
|
||||
object IAutomappedAttribute.ApplyTo(IServiceProvider? providers, object value) => throw new NotImplementedException();
|
||||
object? IAutomappedAttribute.ApplyFrom(IServiceProvider? providers, object source) => throw new NotImplementedException();
|
||||
Type IAutomappedAttribute.GetSourceType() => throw new NotImplementedException();
|
||||
|
||||
public TSource ApplyTo(IServiceProvider? providers, TSource value);
|
||||
public TSelf ApplyFrom(IServiceProvider? providers, TSource source);
|
||||
|
||||
public Expression<Func<TSource, TSelf>> GetProjectorFrom(IServiceProvider providers);
|
||||
public Expression<Func<TSource, TSelf>> GetProjectorFrom(IServiceProvider providers) => throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user