Пример #1
0
        public Statement GetStatement()
        {
            var kind = initializerExpressionSyntax.Kind();

            if (kind == Microsoft.CodeAnalysis.CSharp.SyntaxKind.ArrayInitializerExpression)
            {
                var statement = new ArrayCreationStatement();
                statement.Type = GetTypeSyntax(initializerExpressionSyntax);

                statement.Bounds = new List <Statement>();
                statement.Bounds.Add(new ConstantStatement(initializerExpressionSyntax.Expressions.Count));
                statement.Initializers = new List <Statement>();
                bool getInnerArrayLength = false;
                foreach (var expression in initializerExpressionSyntax.Expressions)
                {
                    var innerStatement = statementInterpreterHandler.GetStatement(expression);

                    if (innerStatement is ArrayCreationStatement arrayCreationStatement)
                    {
                        if (!getInnerArrayLength)
                        {
                            statement.Bounds.AddRange(
                                arrayCreationStatement.Bounds.Select(x => x));
                            getInnerArrayLength = true;
                        }
                        statement.Initializers.AddRange(
                            arrayCreationStatement.Initializers.Select(x => x));
                    }
                    else
                    {
                        statement.Initializers.Add(innerStatement);
                    }
                }
                return(statement);
            }
            else
            {
                var statement = new InitializerStatement();
                statement.Statements = initializerExpressionSyntax.Expressions.Select(x =>
                                                                                      statementInterpreterHandler.GetStatement(x)).ToList();

                return(statement);
            }
        }
        public Statement GetStatement()
        {
            if (arrayCreationExpressionSyntax.Initializer == null)
            {
                var statement = new ArrayCreationStatement();
                statement.Type   = arrayCreationExpressionSyntax.Type.ElementType.GetClassType(semanticModel);
                statement.Bounds = new System.Collections.Generic.List <Statement>();
                foreach (var rank in arrayCreationExpressionSyntax.Type.RankSpecifiers)
                {
                    foreach (var size in rank.Sizes)
                    {
                        statement.Bounds.Add(statementInterpreterHandler.GetStatement(size));
                    }
                }

                return(statement);
            }

            return(statementInterpreterHandler.GetStatement(arrayCreationExpressionSyntax.Initializer)
                   );
        }
 public ArrayCreationExpresstionInterpreter(ExpressionInterpreterHandler expressionInterpreterHandler, ArrayCreationStatement arrayCreationStatement)
 {
     this.expressionInterpreterHandler = expressionInterpreterHandler;
     this.arrayCreationStatement       = arrayCreationStatement;
 }