private static async Task <Document> CreateMappingLambda(Document document, InvocationExpressionSyntax invocation, CancellationToken cancellationToken) { var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); var syntaxGenerator = SyntaxGenerator.GetGenerator(document); var methodInvocationSymbol = semanticModel.GetSymbolInfo(invocation.Expression, cancellationToken); var mappingOverload = methodInvocationSymbol.CandidateSymbols.OfType <IMethodSymbol>().FirstOrDefault(IsMappingMethod); if (mappingOverload == null) { return(document); } var parameterType = ((INamedTypeSymbol)mappingOverload.Parameters[0].Type); var sourceElementType = parameterType.TypeArguments[0]; var targetElementType = GetExpressionType(semanticModel, invocation); if (targetElementType == null) { return(document); } var mappingEngine = new MappingEngine(semanticModel, syntaxGenerator); var sourceListElementType = new AnnotatedType(sourceElementType); var mappingLambda = await mappingEngine.CreateMappingLambdaAsync("x", sourceListElementType, targetElementType, new MappingPath(), new MappingContext(invocation, semanticModel)).ConfigureAwait(false); return(await document.ReplaceNodes(invocation, invocation.WithArgumentList(SyntaxFactory.ArgumentList().AddArguments(SyntaxFactory.Argument((ExpressionSyntax)mappingLambda))), cancellationToken).ConfigureAwait(false)); }