From 57d8888947afdf93918aead5b2c55387fdb879fa Mon Sep 17 00:00:00 2001
From: Matt Ward <ward.matt@gmail.com>
Date: Thu, 17 May 2012 21:28:14 +0100
Subject: [PATCH] Fix WCFMetadata project item for Service References being
 added multiple times when adding a service reference.

---
 .../ProjectWithServiceReferences.cs           | 13 +++++++++---
 .../ProjectWithServiceReferencesTests.cs      | 20 +++++++++++++++++++
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
index 78dec9ce42..d28261fb3e 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
@@ -82,9 +82,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
 		
 		void AddServiceReferencesItemToProject()
 		{
-			var projectItem = new ServiceReferencesProjectItem(project);
-			projectItem.Include = "Service References";
-			AddProjectItemToProject(projectItem);
+			if (IsServiceReferencesItemMissingFromProject()) {
+				var projectItem = new ServiceReferencesProjectItem(project);
+				projectItem.Include = "Service References";
+				AddProjectItemToProject(projectItem);
+			}
+		}
+		
+		bool IsServiceReferencesItemMissingFromProject()
+		{
+			return project.GetItemsOfType(ItemType.ServiceReferences).Count() == 0;
 		}
 		
 		void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName)
diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
index de3917af7c..13a7b3604f 100644
--- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
@@ -63,6 +63,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
 			return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem;
 		}
 		
+		int GetHowManyWCFMetadataItemsInMSBuildProject()
+		{
+			return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).Count();
+		}
+		
 		ProjectItem GetFileProjectItemInMSBuildProject(string fileName)
 		{
 			return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName);
@@ -175,6 +180,21 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
 			Assert.AreEqual("Service References", item.Include);
 		}
 		
+		[Test]
+		public void AddServiceReferenceProxyFile_ProjectHasServiceReferences_WCFMetadataItemNotAddedToProjectForServiceReferencesRootFolder()
+		{
+			CreateProjectWithMSBuildProject();
+			var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" };
+			project.AddServiceReferenceProxyFile(proxyFileName);
+			proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service2" };
+			
+			project.AddServiceReferenceProxyFile(proxyFileName);
+			
+			int count = GetHowManyWCFMetadataItemsInMSBuildProject();
+			
+			Assert.AreEqual(1, count);
+		}
+		
 		[Test]
 		public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder()
 		{