@@ -252,15 +252,20 @@ private static void GenerateExtensions(ExtensionOptions opt)
252252 var attrs = type . SafeGetCustomAttributes ( ) ;
253253 var mapperAttr = attrs . OfType < GenerateMapperAttribute > ( )
254254 . FirstOrDefault ( ) ;
255- if ( mapperAttr == null )
255+ var ruleMaps = config . RuleMap
256+ . Where ( it => it . Key . Source == type &&
257+ it . Value . Settings . GenerateMapper is MapType )
258+ . ToList ( ) ;
259+ if ( mapperAttr == null && ruleMaps . Count == 0 )
256260 continue ;
257261
262+ mapperAttr ??= new GenerateMapperAttribute ( ) ;
258263 var set = mapperAttr . ForAttributes ? . ToHashSet ( ) ;
259264 var adaptAttrs = attrs
260265 . OfType < BaseAdaptAttribute > ( )
261266 . Where ( it => set ? . Contains ( it . GetType ( ) ) != false )
262267 . ToList ( ) ;
263- if ( adaptAttrs . Count == 0 )
268+ if ( adaptAttrs . Count == 0 && ruleMaps . Count == 0 )
264269 continue ;
265270
266271 Console . WriteLine ( $ "Processing: { type . FullName } ") ;
@@ -289,7 +294,8 @@ private static void GenerateExtensions(ExtensionOptions opt)
289294 continue ;
290295
291296 var tuple = new TypeTuple ( fromType , type ) ;
292- GenerateExtensionMethods ( attr . MapType , config , tuple , translator , type , mapperAttr . IsHelperClass ) ;
297+ var mapType = attr . MapType == 0 ? MapType . Map | MapType . MapToTarget : attr . MapType ;
298+ GenerateExtensionMethods ( mapType , config , tuple , translator , type , mapperAttr . IsHelperClass ) ;
293299 }
294300
295301 if ( attr is AdaptToAttribute )
@@ -308,10 +314,17 @@ private static void GenerateExtensions(ExtensionOptions opt)
308314 continue ;
309315
310316 var tuple = new TypeTuple ( type , toType ) ;
311- GenerateExtensionMethods ( attr . MapType , config , tuple , translator , type , mapperAttr . IsHelperClass ) ;
317+ var mapType = attr . MapType == 0 ? MapType . Map | MapType . MapToTarget | MapType . Projection : attr . MapType ;
318+ GenerateExtensionMethods ( mapType , config , tuple , translator , type , mapperAttr . IsHelperClass ) ;
312319 }
313320 }
314321
322+ foreach ( var ( tuple , rule ) in ruleMaps )
323+ {
324+ var mapType = ( MapType ) rule . Settings . GenerateMapper ! ;
325+ GenerateExtensionMethods ( mapType , config , tuple , translator , type , mapperAttr . IsHelperClass ) ;
326+ }
327+
315328 var code = translator . ToString ( ) ;
316329 var path = Path . Combine ( Path . GetFullPath ( opt . Output ) , definitions . TypeName + ".g.cs" ) ;
317330 WriteFile ( code , path ) ;
@@ -321,9 +334,13 @@ private static void GenerateExtensions(ExtensionOptions opt)
321334 private static void GenerateExtensionMethods ( MapType mapType , TypeAdapterConfig config , TypeTuple tuple ,
322335 ExpressionTranslator translator , Type entityType , bool isHelperClass )
323336 {
324- var name = tuple . Destination == entityType
325- ? "Entity"
326- : tuple . Destination . Name . Replace ( entityType . Name , "" ) ;
337+ //add type name to prevent duplication
338+ translator . Translate ( entityType ) ;
339+ var destName = translator . Translate ( tuple . Destination ) ;
340+
341+ var name = tuple . Destination . Name == entityType . Name
342+ ? destName
343+ : destName . Replace ( entityType . Name , "" ) ;
327344 if ( ( mapType & MapType . Map ) > 0 )
328345 {
329346 var expr = config . CreateMapExpression ( tuple , MapType . Map ) ;
0 commit comments