Browse Source

r7000@daniel-notebook (orig r3258): daniel | 2008-07-30 16:20:03 +0200

When removing a project from the solution, remove its configuration entries.


git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3258 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
f60de83676
  1. 5
      src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs
  2. 31
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  3. 7
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  4. 13
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

5
src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs

@ -136,6 +136,11 @@ namespace ICSharpCode.UnitTesting
if (project != null) { if (project != null) {
treeView.RemoveProject(project); treeView.RemoveProject(project);
} }
if (solutionFolder is ISolutionFolderContainer) {
// recurse into child folders that were also removed
((ISolutionFolderContainer)solutionFolder).Folders.ForEach(SolutionFolderRemoved);
}
} }
/// <summary> /// <summary>

31
src/Main/Base/Project/Src/Project/Solution/Solution.cs

@ -672,10 +672,41 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
} }
// remove all configuration entries belonging to removed projects
prjSec.Items.RemoveAll(
item => {
if (item.Name.Contains(".")) {
string guid = item.Name.Substring(0, item.Name.IndexOf('.'));
if (!this.Projects.Any(p => string.Equals(p.IdGuid, guid, StringComparison.OrdinalIgnoreCase))) {
changed = true;
return true;
}
}
return false;
});
return changed; return changed;
} }
#endregion #endregion
/// <summary>
/// Removes all configurations belonging to the specified project.
/// Is used to remove a project from the solution.
/// </summary>
internal void RemoveProjectConfigurations(string projectGuid)
{
ProjectSection prjSec = GetProjectConfigurationsSection();
prjSec.Items.RemoveAll(
item => {
if (item.Name.Contains(".")) {
string guid = item.Name.Substring(0, item.Name.IndexOf('.'));
if (string.Equals(projectGuid, guid, StringComparison.OrdinalIgnoreCase))
return true; // remove configuration
}
return false;
});
}
#region GetProjectConfigurationsSection/GetPlatformNames #region GetProjectConfigurationsSection/GetPlatformNames
public IList<string> GetConfigurationNames() public IList<string> GetConfigurationNames()
{ {

7
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -320,6 +320,13 @@ namespace ICSharpCode.SharpDevelop
} }
} }
internal static void RemoveProjectContentForRemovedProject(IProject project)
{
lock (projectContents) {
projectContents.Remove(project);
}
}
public static IProjectContent GetProjectContent(IProject project) public static IProjectContent GetProjectContent(IProject project)
{ {
lock (projectContents) { lock (projectContents) {

13
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -571,11 +571,24 @@ namespace ICSharpCode.SharpDevelop.Project
if (folder.IdGuid == guid) { if (folder.IdGuid == guid) {
folder.Parent.RemoveFolder(folder); folder.Parent.RemoveFolder(folder);
OnSolutionFolderRemoved(new SolutionFolderEventArgs(folder)); OnSolutionFolderRemoved(new SolutionFolderEventArgs(folder));
HandleRemovedSolutionFolder(folder);
break; break;
} }
} }
} }
static void HandleRemovedSolutionFolder(ISolutionFolder folder)
{
if (folder is IProject) {
OpenSolution.RemoveProjectConfigurations(folder.IdGuid);
ParserService.RemoveProjectContentForRemovedProject((IProject)folder);
}
if (folder is ISolutionFolderContainer) {
// recurse into child folders that were also removed
((ISolutionFolderContainer)folder).Folders.ForEach(HandleRemovedSolutionFolder);
}
}
static void OnSolutionFolderRemoved(SolutionFolderEventArgs e) static void OnSolutionFolderRemoved(SolutionFolderEventArgs e)
{ {
if (SolutionFolderRemoved != null) { if (SolutionFolderRemoved != null) {

Loading…
Cancel
Save