示例#1
0
        private void ParseAllInternal(object requestor, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            _parserStateManager.SetStatusAndFireStateChanged(requestor, ParserState.Started, token);
            token.ThrowIfCancellationRequested();

            _projectManager.RefreshProjects();
            token.ThrowIfCancellationRequested();

            var modules = _projectManager.AllModules();

            token.ThrowIfCancellationRequested();

            var toParse = modules.Where(module => State.IsNewOrModified(module)).ToHashSet();

            token.ThrowIfCancellationRequested();

            toParse.UnionWith(modules.Where(module => _parserStateManager.GetModuleState(module) != ParserState.Ready));
            token.ThrowIfCancellationRequested();

            var removedModules = RemovedModules(modules);

            token.ThrowIfCancellationRequested();

            var removedProjects = RemovedProjects(_projectManager.Projects);

            token.ThrowIfCancellationRequested();

            removedModules.UnionWith(ModulesInProjects(removedProjects));
            token.ThrowIfCancellationRequested();

            var notRemovedDisposedProjects = NotRemovedDisposedProjects(removedProjects);

            toParse.UnionWith(ModulesInProjects(notRemovedDisposedProjects));

            var toReResolveReferences = OtherModulesReferencingAnyNotToBeParsed(removedModules.AsReadOnly(), toParse.AsReadOnly());

            token.ThrowIfCancellationRequested();

            _parserStateManager.SetModuleStates(toReResolveReferences, ParserState.ResolvingReferences, token);
            token.ThrowIfCancellationRequested();

            CleanUpRemovedComponents(removedModules.AsReadOnly(), token);
            token.ThrowIfCancellationRequested();

            //This must come after the component cleanup because of cache invalidation.
            CleanUpProjects(removedProjects);
            token.ThrowIfCancellationRequested();

            CleanUpProjects(notRemovedDisposedProjects);
            token.ThrowIfCancellationRequested();

            ExecuteCommonParseActivities(toParse.AsReadOnly(), toReResolveReferences, token);
        }
示例#2
0
        protected void ParseAllInternal(object requestor, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            _parserStateManager.SetStatusAndFireStateChanged(requestor, ParserState.Started, token);
            token.ThrowIfCancellationRequested();

            _rewritingManager?.InvalidateAllSessions();
            token.ThrowIfCancellationRequested();

            _projectManager.RefreshProjects();
            token.ThrowIfCancellationRequested();

            var modules = _projectManager.AllModules();

            token.ThrowIfCancellationRequested();

            var projects   = _projectManager.Projects;
            var projectIds = projects.Select(tpl => tpl.ProjectId).ToList().AsReadOnly();

            token.ThrowIfCancellationRequested();

            var toParse = modules.Where(module => State.IsNewOrModified(module)).ToHashSet();

            token.ThrowIfCancellationRequested();

            toParse.UnionWith(modules.Where(module => _parserStateManager.GetModuleState(module) != ParserState.Ready));
            token.ThrowIfCancellationRequested();

            _parsingCacheService.ReloadCompilationArguments(projectIds);
            token.ThrowIfCancellationRequested();

            var projectsWithChangedCompilationArguments = _parsingCacheService.ProjectWhoseCompilationArgumentsChanged();

            token.ThrowIfCancellationRequested();

            toParse.UnionWith(ModulesInProjects(projectsWithChangedCompilationArguments));
            token.ThrowIfCancellationRequested();

            toParse = toParse.Where(module => module.IsParsable).ToHashSet();
            token.ThrowIfCancellationRequested();

            var removedModules = RemovedModules(modules);

            token.ThrowIfCancellationRequested();

            var removedProjects = RemovedProjects(projects.Select(tpl => tpl.Project).ToList().AsReadOnly());

            token.ThrowIfCancellationRequested();

            removedModules.UnionWith(ModulesInProjects(removedProjects));
            token.ThrowIfCancellationRequested();

            var notRemovedDisposedProjects = NotRemovedDisposedProjects(removedProjects);

            toParse.UnionWith(ModulesInProjects(notRemovedDisposedProjects));

            var toReResolveReferences = OtherModulesReferencingAnyNotToBeParsed(removedModules.AsReadOnly(), toParse.AsReadOnly());

            token.ThrowIfCancellationRequested();

            _parserStateManager.SetModuleStates(toReResolveReferences, ParserState.ResolvingReferences, token);
            token.ThrowIfCancellationRequested();

            CleanUpRemovedComponents(removedModules.AsReadOnly(), token);
            token.ThrowIfCancellationRequested();

            //This must come after the component cleanup because of cache invalidation.
            CleanUpProjects(removedProjects);
            token.ThrowIfCancellationRequested();

            CleanUpProjects(notRemovedDisposedProjects);
            token.ThrowIfCancellationRequested();

            var newProjects = NewProjects(projectIds);

            ExecuteCommonParseActivities(toParse.AsReadOnly(), toReResolveReferences, newProjects, token);
        }