public virtual void VisitCatchStatement <TTypeReference, TStatement>(
     ICatchStatement <TTypeReference, TStatement> catchStatement)
     where TTypeReference : ITypeReference
     where TStatement : IStatement
 {
     Visit(catchStatement);
 }
 public static void VisitCatchStatementChildren <TTypeReference, TStatement>(
     ICatchStatement <TTypeReference, TStatement> catchStatement,
     IGenericStatementVisitor visitor)
     where TTypeReference : ITypeReference
     where TStatement : IStatement
 {
     VisitCollection(catchStatement.Statements, visitor);
 }
        public override void VisitCatchStatement <TTypeReference, TStatement>(
            ICatchStatement <TTypeReference, TStatement> catchStatement)
        {
            Steps.Add(new WriteIndentedNewLine());
            Steps.Add(new WriteCatchKeyword());
            Steps.Add(new WriteWhitespace());
            Steps.Add(new WriteStartParenthesis());
            Steps.Add(new WriteChildNode <TTypeReference>(catchStatement.Type));
            if (!string.IsNullOrWhiteSpace(catchStatement.VariableName))
            {
                Steps.Add(new WriteWhitespace());
                Steps.Add(new WriteName(catchStatement.VariableName));
            }

            Steps.Add(new WriteEndParenthesis());
            Steps.Add(new WriteIndentedNewLine());
            Steps.AddBlockSteps(catchStatement.Statements);
        }