public LambdaExpressionSyntax ConvertLambdaExpression(CSSyntax.AnonymousFunctionExpressionSyntax node, CS.CSharpSyntaxNode body, IEnumerable <ParameterSyntax> parameters, SyntaxTokenList modifiers)
    {
        var parameterList = SyntaxFactory.ParameterList(SyntaxFactory.SeparatedList(parameters.Select(p => (Microsoft.CodeAnalysis.VisualBasic.Syntax.ParameterSyntax)p.Accept(_nodesVisitor))));
        LambdaHeaderSyntax      header;
        EndBlockStatementSyntax endBlock;
        SyntaxKind multiLineExpressionKind;
        SyntaxKind singleLineExpressionKind;
        bool       isSub = ReturnsVoid(node);

        if (isSub)
        {
            header = SyntaxFactory.SubLambdaHeader(SyntaxFactory.List <AttributeListSyntax>(),
                                                   ConvertModifiers(modifiers, TokenContext.Local), parameterList, null);
            endBlock = SyntaxFactory.EndBlockStatement(SyntaxKind.EndSubStatement,
                                                       SyntaxFactory.Token(SyntaxKind.SubKeyword));
            multiLineExpressionKind  = SyntaxKind.MultiLineSubLambdaExpression;
            singleLineExpressionKind = SyntaxKind.SingleLineSubLambdaExpression;
        }
        else
        {
            header = CreateFunctionHeader(modifiers, parameterList, out endBlock, out multiLineExpressionKind);
            singleLineExpressionKind = SyntaxKind.SingleLineFunctionLambdaExpression;
        }

        SyntaxList <StatementSyntax> statements;

        if (body is CSSyntax.BlockSyntax block)
        {
            statements = ConvertStatements(block.Statements);
        }
        else if (body.Kind() == CSSyntaxKind.ThrowExpression)
        {
            var csThrowExpression = (CSSyntax.ThrowExpressionSyntax)body;
            var vbThrowExpression = (ExpressionSyntax)csThrowExpression.Expression.Accept(_nodesVisitor);
            var vbThrowStatement  = SyntaxFactory.ThrowStatement(SyntaxFactory.Token(SyntaxKind.ThrowKeyword), vbThrowExpression);

            return(SyntaxFactory.MultiLineFunctionLambdaExpression(header,
                                                                   SyntaxFactory.SingletonList <StatementSyntax>(vbThrowStatement), endBlock));
        }
        else
        {
            var stmt = GetStatementSyntax(body.Accept(_nodesVisitor),
                                          expression => isSub ? SyntaxFactory.ExpressionStatement(expression) : SyntaxFactory.ReturnStatement(expression));
            statements = InsertRequiredDeclarations(SyntaxFactory.SingletonList(stmt), body);
        }

        return(CreateLambdaExpression(singleLineExpressionKind, multiLineExpressionKind, header, statements, endBlock));
    }
    public bool ReturnsVoid(CSSyntax.AnonymousFunctionExpressionSyntax node)
    {
        var symbol = (IMethodSymbol)_semanticModel.GetSymbolInfo(node).Symbol;

        return(symbol.ReturnsVoid);
    }