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

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

@ -672,10 +672,41 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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;
}
#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
public IList<string> GetConfigurationNames()
{

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

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

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

@ -571,11 +571,24 @@ namespace ICSharpCode.SharpDevelop.Project @@ -571,11 +571,24 @@ namespace ICSharpCode.SharpDevelop.Project
if (folder.IdGuid == guid) {
folder.Parent.RemoveFolder(folder);
OnSolutionFolderRemoved(new SolutionFolderEventArgs(folder));
HandleRemovedSolutionFolder(folder);
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)
{
if (SolutionFolderRemoved != null) {

Loading…
Cancel
Save