コード例 #1
0
        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());
        }
コード例 #2
0
        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);
                }
            }
        }