Exemplo n.º 1
0
        internal static async Task <RenameLocations> RehydrateAsync(Solution solution, SerializableRenameLocations locations, CancellationToken cancellationToken)
        {
            if (locations == null)
            {
                return(null);
            }

            var symbol = await locations.Symbol.TryRehydrateAsync(solution, cancellationToken).ConfigureAwait(false);

            if (symbol == null)
            {
                return(null);
            }

            ImmutableArray <SearchResult>   overloadsResult = default;
            ImmutableArray <RenameLocation> stringsResult   = default;
            ImmutableArray <RenameLocation> commentsResult  = default;

            if (locations.OverloadsResult != null)
            {
                using var _ = ArrayBuilder <SearchResult> .GetInstance(locations.OverloadsResult.Length, out var builder);

                foreach (var res in locations.OverloadsResult)
                {
                    builder.Add(await res.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false));
                }

                overloadsResult = builder.ToImmutable();
            }

            if (locations.StringsResult != null)
            {
                using var _ = ArrayBuilder <RenameLocation> .GetInstance(locations.StringsResult.Length, out var builder);

                foreach (var res in locations.StringsResult)
                {
                    builder.Add(await res.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false));
                }

                stringsResult = builder.ToImmutable();
            }

            if (locations.CommentsResult != null)
            {
                using var _ = ArrayBuilder <RenameLocation> .GetInstance(locations.CommentsResult.Length, out var builder);

                foreach (var res in locations.CommentsResult)
                {
                    builder.Add(await res.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false));
                }

                commentsResult = builder.ToImmutable();
            }

            return(new RenameLocations(
                       symbol,
                       solution,
                       locations.Options.Rehydrate(),
                       await locations.OriginalSymbolResult.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false),
                       await locations.MergedResult.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false),
                       overloadsResult,
                       stringsResult,
                       commentsResult));
        }
Exemplo n.º 2
0
        internal static async Task <RenameLocations?> TryRehydrateAsync(Solution solution, SerializableRenameLocations locations, CancellationToken cancellationToken)
        {
            if (locations == null)
            {
                return(null);
            }

            if (locations.Symbol == null)
            {
                return(null);
            }

            var symbol = await locations.Symbol.TryRehydrateAsync(solution, cancellationToken).ConfigureAwait(false);

            if (symbol == null)
            {
                return(null);
            }

            Contract.ThrowIfNull(locations.Result);

            return(new RenameLocations(
                       symbol,
                       solution,
                       locations.Options.Rehydrate(),
                       await locations.Result.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false)));
        }