Exemplo n.º 1
0
        private static async Task <ISet <ProjectId> > GetProjectsThatCouldReferenceTypeAsync(
            INamedTypeSymbol type,
            Solution solution,
            bool searchInMetadata,
            CancellationToken cancellationToken)
        {
            var dependencyGraph = solution.GetProjectDependencyGraph();

            if (searchInMetadata)
            {
                // For a metadata type, find all projects that refer to the metadata assembly that
                // the type is defined in.  Note: we pass 'null' for projects intentionally.  We
                // Need to find all the possible projects that contain this metadata.
                var projectsThatReferenceMetadataAssembly =
                    await DependentProjectsFinder.GetDependentProjectsAsync(
                        type, solution, projects : null, cancellationToken : cancellationToken).ConfigureAwait(false);

                // Now collect all the dependent projects as well.
                var projectsThatCouldReferenceType =
                    projectsThatReferenceMetadataAssembly.SelectMany(
                        p => GetProjectsThatCouldReferenceType(dependencyGraph, p)).ToSet();

                return(projectsThatCouldReferenceType);
            }
            else
            {
                // For a source project, find the project that that type was defined in.
                var sourceProject = solution.GetProject(type.ContainingAssembly);
                if (sourceProject == null)
                {
                    return(SpecializedCollections.EmptySet <ProjectId>());
                }

                // Now find all the dependent of those projects.
                var projectsThatCouldReferenceType = GetProjectsThatCouldReferenceType(
                    dependencyGraph, sourceProject).ToSet();

                return(projectsThatCouldReferenceType);
            }
        }
            internal static async Task <Tuple <IEnumerable <RenameLocation>, IEnumerable <RenameLocation> > > GetRenamableLocationsInStringsAndCommentsAsync(
                ISymbol originalSymbol,
                Solution solution,
                bool renameInStrings,
                bool renameInComments,
                CancellationToken cancellationToken)
            {
                if (!renameInStrings && !renameInComments)
                {
                    return(new Tuple <IEnumerable <RenameLocation>, IEnumerable <RenameLocation> >(null, null));
                }

                var renameText = originalSymbol.Name;
                List <RenameLocation> stringLocations  = renameInStrings ? new List <RenameLocation>() : null;
                List <RenameLocation> commentLocations = renameInComments ? new List <RenameLocation>() : null;
                var dependentProjects = await DependentProjectsFinder.GetDependentProjectsAsync(originalSymbol, solution, projects : null, cancellationToken : cancellationToken).ConfigureAwait(false);

                foreach (var project in dependentProjects)
                {
                    foreach (var document in project.Documents)
                    {
                        var syntaxFactsLanguageService = document.Project.LanguageServices.GetService <ISyntaxFactsService>();

                        if (renameInStrings)
                        {
                            await AddLocationsToRenameInStringsAsync(document, renameText, syntaxFactsLanguageService,
                                                                     stringLocations, cancellationToken).ConfigureAwait(false);
                        }

                        if (renameInComments)
                        {
                            await AddLocationsToRenameInCommentsAsync(document, renameText, commentLocations, cancellationToken).ConfigureAwait(false);
                        }
                    }
                }

                return(new Tuple <IEnumerable <RenameLocation>, IEnumerable <RenameLocation> >(stringLocations, commentLocations));
            }
Exemplo n.º 3
0
 protected virtual Task <ImmutableArray <Project> > DetermineProjectsToSearchAsync(
     TSymbol symbol, Solution solution, IImmutableSet <Project> projects, CancellationToken cancellationToken)
 {
     return(DependentProjectsFinder.GetDependentProjectsAsync(
                symbol, solution, projects, cancellationToken));
 }