internal static void Unload(MonoDevelop.Projects.WorkspaceItem item) { var ws = item as MonoDevelop.Projects.Workspace; if (ws != null) { foreach (var it in ws.Items) { Unload(it); } ws.ItemAdded -= OnWorkspaceItemAdded; ws.ItemRemoved -= OnWorkspaceItemRemoved; MonoDocDocumentationProvider.ClearCommentCache(); } else { var solution = item as MonoDevelop.Projects.Solution; if (solution != null) { MonoDevelopWorkspace result = GetWorkspace(solution); if (result != emptyWorkspace) { lock (workspaceLock) workspaces = workspaces.Remove(result); result.Dispose(); } solution.SolutionItemAdded -= OnSolutionItemAdded; solution.SolutionItemRemoved -= OnSolutionItemRemoved; if (solution.ParentWorkspace == null) { MonoDocDocumentationProvider.ClearCommentCache(); } } } }
internal void Unload(MonoDevelop.Projects.WorkspaceItem item) { var ws = item as MonoDevelop.Projects.Workspace; if (ws != null) { foreach (var it in ws.Items) { Unload(it); } ws.ItemAdded -= OnWorkspaceItemAdded; ws.ItemRemoved -= OnWorkspaceItemRemoved; MonoDocDocumentationProvider.ClearCommentCache(); } else { var solution = item as MonoDevelop.Projects.Solution; if (solution != null) { MonoDevelopWorkspace result = GetWorkspace(solution); if (result != emptyWorkspace) { lock (workspaceLock) workspaces = workspaces.Remove(result); result.Dispose(); } lock (solution.ExtendedProperties.SyncRoot) { if (solution.ExtendedProperties [typeof(WorkspaceRequestRegistration)] is WorkspaceRequestRegistration registration) { registration.Dispose(); } } solution.SolutionItemAdded -= OnSolutionItemAdded; solution.SolutionItemRemoved -= OnSolutionItemRemoved; if (solution.ParentWorkspace == null) { MonoDocDocumentationProvider.ClearCommentCache(); } } } }