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); }
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); }