From aced7d749dc4bea9d4d0e28380ddb85a80cbdd0b Mon Sep 17 00:00:00 2001 From: Mohammadreza Taikandi Date: Thu, 1 Jul 2021 18:08:29 +0100 Subject: [PATCH] Fix source and destination conflicting name issue. --- src/MapTo/MappingContext.cs | 2 +- src/MapTo/Models.cs | 5 ++++- src/MapTo/Sources/MapClassSource.cs | 12 ++++++------ src/MapTo/Sources/MapRecordSource.cs | 12 ++++++------ 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/MapTo/MappingContext.cs b/src/MapTo/MappingContext.cs index f5b193d..259cddc 100644 --- a/src/MapTo/MappingContext.cs +++ b/src/MapTo/MappingContext.cs @@ -271,7 +271,7 @@ namespace MapTo typeIdentifierName, sourceTypeSymbol.ContainingNamespace.ToString(), sourceTypeIdentifierName, - sourceTypeSymbol.ToString(), + sourceTypeSymbol.ToDisplayString(), mappedProperties, isTypeInheritFromMappedBaseClass, Usings, diff --git a/src/MapTo/Models.cs b/src/MapTo/Models.cs index 83fcc19..e925a11 100644 --- a/src/MapTo/Models.cs +++ b/src/MapTo/Models.cs @@ -32,7 +32,10 @@ namespace MapTo bool HasMappedBaseClass, ImmutableArray Usings, bool GenerateSecondaryConstructor - ); + ) + { + public string SourceType => SourceTypeIdentifierName == TypeIdentifierName ? SourceTypeFullName : SourceTypeIdentifierName; + } internal record SourceGenerationOptions( AccessModifier ConstructorAccessModifier, diff --git a/src/MapTo/Sources/MapClassSource.cs b/src/MapTo/Sources/MapClassSource.cs index e3ff4df..803006a 100644 --- a/src/MapTo/Sources/MapClassSource.cs +++ b/src/MapTo/Sources/MapClassSource.cs @@ -62,7 +62,7 @@ namespace MapTo.Sources } return builder - .WriteLine($"{model.Options.ConstructorAccessModifier.ToLowercaseString()} {model.TypeIdentifierName}({model.SourceTypeIdentifierName} {sourceClassParameterName})") + .WriteLine($"{model.Options.ConstructorAccessModifier.ToLowercaseString()} {model.TypeIdentifierName}({model.SourceType} {sourceClassParameterName})") .WriteLine($" : this(new {MappingContextSource.ClassName}(), {sourceClassParameterName}) {{ }}"); } @@ -74,7 +74,7 @@ namespace MapTo.Sources var baseConstructor = model.HasMappedBaseClass ? $" : base({mappingContextParameterName}, {sourceClassParameterName})" : string.Empty; builder - .WriteLine($"private protected {model.TypeIdentifierName}({MappingContextSource.ClassName} {mappingContextParameterName}, {model.SourceTypeIdentifierName} {sourceClassParameterName}){baseConstructor}") + .WriteLine($"private protected {model.TypeIdentifierName}({MappingContextSource.ClassName} {mappingContextParameterName}, {model.SourceType} {sourceClassParameterName}){baseConstructor}") .WriteOpeningBracket() .WriteLine($"if ({mappingContextParameterName} == null) throw new ArgumentNullException(nameof({mappingContextParameterName}));") .WriteLine($"if ({sourceClassParameterName} == null) throw new ArgumentNullException(nameof({sourceClassParameterName}));") @@ -118,9 +118,9 @@ namespace MapTo.Sources return builder .GenerateConvertorMethodsXmlDocs(model, sourceClassParameterName) .WriteLineIf(model.Options.SupportNullableStaticAnalysis, $"[return: NotNullIfNotNull(\"{sourceClassParameterName}\")]") - .WriteLine($"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} From({model.SourceTypeIdentifierName}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") + .WriteLine($"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} From({model.SourceType}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") .WriteOpeningBracket() - .WriteLine($"return {sourceClassParameterName} == null ? null : {MappingContextSource.ClassName}.{MappingContextSource.FactoryMethodName}<{model.SourceTypeIdentifierName}, {model.TypeIdentifierName}>({sourceClassParameterName});") + .WriteLine($"return {sourceClassParameterName} == null ? null : {MappingContextSource.ClassName}.{MappingContextSource.FactoryMethodName}<{model.SourceType}, {model.TypeIdentifierName}>({sourceClassParameterName});") .WriteClosingBracket(); } @@ -136,7 +136,7 @@ namespace MapTo.Sources .WriteLine($"/// Creates a new instance of and sets its participating properties") .WriteLine($"/// using the property values from .") .WriteLine("/// ") - .WriteLine($"/// The instance of to use as source.") + .WriteLine($"/// The instance of to use as source.") .WriteLine($"/// A new instance of -or- null if is null."); } @@ -156,7 +156,7 @@ namespace MapTo.Sources return builder .GenerateConvertorMethodsXmlDocs(model, sourceClassParameterName) .WriteLineIf(model.Options.SupportNullableStaticAnalysis, $"[return: NotNullIfNotNull(\"{sourceClassParameterName}\")]") - .WriteLine($"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} To{model.TypeIdentifierName}(this {model.SourceTypeIdentifierName}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") + .WriteLine($"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} To{model.TypeIdentifierName}(this {model.SourceType}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") .WriteOpeningBracket() .WriteLine($"return {sourceClassParameterName} == null ? null : new {model.TypeIdentifierName}({sourceClassParameterName});") .WriteClosingBracket(); diff --git a/src/MapTo/Sources/MapRecordSource.cs b/src/MapTo/Sources/MapRecordSource.cs index 6bfe929..9614ab1 100644 --- a/src/MapTo/Sources/MapRecordSource.cs +++ b/src/MapTo/Sources/MapRecordSource.cs @@ -63,7 +63,7 @@ namespace MapTo.Sources } return builder - .WriteLine($"{model.Options.ConstructorAccessModifier.ToLowercaseString()} {model.TypeIdentifierName}({model.SourceTypeIdentifierName} {sourceClassParameterName})") + .WriteLine($"{model.Options.ConstructorAccessModifier.ToLowercaseString()} {model.TypeIdentifierName}({model.SourceType} {sourceClassParameterName})") .WriteLine($" : this(new {MappingContextSource.ClassName}(), {sourceClassParameterName}) {{ }}"); } @@ -73,7 +73,7 @@ namespace MapTo.Sources const string mappingContextParameterName = "context"; builder - .WriteLine($"private protected {model.TypeIdentifierName}({MappingContextSource.ClassName} {mappingContextParameterName}, {model.SourceTypeIdentifierName} {sourceClassParameterName})") + .WriteLine($"private protected {model.TypeIdentifierName}({MappingContextSource.ClassName} {mappingContextParameterName}, {model.SourceType} {sourceClassParameterName})") .Indent() .Write(": this("); @@ -129,10 +129,10 @@ namespace MapTo.Sources .GenerateConvertorMethodsXmlDocs(model, sourceClassParameterName) .WriteLineIf(model.Options.SupportNullableStaticAnalysis, $"[return: NotNullIfNotNull(\"{sourceClassParameterName}\")]") .WriteLine( - $"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} From({model.SourceTypeIdentifierName}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") + $"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} From({model.SourceType}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") .WriteOpeningBracket() .WriteLine( - $"return {sourceClassParameterName} == null ? null : {MappingContextSource.ClassName}.{MappingContextSource.FactoryMethodName}<{model.SourceTypeIdentifierName}, {model.TypeIdentifierName}>({sourceClassParameterName});") + $"return {sourceClassParameterName} == null ? null : {MappingContextSource.ClassName}.{MappingContextSource.FactoryMethodName}<{model.SourceType}, {model.TypeIdentifierName}>({sourceClassParameterName});") .WriteClosingBracket(); } @@ -148,7 +148,7 @@ namespace MapTo.Sources .WriteLine($"/// Creates a new instance of and sets its participating properties") .WriteLine($"/// using the property values from .") .WriteLine("/// ") - .WriteLine($"/// The instance of to use as source.") + .WriteLine($"/// The instance of to use as source.") .WriteLine( $"/// A new instance of -or- null if is null."); } @@ -171,7 +171,7 @@ namespace MapTo.Sources .GenerateConvertorMethodsXmlDocs(model, sourceClassParameterName) .WriteLineIf(model.Options.SupportNullableStaticAnalysis, $"[return: NotNullIfNotNull(\"{sourceClassParameterName}\")]") .WriteLine( - $"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} To{model.TypeIdentifierName}(this {model.SourceTypeIdentifierName}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") + $"{model.Options.GeneratedMethodsAccessModifier.ToLowercaseString()} static {model.TypeIdentifierName}{model.Options.NullableReferenceSyntax} To{model.TypeIdentifierName}(this {model.SourceType}{model.Options.NullableReferenceSyntax} {sourceClassParameterName})") .WriteOpeningBracket() .WriteLine($"return {sourceClassParameterName} == null ? null : new {model.TypeIdentifierName}({sourceClassParameterName});") .WriteClosingBracket();