private Maps Validate(MapReceiver receiver, Compilation compilation)
        {
            var maps = ImmutableDictionary.CreateBuilder <(ITypeSymbol, ITypeSymbol), (ImmutableArray <Diagnostic>, SyntaxNode, ImmutableArray <string>)>();

            MappingInformation.ValidateMapTo(receiver.MapToCandidates, maps, compilation);
            MappingInformation.ValidateMapFrom(receiver.MapFromCandidates, maps, compilation);
            MappingInformation.ValidateMap(receiver.MapCandidates, maps, compilation);

            return(maps.ToImmutable());
        }
Exemple #2
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());
        }
        private static ImmutableArray <(ImmutableArray <Diagnostic> diagnostics, string?name, SourceText?text)> GenerateMappings(
            MapReceiver receiver, Compilation compilation, AnalyzerConfigOptionsProvider optionsProvider)
        {
            var results     = ImmutableArray.CreateBuilder <(ImmutableArray <Diagnostic> diagnostics, string?name, SourceText?text)>();
            var information = new MappingInformation(receiver, compilation);

            foreach (var mapPair in information.Maps)
            {
                if (!mapPair.Value.diagnostics.Any(_ => _.Severity == DiagnosticSeverity.Error))
                {
                    var text = new MappingBuilder(mapPair.Key.source, mapPair.Key.destination, mapPair.Value.maps,
                                                  new ConfigurationValues(optionsProvider, mapPair.Value.node.SyntaxTree)).Text;
                    results.Add((mapPair.Value.diagnostics, $"{mapPair.Key.source.Name}_To_{mapPair.Key.destination.Name}_Map.g.cs", text));
                }
                else
                {
                    results.Add((mapPair.Value.diagnostics, null, null));
                }
            }

            return(results.ToImmutable());
        }
Exemple #4
0
 public MappingInformation(MapReceiver receiver, Compilation compilation) =>
 this.Maps = this.Validate(receiver, compilation);