private static async Task <Document> ChangeArrayTypeToExplicitAsync( Document document, ImplicitArrayCreationExpressionSyntax implicitArrayCreation, CancellationToken cancellationToken) { SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); ITypeSymbol typeSymbol = semanticModel.GetTypeSymbol(implicitArrayCreation, cancellationToken); var arrayType = (ArrayTypeSyntax)typeSymbol.ToTypeSyntax().WithSimplifierAnnotation(); SyntaxToken newKeyword = implicitArrayCreation.NewKeyword; if (!newKeyword.HasTrailingTrivia) { newKeyword = newKeyword.WithTrailingTrivia(Space); } InitializerExpressionSyntax initializer = implicitArrayCreation.Initializer; InitializerExpressionSyntax newInitializer = initializer.ReplaceNodes( initializer.Expressions, (node, _) => (node.IsKind(SyntaxKind.CastExpression)) ? node.WithSimplifierAnnotation() : node); ArrayCreationExpressionSyntax newNode = ArrayCreationExpression( newKeyword, arrayType .WithLeadingTrivia(implicitArrayCreation.OpenBracketToken.LeadingTrivia) .WithTrailingTrivia(implicitArrayCreation.CloseBracketToken.TrailingTrivia), newInitializer); return(await document.ReplaceNodeAsync(implicitArrayCreation, newNode, cancellationToken).ConfigureAwait(false)); }
private static async Task <Document> ChangeArrayTypeToImplicitAsync( Document document, ArrayCreationExpressionSyntax arrayCreation, CancellationToken cancellationToken) { SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); ArrayTypeSyntax arrayType = arrayCreation.Type; SyntaxList <ArrayRankSpecifierSyntax> rankSpecifiers = arrayType.RankSpecifiers; InitializerExpressionSyntax initializer = arrayCreation.Initializer; ITypeSymbol typeSymbol = semanticModel.GetTypeSymbol(arrayType.ElementType, cancellationToken); TypeSyntax castType; if (rankSpecifiers.Count > 1) { castType = ParseTypeName(arrayType.ToString().Remove(rankSpecifiers.Last().SpanStart - arrayType.SpanStart)); } else { castType = arrayType.ElementType; } InitializerExpressionSyntax newInitializer = initializer.ReplaceNodes( initializer.Expressions, (node, _) => CastExpression(castType, node.WithoutTrivia()) .WithTriviaFrom(node) .WithSimplifierAnnotation()); ImplicitArrayCreationExpressionSyntax implicitArrayCreation = ImplicitArrayCreationExpression( arrayCreation.NewKeyword.WithTrailingTrivia(arrayCreation.NewKeyword.TrailingTrivia.EmptyIfWhitespace()), rankSpecifiers[0].OpenBracketToken, default(SyntaxTokenList), rankSpecifiers.Last().CloseBracketToken, newInitializer); return(await document.ReplaceNodeAsync(arrayCreation, implicitArrayCreation, cancellationToken).ConfigureAwait(false)); }