diff options
author | Matt Ward <matt.ward@xamarin.com> | 2019-03-29 18:26:39 +0300 |
---|---|---|
committer | Matt Ward <matt.ward@xamarin.com> | 2019-04-02 11:18:32 +0300 |
commit | 6d2b32a011f39b16710e1697b30dcd55a871f61d (patch) | |
tree | 5397e4ab7ec79134094692250b663ee12910499e /main/src/core/MonoDevelop.Ide | |
parent | 140275b8578f3e2bc3023e935e59ac8942c290c8 (diff) |
[Ide] Use type system project info cache on changing active config
If the active configuration is changed in the IDE then the
solution info was being reloaded without using the project info
cache.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
3 files changed, 15 insertions, 2 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.ProjectSystemHandler.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.ProjectSystemHandler.cs index 757f60bcc0..d806814c03 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.ProjectSystemHandler.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.ProjectSystemHandler.cs @@ -50,7 +50,7 @@ namespace MonoDevelop.Ide.TypeSystem readonly ProjectionData projections; readonly Lazy<MetadataReferenceHandler> metadataHandler; readonly Lazy<HostDiagnosticUpdateSource> hostDiagnosticUpdateSource; - readonly HackyWorkspaceFilesCache hackyCache; + HackyWorkspaceFilesCache hackyCache; readonly List<MonoDevelopAnalyzer> analyzersToDispose = new List<MonoDevelopAnalyzer> (); IDisposable persistentStorageLocationServiceRegistration; @@ -567,6 +567,11 @@ namespace MonoDevelop.Ide.TypeSystem return new [] { projectName }.Concat (f.ProjectVirtualPath.ParentDirectory.ToString ().Split (Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)); } + internal void ReloadProjectCache () + { + hackyCache = new HackyWorkspaceFilesCache (workspace.MonoDevelopSolution); + } + public void Dispose () { persistentStorageLocationServiceRegistration?.Dispose (); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs index eb5244977a..734387e725 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs @@ -352,7 +352,8 @@ namespace MonoDevelop.Ide.TypeSystem var token = src.Token;
try {
- var (solution, si) = await ProjectHandler.CreateSolutionInfo (MonoDevelopSolution, token).ConfigureAwait (false);
+ ProjectHandler.ReloadProjectCache ();
+ var (solution, si) = await TypeSystemService.Load (this, token).ConfigureAwait (false);
if (si != null)
OnSolutionReloaded (si);
} catch (OperationCanceledException) {
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs index 6ee117b0b6..ca2ad94713 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs @@ -170,6 +170,13 @@ namespace MonoDevelop.Ide.TypeSystem } } + internal static Task<(MonoDevelop.Projects.Solution, SolutionInfo)> Load (MonoDevelopWorkspace workspace, CancellationToken cancellationToken) + { + return Task.Run (() => { + return InternalLoad (workspace, cancellationToken); + }); + } + static async Task<(MonoDevelop.Projects.Solution, SolutionInfo)> InternalLoad (MonoDevelopWorkspace workspace, CancellationToken cancellationToken) { // Try the cache first. |