Browse Source

Use project's root namespace when generating service reference proxy classes.

pull/6/merge
Matt Ward 14 years ago
parent
commit
4927a6edd9
  1. 7
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs
  2. 1
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
  3. 9
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
  4. 5
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
  5. 16
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs
  6. 18
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  7. 55
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

7
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs

@ -29,7 +29,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -29,7 +29,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
string waitMessage = "Please wait....";
string defaultNameSpace;
string serviceDescriptionMessage;
string namespacePrefix = String.Empty;
ObservableCollection<ImageAndDescription> twoValues;
@ -153,9 +152,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -153,9 +152,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
/// </summary>
string GetDefaultNamespace()
{
if (namespacePrefix.Length > 0 && discoveryUri != null) {
return String.Concat(namespacePrefix, ".", discoveryUri.Host);
} else if (discoveryUri != null) {
if (discoveryUri != null) {
return discoveryUri.Host;
}
return String.Empty;
@ -295,7 +292,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -295,7 +292,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
return;
try {
serviceGenerator.Options.Namespace = defaultNameSpace;
serviceGenerator.Options.ServiceName = defaultNameSpace;
serviceGenerator.Options.Url = uri.ToString();
serviceGenerator.AddServiceReference();
new RefreshProjectBrowser().Run();

1
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs

@ -11,6 +11,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -11,6 +11,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
string ServiceReferencesFolder { get; }
string Language { get; }
string RootNamespace { get; }
ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName);
ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName);

9
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs

@ -41,6 +41,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -41,6 +41,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
get { return project.Language; }
}
public string RootNamespace {
get {
if (project.RootNamespace != null) {
return project.RootNamespace;
}
return String.Empty;
}
}
public ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName)
{
return new ServiceReferenceFileName(ServiceReferencesFolder, serviceReferenceName);

5
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs

@ -65,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -65,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ServiceReferenceFileName GenerateProxyFile()
{
ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(fileGenerator.Options.Namespace);
ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(fileGenerator.Options.ServiceName);
CreateFolderForFileIfFolderMissing(referenceFileName.Path);
Options.OutputFileName = referenceFileName.Path;
@ -73,6 +73,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -73,6 +73,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
Options.NoAppConfig = false;
Options.MergeAppConfig = project.HasAppConfigFile();
Options.MapProjectLanguage(project.Language);
Options.GenerateNamespace(project.RootNamespace);
Options.AddProjectReferencesIfUsingTypesFromProjectReferences(project.GetReferences());
fileGenerator.GenerateProxyFile();
@ -81,7 +82,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -81,7 +82,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ServiceReferenceMapFileName CreateServiceReferenceMapFile()
{
ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(fileGenerator.Options.Namespace);
ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(fileGenerator.Options.ServiceName);
var mapFile = new ServiceReferenceMapFile(mapFileName);
fileGenerator.GenerateServiceReferenceMapFile(mapFile);
return mapFileName;

16
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
this.AppConfigFileName = String.Empty;
this.MergeAppConfig = false;
this.OutputFileName = String.Empty;
this.Namespace = String.Empty;
this.ServiceName = String.Empty;
this.Language = "CS";
this.NoAppConfig = true;
this.UseTypesInProjectReferences = true;
@ -33,6 +33,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -33,6 +33,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
this.DictionaryCollectionType = DictionaryCollectionTypes.Dictionary;
}
public string ServiceName { get; set; }
public string Namespace { get; set; }
public string OutputFileName { get; set; }
public string Url { get; set; }
@ -47,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -47,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public bool UseTypesInSpecifiedAssemblies { get; set; }
public CollectionTypes ArrayCollectionType { get; set; }
public DictionaryCollectionTypes DictionaryCollectionType { get; set; }
public void MapProjectLanguage(string language)
{
if (language == "VBNet") {
@ -64,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -64,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public ServiceReferenceGeneratorOptions Clone()
{
return new ServiceReferenceGeneratorOptions(this.assemblies) {
Namespace = this.Namespace,
ServiceName = this.ServiceName,
OutputFileName = this.OutputFileName,
Url = this.Url,
Language = this.Language,
@ -154,5 +155,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -154,5 +155,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
}
public void GenerateNamespace(string rootNamespace)
{
if (String.IsNullOrEmpty(rootNamespace)) {
Namespace = ServiceName;
} else {
Namespace = rootNamespace + "." + ServiceName;
}
}
}
}

18
src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs

@ -299,6 +299,24 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -299,6 +299,24 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual("VBNet", project.Language);
}
[Test]
public void RootNamespace_MSBuildProjectHasRootNamespace_RootNamespaceReturned()
{
CreateProjectWithMSBuildProject();
msbuildProject.RootNamespace = "Test";
Assert.AreEqual("Test", project.RootNamespace);
}
[Test]
public void RootNamespace_MSBuildProjectHasNullRootNamespace_EmptyStringReturned()
{
CreateProjectWithMSBuildProject();
msbuildProject.Name = null;
Assert.AreEqual(String.Empty, project.RootNamespace);
}
[Test]
public void AddAppConfigFile_ProjectHasNoAppConfig_ProjectItemAddedToProjectForAppConfig()
{

55
src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

@ -39,6 +39,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -39,6 +39,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
generator = new ServiceReferenceGenerator(fakeProject, fileGenerator, fakeFileSystem);
}
void SetProjectRootNamespace(string rootNamespace)
{
fakeProject.Stub(p => p.RootNamespace).Return(rootNamespace);
}
void SetServiceReferenceFileName(string serviceReferenceName, ServiceReferenceFileName fileName)
{
fakeProject.Stub(p => p.GetServiceReferenceFileName(serviceReferenceName)).Return(fileName);
@ -134,7 +139,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -134,7 +139,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
generator.Options.ServiceName = "MyServiceRef";
generator.AddServiceReference();
@ -147,7 +152,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -147,7 +152,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
generator.Options.ServiceName = "MyServiceRef";
generator.AddServiceReference();
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs";
@ -161,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -161,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyService1");
AddMapFileNameForServiceName("MyService1");
generator.Options.Namespace = "MyService1";
generator.Options.ServiceName = "MyService1";
generator.AddServiceReference();
@ -177,7 +182,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -177,7 +182,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
ServiceReferenceFileName expectedProxyFileName =
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
generator.Options.ServiceName = "MyServiceRef";
generator.AddServiceReference();
@ -190,7 +195,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -190,7 +195,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
AddMapFileNameForServiceName("MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
generator.Options.ServiceName = "MyServiceRef";
generator.AddServiceReference();
@ -203,7 +208,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -203,7 +208,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
generator.Options.ServiceName = "MyServiceRef";
generator.AddServiceReference();
@ -221,7 +226,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -221,7 +226,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
AddProxyFileNameForServiceName("MyServiceRef");
ServiceReferenceMapFileName expectedMapFileName =
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
generator.Options.ServiceName = "MyServiceRef";
generator.AddServiceReference();
@ -234,7 +239,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -234,7 +239,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
generator.AddServiceReference();
@ -247,7 +252,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -247,7 +252,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
fakeProject
.Stub(p => p.Save())
@ -262,9 +267,23 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -262,9 +267,23 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
ServiceReferenceMapFileName expectedMapFileName =
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Options.Namespace = "MyServiceRef";
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Options.ServiceName = "MyServiceRef";
SetProjectRootNamespace("Test");
generator.AddServiceReference();
Assert.AreEqual("Test.MyServiceRef", fakeProxyGenerator.Options.Namespace);
}
[Test]
public void AddServiceReference_ProjectHasNoRootNamespace_NamespaceSetOnProxyGeneratorMatchesServiceName()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Options.ServiceName = "MyServiceRef";
SetProjectRootNamespace(String.Empty);
generator.AddServiceReference();
@ -277,7 +296,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -277,7 +296,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
UseCSharpProject();
generator.AddServiceReference();
@ -291,7 +310,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -291,7 +310,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
UseVisualBasicProject();
generator.AddServiceReference();
@ -305,7 +324,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -305,7 +324,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
UseVisualBasicProject();
string expectedAppConfigFileName = @"d:\projects\MyProject\app.config";
SetProjectAppConfigFileName(expectedAppConfigFileName);
@ -325,7 +344,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -325,7 +344,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
UseVisualBasicProject();
string expectedAppConfigFileName = @"d:\projects\MyProject\app.config";
SetProjectAppConfigFileName(expectedAppConfigFileName);
@ -345,7 +364,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -345,7 +364,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
generator.Options.UseTypesInProjectReferences = true;
AddReferenceToProject("System.Windows.Forms");
@ -367,7 +386,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -367,7 +386,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
generator.Options.ServiceName = "MyService";
generator.Options.UseTypesInProjectReferences = false;
AddReferenceToProject("System.Windows.Forms");

Loading…
Cancel
Save