private async Task <Document> GenerateMappingMethodBody(Document document, BaseMethodDeclarationSyntax methodSyntax, bool useMembersMappers, CancellationToken cancellationToken)
        {
            var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            var methodSymbol        = semanticModel.GetDeclaredSymbol(methodSyntax, cancellationToken);
            var generator           = SyntaxGenerator.GetGenerator(document);
            var mappingContext      = new MappingContext(methodSyntax, semanticModel);
            var accessibilityHelper = new AccessibilityHelper(methodSymbol.ContainingType);


            if (useMembersMappers)
            {
                foreach (var userDefinedConversion in CustomConversionHelper.FindCustomConversionMethods(methodSymbol))
                {
                    if (userDefinedConversion == methodSymbol || accessibilityHelper.IsSymbolAccessible(userDefinedConversion, methodSymbol.ContainingType) == false)
                    {
                        continue;
                    }

                    mappingContext.CustomConversions.Add(new CustomConversion()
                    {
                        FromType   = new AnnotatedType(userDefinedConversion.Parameters.First().Type),
                        ToType     = new AnnotatedType(userDefinedConversion.ReturnType),
                        Conversion = SyntaxFactory.IdentifierName(userDefinedConversion.Name)
                    });
                }
            }
            var blockSyntax = await MappingImplementorEngine.GenerateMappingBlockAsync(methodSymbol, generator, semanticModel, mappingContext).ConfigureAwait(false);

            return(await document.ReplaceNodes(methodSyntax, methodSyntax.WithOnlyBody(blockSyntax), cancellationToken).ConfigureAwait(false));
        }
Ejemplo n.º 2
0
        private async Task <Document> GenerateMappingMethodBody(Document document, BaseMethodDeclarationSyntax methodSyntax, bool useMembersMappers, CancellationToken cancellationToken)
        {
            var semanticModel = await document.GetSemanticModelAsync(cancellationToken);

            var methodSymbol        = semanticModel.GetDeclaredSymbol(methodSyntax);
            var generator           = SyntaxGenerator.GetGenerator(document);
            var mappingContext      = new MappingContext(methodSyntax, semanticModel);
            var accessibilityHelper = new AccessibilityHelper(methodSymbol.ContainingType);


            if (useMembersMappers)
            {
                foreach (var userDefinedConversion in CustomConversionHelper.FindCustomConversionMethods(methodSymbol))
                {
                    if (userDefinedConversion == methodSymbol || accessibilityHelper.IsSymbolAccessible(userDefinedConversion, methodSymbol.ContainingType) == false)
                    {
                        continue;
                    }

                    mappingContext.CustomConversions[(userDefinedConversion.Parameters.First().Type, userDefinedConversion.ReturnType)] = (ExpressionSyntax)generator.IdentifierName(userDefinedConversion.Name);