@@ -218,15 +218,13 @@ private MembersMappingConfiguration BuildMembersConfig(MappingConfigurationRefer
218218 return MapperConfiguration . Members ;
219219
220220 var ignoreSourceMemberAttributes = _dataAccessor
221- . Access < MapperIgnoreSourceAttribute > ( configRef . Method )
222- . WhereNotNullBy ( static attr => attr . Source )
221+ . Access < MapperIgnoreSourceAttribute , MapperIgnoreMemberConfiguration > ( configRef . Method )
223222 . ToList ( ) ;
224- var ignoredSourceMembers = ignoreSourceMemberAttributes . Select ( x => x . Source ) . ToList ( ) ;
223+ var ignoredSourceMembers = ignoreSourceMemberAttributes . Select ( x => x . Value ) . WhereNotNull ( ) . ToList ( ) ;
225224 var ignoreTargetMemberAttributes = _dataAccessor
226- . Access < MapperIgnoreTargetAttribute > ( configRef . Method )
227- . WhereNotNullBy ( static attr => attr . Target )
225+ . Access < MapperIgnoreTargetAttribute , MapperIgnoreMemberConfiguration > ( configRef . Method )
228226 . ToList ( ) ;
229- var ignoredTargetMembers = ignoreTargetMemberAttributes . Select ( x => x . Target ) . ToList ( ) ;
227+ var ignoredTargetMembers = ignoreTargetMemberAttributes . Select ( x => x . Value ) . WhereNotNull ( ) . ToList ( ) ;
230228 var memberValueConfigurations = _dataAccessor . Access < MapValueAttribute , MemberValueMappingConfiguration > ( configRef . Method ) . ToList ( ) ;
231229 var memberConfigurations = _dataAccessor
232230 . Access < MapPropertyAttribute , MemberMappingConfiguration > ( configRef . Method )
@@ -259,14 +257,8 @@ private MembersMappingConfiguration BuildMembersConfig(MappingConfigurationRefer
259257 return MapperConfiguration . Members ;
260258 }
261259
262- foreach ( var missingIgnoreSourceJustificationAttribute in ignoreSourceMemberAttributes . Where ( attr => attr . Justification is null ) )
263- {
264- _diagnostics . ReportDiagnostic (
265- DiagnosticDescriptors . MapperIgnoreAttributeMissingJustification ,
266- configRef . Method ,
267- missingIgnoreSourceJustificationAttribute . Source
268- ) ;
269- }
260+ ReportMissingJustificationDiagnostics ( ignoreSourceMemberAttributes , static x => x . Value ) ;
261+ ReportMissingJustificationDiagnostics ( ignoreTargetMemberAttributes , static x => x . Value ) ;
270262
271263 foreach ( var invalidMemberConfig in memberValueConfigurations . Where ( x => ! x . IsValid ) )
272264 {
@@ -296,16 +288,19 @@ private EnumMappingConfiguration BuildEnumConfig(MappingConfigurationReference c
296288
297289 var configData = _dataAccessor . AccessFirstOrDefault < MapEnumAttribute , EnumConfiguration > ( configRef . Method ) ;
298290 var explicitMappings = _dataAccessor . Access < MapEnumValueAttribute , EnumValueMappingConfiguration > ( configRef . Method ) . ToList ( ) ;
299- var ignoredSources = _dataAccessor
291+ var ignoredSourceValueConfigurations = _dataAccessor
300292 . Access < MapperIgnoreSourceValueAttribute , MapperIgnoreEnumValueConfiguration > ( configRef . Method )
301- . Select ( x => x . Value )
302293 . ToList ( ) ;
303- var ignoredTargets = _dataAccessor
294+ var ignoredSources = ignoredSourceValueConfigurations . Select ( x => x . Value ) . ToList ( ) ;
295+ var ignoredTargetValueConfigurations = _dataAccessor
304296 . Access < MapperIgnoreTargetValueAttribute , MapperIgnoreEnumValueConfiguration > ( configRef . Method )
305- . Select ( x => x . Value )
306297 . ToList ( ) ;
298+ var ignoredTargets = ignoredTargetValueConfigurations . Select ( x => x . Value ) . ToList ( ) ;
307299 var requiredMapping = _dataAccessor . AccessFirstOrDefault < MapperRequiredMappingAttribute > ( configRef . Method ) ? . RequiredMappingStrategy ;
308300
301+ ReportMissingJustificationDiagnostics ( ignoredSourceValueConfigurations , static x => x . Value . Name ) ;
302+ ReportMissingJustificationDiagnostics ( ignoredTargetValueConfigurations , static x => x . Value . Name ) ;
303+
309304 // ignore the required mapping as the same attribute is used for other mapping types
310305 // e.g. object to object
311306 var hasEnumConfigs = configData != null || explicitMappings . Count > 0 || ignoredSources . Count > 0 || ignoredTargets . Count > 0 ;
@@ -326,4 +321,23 @@ private EnumMappingConfiguration BuildEnumConfig(MappingConfigurationReference c
326321 configData ? . NamingStrategy ?? MapperConfiguration . Enum . NamingStrategy
327322 ) ;
328323 }
324+
325+ private void ReportMissingJustificationDiagnostics < TConfiguration > (
326+ IEnumerable < TConfiguration > ignoreConfigurations ,
327+ Func < TConfiguration , string ? > ignoredNameAccessor
328+ )
329+ where TConfiguration : MapperIgnoreConfigurationBase
330+ {
331+ foreach ( var ignoreConfiguration in ignoreConfigurations )
332+ {
333+ if ( ! string . IsNullOrWhiteSpace ( ignoreConfiguration . Justification ) )
334+ continue ;
335+
336+ var ignoredName = ignoredNameAccessor ( ignoreConfiguration ) ;
337+ if ( ignoredName == null )
338+ continue ;
339+
340+ _diagnostics . ReportDiagnostic ( DiagnosticDescriptors . IgnoreMissingJustification , ignoreConfiguration . Location , ignoredName ) ;
341+ }
342+ }
329343}
0 commit comments