static ProjectCacheInfo GetProjectCacheInfo(Solution sol, Project p) { var ws = IdeServices.TypeSystemService.GetWorkspace(sol); var cache = new WorkspaceFilesCache(); cache.Load(sol); if (cache.TryGetCachedItems(p, ws.MetadataReferenceManager, ws.ProjectMap, out ProjectCacheInfo cacheInfo)) { return(cacheInfo); } return(null); }
internal Task <(MonoDevelop.Projects.Solution, SolutionInfo)> CreateSolutionInfoFromCache(MonoDevelop.Projects.Solution sol, CancellationToken ct) { return(Task.Run(delegate { return CreateSolutionInfoFromCacheInternal(sol, ct); })); async Task <(MonoDevelop.Projects.Solution, SolutionInfo)> CreateSolutionInfoFromCacheInternal(MonoDevelop.Projects.Solution solution, CancellationToken token) { projections.ClearOldProjectionList(); solutionData = new SolutionData(); workspaceCache.Load(solution); var projectInfos = await CreateProjectInfosFromCache(solution.GetAllProjects(), token).ConfigureAwait(false); if (projectInfos == null) { return(solution, null); } if (token.IsCancellationRequested) { return(solution, null); } var solutionId = GetSolutionId(solution); var solutionInfo = SolutionInfo.Create(solutionId, VersionStamp.Create(), solution.FileName, projectInfos); lock (addLock) { if (!added) { added = true; OnSolutionOpened(workspace, solutionInfo); } } // Clear modified projects during load. The projects will be loaded later. lock (workspace.projectModifyLock) { workspace.modifiedProjects.RemoveAll(p => p.ParentSolution == solution); } return(solution, solutionInfo); } }
internal void ReloadProjectCache() { workspaceCache = new WorkspaceFilesCache(); workspaceCache.Load(workspace.MonoDevelopSolution); }