コード例 #1
0
        private async Task <Document> RegenerateDefaultMappingsAsync(
            Document document,
            LambdaExpressionSyntax lambda,
            string automappableMembers,
            CancellationToken cancellationToken)
        {
            var parsedMappableMembers = automappableMembers
                                        .Split(';')
                                        .Where(x => string.IsNullOrWhiteSpace(x) == false)
                                        .ToArray();

            var sourceIdentifierName = lambda
                                       .ChildNodes().OfType <ParameterListSyntax>().Single()
                                       .ChildNodes().OfType <ParameterSyntax>().Single()
                                       .ChildTokens().Single().ToString().Trim();

            var preparedNames = parsedMappableMembers
                                .Select(x => $"{x}={sourceIdentifierName}.{x},\r\n")
                                .ToArray();

            var preparedJoinedNames = string.Join("", preparedNames);

            var newInitializerText =
                $@"new X{{
{preparedJoinedNames}}}";

            var newInitializer = ((ObjectCreationExpressionSyntax)SF.ParseExpression(newInitializerText))
                                 .ChildNodes().OfType <InitializerExpressionSyntax>().Single();

            var oldInitializer = lambda
                                 .ChildNodes().OfType <ObjectCreationExpressionSyntax>().Single()
                                 .ChildNodes().OfType <InitializerExpressionSyntax>().Single();

            var newRawLambda = lambda.ReplaceNode(oldInitializer, newInitializer);

            document = await ParseSyntaxTextAndReplaceNode(document, lambda, newRawLambda, cancellationToken);

            return(document);
        }