예제 #1
0
        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));
        }
예제 #2
0
        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));
        }