/// <summary>
        /// Initializes a new instance of the <see cref="LocalDeclarationStatementASTWalker"/> class.
        /// </summary>
        /// <param name="node"></param>
        /// <param name="statement"></param>
        /// <param name="semanticModel">The semantic model.</param>
        protected LocalDeclarationStatementASTWalker(CSharpSyntaxNode node, LocalDeclarationStatementTranslationUnit localDeclarationStatement, SemanticModel semanticModel)
            : base(node, semanticModel)
        {
            var declarationSyntaxNode = node as LocalDeclarationStatementSyntax;

            if (declarationSyntaxNode == null)
            {
                throw new ArgumentException(
                          string.Format("Specified node is not of type {0}",
                                        typeof(LocalDeclarationStatementSyntax).Name));
            }

            if (localDeclarationStatement == null)
            {
                throw new ArgumentNullException(nameof(localDeclarationStatement));
            }

            // Node assigned in base, no need to assign it here
            this.statement = localDeclarationStatement;
        }
        /// <summary>
        /// Factory method for class <see cref="LocalDeclarationStatementASTWalker"/>.
        /// </summary>
        /// <param name="node"><see cref="CSharpSyntaxNode"/> Used to initialize the walker.</param>
        /// <param name="semanticModel">The semantic model.</param>
        /// <returns></returns>
        public static LocalDeclarationStatementASTWalker 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)

            var variableDeclaration = new VariableDeclaration((node as LocalDeclarationStatementSyntax).Declaration, semanticModel);

            ExpressionSyntax expression = variableDeclaration.Expressions[0]; // This can contain null, so need to act accordingly
            ITranslationUnit expressionTranslationUnit = expression == null
                ? null
                : new ExpressionTranslationUnitBuilder(expression, semanticModel).Build();

            var variableDeclarationTranslationUnit = VariableDeclarationTranslationUnit.Create(
                TypeIdentifierTranslationUnit.Create(variableDeclaration.Type.Name),
                IdentifierTranslationUnit.Create(variableDeclaration.Names[0]),
                expressionTranslationUnit);

            var statement = LocalDeclarationStatementTranslationUnit.Create(variableDeclarationTranslationUnit);

            return(new LocalDeclarationStatementASTWalker(node, statement, semanticModel));
        }
示例#3
0
 public static MockedLocalDeclarationStatementTranslationUnit Create(LocalDeclarationStatementTranslationUnit statementTranslationUnit)
 {
     return(new MockedLocalDeclarationStatementTranslationUnit(statementTranslationUnit));
 }
示例#4
0
 protected MockedLocalDeclarationStatementTranslationUnit(LocalDeclarationStatementTranslationUnit original)
     : base(original)
 {
     // Reassigning since base class operated on it
     this.variableDeclaration = MockedVariableDeclarationTranslationUnit.Create(this.variableDeclaration);
 }