@@ -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