AMP fixup initializers -> proper defaults
This commit is contained in:
parent
c8ed747aa3
commit
1d2a08aeed
|
|
@ -243,6 +243,17 @@ namespace AutoMapProperty
|
|||
{
|
||||
INamedTypeSymbol dataTypename = attr?.ConstructorArguments[1].Value as INamedTypeSymbol;
|
||||
mem = mem.WithType(SyntaxFactory.ParseTypeName(dataTypename.ToDisplayString() + " "));
|
||||
|
||||
var oldConcreteType = GetConcreteType(propSymbol.Type);
|
||||
var newConcreteType = GetConcreteType(dataTypename);
|
||||
|
||||
if (mem.Initializer != null && !SymbolEqualityComparer.Default.Equals(oldConcreteType, newConcreteType))
|
||||
{
|
||||
var rewriter = new TypeReplacer(oldConcreteType.Name, newConcreteType.Name);
|
||||
var newInitializer = (EqualsValueClauseSyntax)rewriter.Visit(mem.Initializer);
|
||||
mem = mem.WithInitializer(newInitializer);
|
||||
}
|
||||
|
||||
typeSymbol = dataTypename;
|
||||
}
|
||||
|
||||
|
|
@ -262,7 +273,7 @@ namespace AutoMapProperty
|
|||
})));
|
||||
|
||||
//if property has initializer or expression body, remove them
|
||||
mem = mem.WithInitializer(null);
|
||||
//mem = mem.WithInitializer(null);
|
||||
mem = mem.WithExpressionBody(null);
|
||||
|
||||
//if property is abstract remove the abstract modifier
|
||||
|
|
@ -272,7 +283,14 @@ namespace AutoMapProperty
|
|||
}
|
||||
|
||||
//now the has trailing semicolon, which is wrong
|
||||
if (mem.Initializer == null)
|
||||
{
|
||||
mem = mem.WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None));
|
||||
}
|
||||
else
|
||||
{
|
||||
mem = mem.WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken));
|
||||
}
|
||||
|
||||
//if we dont want to generate converter
|
||||
bool customFrom = false;
|
||||
|
|
@ -1035,6 +1053,27 @@ namespace ").Append(classToGenerate.Namespace).Append(@"
|
|||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private class TypeReplacer : CSharpSyntaxRewriter
|
||||
{
|
||||
private readonly string _oldTypeName;
|
||||
private readonly string _newTypeName;
|
||||
|
||||
public TypeReplacer(string oldTypeName, string newTypeName)
|
||||
{
|
||||
_oldTypeName = oldTypeName;
|
||||
_newTypeName = newTypeName;
|
||||
}
|
||||
|
||||
public override SyntaxNode? VisitIdentifierName(IdentifierNameSyntax node)
|
||||
{
|
||||
if (node.Identifier.ValueText == _oldTypeName)
|
||||
{
|
||||
return SyntaxFactory.IdentifierName(_newTypeName).WithTriviaFrom(node);
|
||||
}
|
||||
return base.VisitIdentifierName(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class Utils
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user