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);
        }
Exemplo n.º 2
0
            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);
                }
            }
Exemplo n.º 3
0
 internal void ReloadProjectCache()
 {
     workspaceCache = new WorkspaceFilesCache();
     workspaceCache.Load(workspace.MonoDevelopSolution);
 }