private Maps Validate(MapReceiver receiver, Compilation compilation) { var maps = ImmutableDictionary.CreateBuilder <(ITypeSymbol, ITypeSymbol), (ImmutableArray <Diagnostic>, SyntaxNode, ImmutableArray <string>)>(); foreach (var target in receiver.Targets) { MappingInformation.ValidatePairs(target.origination, target.source, target.destination, maps); } return(maps.ToImmutable()); }
private static void ValidateMap(List <AttributeSyntax> mapCandidates, Maps.Builder maps, Compilation compilation) { var mapAttributeSymbol = compilation.GetTypeByMetadataName(typeof(MapAttribute).FullName); foreach (var candidateAttributeNode in mapCandidates) { var attributeSymbol = compilation.GetSemanticModel(candidateAttributeNode.SyntaxTree) .GetSymbolInfo(candidateAttributeNode).Symbol !.ContainingSymbol; if (attributeSymbol.Equals(mapAttributeSymbol, SymbolEqualityComparer.Default)) { var attributeData = compilation.Assembly.GetAttributes().Single( _ => _.ApplicationSyntaxReference !.GetSyntax() == candidateAttributeNode); var sourceType = (INamedTypeSymbol)attributeData.ConstructorArguments[0].Value !; var destinationType = (INamedTypeSymbol)attributeData.ConstructorArguments[1].Value !; MappingInformation.ValidatePairs(candidateAttributeNode, sourceType, destinationType, maps); } } }