Browse Source

Fix SD2-1587 - Duplicate sections added to solution file on each save

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4882 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
85c0da5716
  1. 2
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs
  2. 26
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  3. 10
      src/Main/Base/Project/Src/Project/Solution/SolutionFolder.cs

2
src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs

@ -672,7 +672,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -672,7 +672,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
case OverloadableOperatorType.UnaryPlus:
return "op_UnaryPlus";
default:
throw new NotSupportedException();
return "op_unknown";
}
}
}

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

@ -39,6 +39,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -39,6 +39,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>contains &lt;GUID, (IProject/ISolutionFolder)&gt; pairs.</summary>
Dictionary<string, ISolutionFolder> guidDictionary = new Dictionary<string, ISolutionFolder>();
bool isLoading;
string fileName = String.Empty;
MSBuild.Engine buildEngine = MSBuildInternals.CreateEngine();
@ -250,10 +251,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -250,10 +251,11 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public override void AddFolder(ISolutionFolder folder)
internal void BeforeAddFolderToSolution(ISolutionFolder folder)
{
IProject project = folder as IProject;
if (project != null) {
if (project != null && !isLoading) {
// HACK: don't deal with configurations during loading
if (this.GetConfigurationNames().Count == 0) {
foreach (string config in project.ConfigurationNames) {
foreach (string platform in project.PlatformNames)
@ -261,9 +263,18 @@ namespace ICSharpCode.SharpDevelop.Project @@ -261,9 +263,18 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
}
}
public override void AddFolder(ISolutionFolder folder)
{
base.AddFolder(folder);
guidDictionary[folder.IdGuid] = folder;
if (project != null) {
}
internal void AfterAddFolderToSolution(ISolutionFolder folder)
{
IProject project = folder as IProject;
if (project != null && !isLoading) {
var projectConfigurations = project.ConfigurationNames;
var solutionConfigurations = this.GetConfigurationNames();
var projectPlatforms = project.PlatformNames;
@ -1189,8 +1200,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1189,8 +1200,13 @@ namespace ICSharpCode.SharpDevelop.Project
}
} else {
newSolution.fileName = fileName;
if (!SetupSolution(newSolution)) {
return null;
newSolution.isLoading = true;
try {
if (!SetupSolution(newSolution)) {
return null;
}
} finally {
newSolution.isLoading = false;
}
}

10
src/Main/Base/Project/Src/Project/Solution/SolutionFolder.cs

@ -83,11 +83,21 @@ namespace ICSharpCode.SharpDevelop.Project @@ -83,11 +83,21 @@ namespace ICSharpCode.SharpDevelop.Project
folder.IdGuid = Guid.NewGuid().ToString().ToUpperInvariant();
}
bool isNew = false;
if (folder.Parent != null) {
folder.Parent.RemoveFolder(folder);
} else {
// this is a new project/solution folder
isNew = true;
}
if (isNew) {
this.ParentSolution.BeforeAddFolderToSolution(folder);
}
folder.Parent = this;
Folders.Add(folder);
if (isNew) {
this.ParentSolution.AfterAddFolderToSolution(folder);
}
}
public virtual void RemoveFolder(ISolutionFolder folder)

Loading…
Cancel
Save