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