Skip to content

Commit 3819cd1

Browse files
authored
Merge pull request #606 from rafalka/bugfix/605-Mapper-code-is-not-generated-when-source-type-is-a-generic
Added types used in rules to types hashset
2 parents 9feaad3 + d6ec7cc commit 3819cd1

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/Mapster.Tool/Program.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private static void GenerateMappers(MapperOptions opt)
8080
{
8181
Implements = new[] {type},
8282
Namespace = CreateNamespace(opt.Namespace, segments, type.Namespace),
83-
TypeName = attr.Name ?? GetImplName(type.Name),
83+
TypeName = attr.Name ?? GetImplName(GetCodeFriendlyTypeName(type)),
8484
IsInternal = attr.IsInternal,
8585
PrintFullTypeName = opt.PrintFullTypeName,
8686
};
@@ -399,6 +399,10 @@ private static void GenerateExtensions(ExtensionOptions opt)
399399
}
400400
}
401401
var types = assemblies.SelectMany(it => it.GetTypes()).ToHashSet();
402+
403+
// assemblies defines open generic only, so we have to add specialised types used in mappings
404+
foreach (var (key, _) in config.RuleMap) types.Add(key.Source);
405+
402406
var configDict = new Dictionary<BaseAdaptAttribute, TypeAdapterConfig>();
403407
foreach (var builder in codeGenConfig.AdaptAttributeBuilders)
404408
{
@@ -443,7 +447,7 @@ private static void GenerateExtensions(ExtensionOptions opt)
443447
{
444448
IsStatic = true,
445449
Namespace = CreateNamespace(opt.Namespace, segments, type.Namespace),
446-
TypeName = mapperAttr.Name.Replace("[name]", type.Name),
450+
TypeName = mapperAttr.Name.Replace("[name]", GetCodeFriendlyTypeName(type)),
447451
IsInternal = mapperAttr.IsInternal,
448452
PrintFullTypeName = opt.PrintFullTypeName,
449453
};
@@ -498,7 +502,7 @@ private static void GenerateExtensionMethods(MapType mapType, TypeAdapterConfig
498502
{
499503
//add type name to prevent duplication
500504
translator.Translate(entityType);
501-
var destName = GetMethodNameFromType(tuple.Destination);
505+
var destName = GetCodeFriendlyTypeName(tuple.Destination);
502506

503507
var name = tuple.Destination.Name == entityType.Name
504508
? destName
@@ -525,18 +529,18 @@ private static void GenerateExtensionMethods(MapType mapType, TypeAdapterConfig
525529
}
526530
}
527531

528-
private static string GetMethodNameFromType(Type type) => GetMethodNameFromType(new StringBuilder(), type).ToString();
532+
private static string GetCodeFriendlyTypeName(Type type) => GetCodeFriendlyTypeName(new StringBuilder(), type).ToString();
529533

530-
private static StringBuilder GetMethodNameFromType(StringBuilder sb, Type type)
534+
private static StringBuilder GetCodeFriendlyTypeName(StringBuilder sb, Type type)
531535
{
532536
foreach (var subType in type.GenericTypeArguments)
533537
{
534-
GetMethodNameFromType(sb, subType);
538+
GetCodeFriendlyTypeName(sb, subType);
535539
}
536540

537541
if (type.IsArray)
538542
{
539-
GetMethodNameFromType(sb, type.GetElementType()!);
543+
GetCodeFriendlyTypeName(sb, type.GetElementType()!);
540544
sb.Append("Array");
541545
return sb;
542546
}
@@ -546,7 +550,6 @@ private static StringBuilder GetMethodNameFromType(StringBuilder sb, Type type)
546550
if (i>0) name = name.Remove(i);
547551
name = name switch
548552
{
549-
"Nullable" => "",
550553
"SByte" => "Sbyte",
551554
"Int16" => "Short",
552555
"UInt16" => "Ushort",

0 commit comments

Comments
 (0)