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)))); }
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)); }
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()); } }