public override SyntaxList <StatementSyntax> VisitRedimClause(VBSyntax.RedimClauseSyntax node) { bool preserve = node.Parent is VBSyntax.ReDimStatementSyntax rdss && rdss.PreserveKeyword.IsKind(VBasic.SyntaxKind.PreserveKeyword); var csTargetArrayExpression = (ExpressionSyntax)node.Expression.Accept(_nodesVisitor); var convertedBounds = CommonConversions.ConvertArrayBounds(node.ArrayBounds).ToList(); var newArrayAssignment = CreateNewArrayAssignment(node.Expression, csTargetArrayExpression, convertedBounds, node.SpanStart); if (!preserve) { return(SingleStatement(newArrayAssignment)); } var oldTargetName = GetUniqueVariableNameInScope(node, "old" + csTargetArrayExpression.ToString().ToPascalCase()); var oldArrayAssignment = CreateLocalVariableDeclarationAndAssignment(oldTargetName, csTargetArrayExpression); var oldTargetExpression = SyntaxFactory.IdentifierName(oldTargetName); var arrayCopyIfNotNull = CreateConditionalArrayCopy(node, oldTargetExpression, csTargetArrayExpression, convertedBounds); return(SyntaxFactory.List(new StatementSyntax[] { oldArrayAssignment, newArrayAssignment, arrayCopyIfNotNull })); }
// RedimClause is implemented in MethodBodyVisitor, but is not an executable statement public override SyntaxList <StatementSyntax> VisitRedimClause(VBSyntax.RedimClauseSyntax node) => _wrappedVisitor.Visit(node);