public override SyntaxList <VB.Syntax.StatementSyntax> VisitTryStatement(CS.Syntax.TryStatementSyntax node)
 {
     return(List <VB.Syntax.StatementSyntax>(
                VB.SyntaxFactory.TryBlock(
                    Visit(node.Block),
                    List(node.Catches.Select(nodeVisitor.Visit <VB.Syntax.CatchBlockSyntax>)),
                    nodeVisitor.Visit <VB.Syntax.FinallyBlockSyntax>(node.Finally))));
 }
Example #2
0
        public override SyntaxList <StatementSyntax> VisitTryStatement(CSS.TryStatementSyntax node)
        {
            var block = SyntaxFactory.TryBlock(
                ConvertBlock(node.Block),
                SyntaxFactory.List(node.Catches.IndexedSelect(ConvertCatchClause)),
                node.Finally == null ? null : SyntaxFactory.FinallyBlock(ConvertBlock(node.Finally.Block))
                );

            return(SyntaxFactory.SingletonList <StatementSyntax>(block));
        }
Example #3
0
        private static SyntaxToken GetFirstExcludedToken(StatementSyntax statement)
        {
            Debug.Assert(statement != null);
            switch (statement.Kind())
            {
            case SyntaxKind.Block:
                return(((BlockSyntax)statement).CloseBraceToken);

            case SyntaxKind.BreakStatement:
                return(((BreakStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.CheckedStatement:
            case SyntaxKind.UncheckedStatement:
                return(((CheckedStatementSyntax)statement).Block.CloseBraceToken);

            case SyntaxKind.ContinueStatement:
                return(((ContinueStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.LocalDeclarationStatement:
                return(((LocalDeclarationStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.DoStatement:
                return(((DoStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.EmptyStatement:
                return(((EmptyStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.ExpressionStatement:
                return(((ExpressionStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.FixedStatement:
                return(GetFirstExcludedToken(((FixedStatementSyntax)statement).Statement));

            case SyntaxKind.ForEachStatement:
            case SyntaxKind.ForEachVariableStatement:
                return(GetFirstExcludedToken(((CommonForEachStatementSyntax)statement).Statement));

            case SyntaxKind.ForStatement:
                return(GetFirstExcludedToken(((ForStatementSyntax)statement).Statement));

            case SyntaxKind.GotoDefaultStatement:
            case SyntaxKind.GotoCaseStatement:
            case SyntaxKind.GotoStatement:
                return(((GotoStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.IfStatement:
                IfStatementSyntax ifStmt  = (IfStatementSyntax)statement;
                ElseClauseSyntax  elseOpt = ifStmt.Else;
                return(GetFirstExcludedToken(elseOpt == null ? ifStmt.Statement : elseOpt.Statement));

            case SyntaxKind.LabeledStatement:
                return(GetFirstExcludedToken(((LabeledStatementSyntax)statement).Statement));

            case SyntaxKind.LockStatement:
                return(GetFirstExcludedToken(((LockStatementSyntax)statement).Statement));

            case SyntaxKind.ReturnStatement:
                return(((ReturnStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.SwitchStatement:
                return(((SwitchStatementSyntax)statement).CloseBraceToken);

            case SyntaxKind.ThrowStatement:
                return(((ThrowStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.TryStatement:
                TryStatementSyntax tryStmt = (TryStatementSyntax)statement;

                FinallyClauseSyntax finallyClause = tryStmt.Finally;
                if (finallyClause != null)
                {
                    return(finallyClause.Block.CloseBraceToken);
                }

                CatchClauseSyntax lastCatch = tryStmt.Catches.LastOrDefault();
                if (lastCatch != null)
                {
                    return(lastCatch.Block.CloseBraceToken);
                }
                return(tryStmt.Block.CloseBraceToken);

            case SyntaxKind.UnsafeStatement:
                return(((UnsafeStatementSyntax)statement).Block.CloseBraceToken);

            case SyntaxKind.UsingStatement:
                return(GetFirstExcludedToken(((UsingStatementSyntax)statement).Statement));

            case SyntaxKind.WhileStatement:
                return(GetFirstExcludedToken(((WhileStatementSyntax)statement).Statement));

            case SyntaxKind.YieldReturnStatement:
            case SyntaxKind.YieldBreakStatement:
                return(((YieldStatementSyntax)statement).SemicolonToken);

            case SyntaxKind.LocalFunctionStatement:
                LocalFunctionStatementSyntax localFunctionStmt = (LocalFunctionStatementSyntax)statement;
                if (localFunctionStmt.Body != null)
                {
                    return(GetFirstExcludedToken(localFunctionStmt.Body));
                }
                if (localFunctionStmt.SemicolonToken != default(SyntaxToken))
                {
                    return(localFunctionStmt.SemicolonToken);
                }
                return(localFunctionStmt.ParameterList.GetLastToken());

            default:
                throw ExceptionUtilities.UnexpectedValue(statement.Kind());
            }
        }