Helper for accessing throw statements.
Inheritance: Helper
        private static ExpressionStatementTranslationUnit CreateThrowStatement(ThrowStatement helper, SemanticModel semanticModel)
        {
            if (helper.Expression == null)
            {
                // Void return
                return ExpressionStatementTranslationUnit.CreateThrow();
            }

            var expression = new ExpressionTranslationUnitBuilder(helper.Expression, semanticModel).Build();
            return ExpressionStatementTranslationUnit.CreateThrow(expression as ExpressionTranslationUnit);
        }
        /// <summary>
        /// Factory method for class <see cref="ExpressionStatementASTWalker"/>.
        /// </summary>
        /// <param name="node"><see cref="CSharpSyntaxNode"/> Used to initialize the walker.</param>
        /// <param name="semanticModel">The semantic model.</param>
        /// <returns></returns>
        public static ExpressionStatementASTWalker Create(CSharpSyntaxNode node, SemanticModel semanticModel = null)
        {
            // TODO: Use TranslationUnitFactory in order to have AST walkers decoupled from helpers
            //       via factories (which will be using helpers)

            ExpressionStatementTranslationUnit statement;

            // Return statement
            if (node as ReturnStatementSyntax != null)
            {
                var helper = new ReturnStatement(node as ReturnStatementSyntax, semanticModel);
                statement = CreateReturnStatement(helper, semanticModel);
            }
            // Throw statement
            else if (node as ThrowStatementSyntax != null)
            {
                var helper = new ThrowStatement(node as ThrowStatementSyntax, semanticModel);
                statement = CreateThrowStatement(helper, semanticModel);
            }
            // Other
            else if (node as ExpressionStatementSyntax != null)
            {
                var helper = new ExpressionStatement(node as ExpressionStatementSyntax, semanticModel);
                var expression = new ExpressionTranslationUnitBuilder(helper.Expression, semanticModel).Build();
                statement = ExpressionStatementTranslationUnit.Create(expression as ExpressionTranslationUnit);
            }
            else
            {
                throw new InvalidOperationException("Unrecognized statement!");
            }

            return new ExpressionStatementASTWalker(node, statement, semanticModel);
        }