From 1229e35d23e360d1635f66555ef519626f1b8885 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 7 Apr 2013 14:09:48 +0200 Subject: [PATCH] Use class FileName for the ProjectItem.FileName property. --- .../Test/Helpers/TestableProject.cs | 6 ++--- .../Test/Src/MvcProjectFileTests.cs | 3 ++- .../Src/Refactoring/SearchForIssuesCommand.cs | 4 ++-- .../CppBinding/Project/CppProject.cs | 11 +++++----- .../ProjectConfigurationProjectItem.cs | 5 +++-- .../Project/Src/Project/WixProject.cs | 11 +++++----- .../Test/Project/WixInstallerPathTests.cs | 4 ++-- .../XamlBinding/XamlSymbolSearch.cs | 2 +- .../Project/Src/EnvDTE/Project.cs | 4 ++-- .../Project/Src/EnvDTE/ProjectItem.cs | 2 +- .../Project/Src/SharpDevelopProjectSystem.cs | 2 +- .../Src/EnvDTE/ProjectItemPropertyTests.cs | 2 +- .../Test/Src/EnvDTE/ProjectItemsTests.cs | 12 +++++----- .../Test/Src/EnvDTE/Reference3Tests.cs | 2 +- .../Test/Src/Helpers/ProjectHelper.cs | 2 +- .../Src/SharpDevelopProjectSystemTests.cs | 8 +++---- .../Test/Helpers/TestableFileProjectItem.cs | 7 +++--- ...TextTemplatingAssemblyPathResolverTests.cs | 2 +- .../ProjectWithServiceReferences.cs | 11 +++++----- .../ServiceReferenceMapFileProjectItem.cs | 3 ++- .../Commands/FolderNodeCommands.cs | 2 +- .../Project/Src/Project/AbstractProject.cs | 4 ++-- .../Project/Src/Project/CompilableProject.cs | 14 ++++++------ .../Base/Project/Src/Project/CustomTool.cs | 2 +- src/Main/Base/Project/Src/Project/IProject.cs | 2 +- .../Project/Items/ComReferenceProjectItem.cs | 17 +++++++------- .../Src/Project/Items/FileProjectItem.cs | 2 +- .../Project/Src/Project/Items/ProjectItem.cs | 10 ++++----- .../Src/Project/Items/ReferenceProjectItem.cs | 22 ++++++++++--------- .../Project/Src/Project/WebReferenceUrl.cs | 4 ++-- .../ServiceReferenceGeneratorTests.cs | 3 ++- .../Src/Services/FileUtility/DirectoryName.cs | 20 +++++++++++++++++ .../Build/MSBuildEngine/MSBuildEngine.cs | 4 ++-- src/Main/SharpDevelop/Project/Solution.cs | 2 +- 34 files changed, 119 insertions(+), 92 deletions(-) diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs index fa29fb0122..42b6f164b3 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs @@ -55,13 +55,13 @@ namespace AspNet.Mvc.Tests.Helpers public FileProjectItem AddFileToProject(string fileName) { var projectItem = new FileProjectItem(this, ItemType.Compile); - projectItem.FileName = fileName; + projectItem.FileName = FileName.Create(fileName); ProjectService.AddProjectItem(this, projectItem); return projectItem; } - public override string OutputAssemblyFullPath { - get { return outputAssemblyFullPath; } + public override FileName OutputAssemblyFullPath { + get { return FileName.Create(outputAssemblyFullPath); } } public void SetOutputAssemblyFullPath(string path) diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectFileTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectFileTests.cs index eb4e9e1a08..140c49b122 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectFileTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectFileTests.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.Core; using AspNet.Mvc.Tests.Helpers; using ICSharpCode.AspNet.Mvc; using ICSharpCode.SharpDevelop.Project; @@ -22,7 +23,7 @@ namespace AspNet.Mvc.Tests MvcProjectFile CreateProjectFile(string fullPath) { var projectItem = new FileProjectItem(project, ItemType.Compile); - projectItem.FileName = fullPath; + projectItem.FileName = FileName.Create(fullPath); file = new MvcProjectFile(projectItem); return file; } diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesCommand.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesCommand.cs index 6f97078e09..c6c14e194f 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesCommand.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesCommand.cs @@ -98,8 +98,8 @@ namespace CSharpBinding.Refactoring if (project == null) return Enumerable.Empty(); return from item in project.GetItemsOfType(ItemType.Compile) - where item.FileName.EndsWith(".cs", StringComparison.OrdinalIgnoreCase) - select FileName.Create(item.FileName); + where item.FileName.HasExtension(".cs") + select item.FileName; } Task SearchForIssuesAsync(List fileNames, IEnumerable providers, Action callback, IProgressMonitor monitor) diff --git a/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs b/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs index 5da2e8ade0..f5f8057d5c 100644 --- a/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs +++ b/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.CppBinding.Project // get { return LanguageProperties.; } // } - public override string OutputAssemblyFullPath + public override FileName OutputAssemblyFullPath { /// /// For vcxprojs the output assembly location is stored in OutDir property. @@ -61,19 +61,18 @@ namespace ICSharpCode.CppBinding.Project { string outputPath = GetEvaluatedProperty("OutDir") ?? ""; if (!Path.IsPathRooted(outputPath)) - return FileUtility.NormalizePath(Path.Combine(ParentSolution.Directory, outputPath, - AssemblyName + GetExtension(OutputType))); + return FileName.Create(Path.Combine(ParentSolution.Directory, outputPath, + AssemblyName + GetExtension(OutputType))); else { // this will be valid if there is an explicit OutDir property in vcxproj file. - if ((GetUnevalatedProperty("OutDir") ?? "").StartsWith("$(SolutionDir)")) - { + if ((GetUnevalatedProperty("OutDir") ?? "").StartsWith("$(SolutionDir)", StringComparison.OrdinalIgnoreCase)) { // in #D every project is compiled by msbuild separately, this mean that SolutionDir will // be equal to ProjectDir, so it has to be replaced with actual solution directory string evaluatedSolutionDir = GetEvaluatedProperty("SolutionDir") ?? ""; outputPath = Path.Combine(ParentSolution.Directory, outputPath.Substring(evaluatedSolutionDir.Length)); } - return FileUtility.NormalizePath(Path.Combine(outputPath, AssemblyName + GetExtension(OutputType))); + return FileName.Create(Path.Combine(outputPath, AssemblyName + GetExtension(OutputType))); } } } diff --git a/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ProjectConfigurationProjectItem.cs b/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ProjectConfigurationProjectItem.cs index 143bd67706..c908356f45 100644 --- a/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ProjectConfigurationProjectItem.cs +++ b/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ProjectConfigurationProjectItem.cs @@ -8,6 +8,7 @@ * Godzina: 18:52 * */ +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.CppBinding.Project @@ -26,11 +27,11 @@ namespace ICSharpCode.CppBinding.Project /// Returns an empty string as a filename. /// Project configuration is specific to the whole project, not a specific item. /// - public override string FileName + public override FileName FileName { get { - return ""; + return null; } } } diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs index 1f075f5677..55a163a150 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs @@ -8,6 +8,7 @@ using System.ComponentModel; using System.Diagnostics; using System.IO; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Project; @@ -77,13 +78,13 @@ namespace ICSharpCode.WixBinding /// Gets the full path to the installer file that will be generated by /// the Wix compiler and linker. /// - public string GetInstallerFullPath() + public FileName GetInstallerFullPath() { string outputPath = GetEvaluatedPropertyOrEmptyString("OutputPath"); string outputType = GetEvaluatedPropertyOrEmptyString("OutputType"); string outputName = GetEvaluatedPropertyOrEmptyString("OutputName"); string fileName = String.Concat(outputName, GetInstallerExtension(outputType)); - return Path.Combine(Directory, outputPath, fileName); + return Directory.CombineDirectory(outputPath).CombineFile(fileName); } string GetEvaluatedPropertyOrEmptyString(string propertyName) @@ -91,7 +92,7 @@ namespace ICSharpCode.WixBinding return GetEvaluatedProperty(propertyName) ?? String.Empty; } - public override string OutputAssemblyFullPath { + public override FileName OutputAssemblyFullPath { get { return GetInstallerFullPath(); } } @@ -108,7 +109,7 @@ namespace ICSharpCode.WixBinding public void AddWixLibrary(string fileName) { WixLibraryProjectItem projectItem = new WixLibraryProjectItem(this); - projectItem.FileName = fileName; + projectItem.FileName = FileName.Create(fileName); ProjectService.AddProjectItem(this, projectItem); } @@ -122,7 +123,7 @@ namespace ICSharpCode.WixBinding public void AddWixExtension(string fileName) { WixExtensionProjectItem projectItem = new WixExtensionProjectItem(this); - projectItem.FileName = fileName; + projectItem.FileName = FileName.Create(fileName); ProjectService.AddProjectItem(this, projectItem); } diff --git a/src/AddIns/BackendBindings/WixBinding/Test/Project/WixInstallerPathTests.cs b/src/AddIns/BackendBindings/WixBinding/Test/Project/WixInstallerPathTests.cs index 261a24fb0e..3587b07824 100644 --- a/src/AddIns/BackendBindings/WixBinding/Test/Project/WixInstallerPathTests.cs +++ b/src/AddIns/BackendBindings/WixBinding/Test/Project/WixInstallerPathTests.cs @@ -27,7 +27,7 @@ namespace WixBinding.Tests.Project { WixProject project = WixBindingTestsHelper.CreateEmptyWixProject(); - Assert.AreEqual(@"C:\Projects\Test\bin\Debug\Test.msi", project.GetInstallerFullPath()); + Assert.AreEqual(@"C:\Projects\Test\bin\Debug\Test.msi", project.GetInstallerFullPath().ToString()); } [Test] @@ -36,7 +36,7 @@ namespace WixBinding.Tests.Project WixProject project = WixBindingTestsHelper.CreateEmptyWixProject(); project.SetProperty("OutputName", "ChangedName"); - Assert.AreEqual(@"C:\Projects\Test\bin\Debug\ChangedName.msi", project.GetInstallerFullPath()); + Assert.AreEqual(@"C:\Projects\Test\bin\Debug\ChangedName.msi", project.GetInstallerFullPath().ToString()); } } } diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlSymbolSearch.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlSymbolSearch.cs index 5a735f0145..587d249e97 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlSymbolSearch.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlSymbolSearch.cs @@ -38,7 +38,7 @@ namespace ICSharpCode.XamlBinding this.entity = entity; compilation = SD.ParserService.GetCompilation(project); interestingFileNames = new List(); - foreach (var item in project.ParentSolution.Projects.SelectMany(p => p.Items).OfType().Where(i => i.FileName.EndsWith(".xaml", StringComparison.OrdinalIgnoreCase))) + foreach (var item in project.ParentSolution.Projects.SelectMany(p => p.Items).OfType().Where(i => i.FileName.HasExtension(".xaml"))) interestingFileNames.Add(new FileName(item.FileName)); workAmount = interestingFileNames.Count; workAmountInverse = 1.0 / workAmount; diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs index ea56d4b13c..24648fbf3a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs @@ -175,7 +175,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE internal ProjectItem AddFileProjectItemWithDependentUsingFullPath(string path, string dependentUpon) { FileProjectItem fileProjectItem = CreateFileProjectItemUsingFullPath(path); - fileProjectItem.FileName = path; + fileProjectItem.FileName = ICSharpCode.Core.FileName.Create(path); fileProjectItem.DependentUpon = dependentUpon; AddProjectItemToMSBuildProject(fileProjectItem); return new ProjectItem(this, fileProjectItem); @@ -277,7 +277,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE FileProjectItem CreateMSBuildProjectItemForDirectory(string directory) { return new FileProjectItem(MSBuildProject, ItemType.Folder) { - FileName = directory + FileName = ICSharpCode.Core.FileName.Create(directory) }; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs index 03e3b17d11..2110a0f7ec 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs @@ -94,7 +94,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE } else if (name == CustomToolPropertyName) { return projectItem.CustomTool; } else if (name == FullPathPropertyName) { - return projectItem.FileName; + return projectItem.FileName.ToString(); } return String.Empty; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs index 17fd2bcd92..2839256f64 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs @@ -226,7 +226,7 @@ namespace ICSharpCode.PackageManagement { ItemType itemType = project.GetDefaultItemType(path); var fileItem = new FileProjectItem(project, itemType); - fileItem.FileName = path; + fileItem.FileName = FileName.Create(path); fileItem.CustomTool = projectService.GetDefaultCustomToolForFileName(fileItem); return fileItem; } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemPropertyTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemPropertyTests.cs index 64cdbb3715..01c7852445 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemPropertyTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemPropertyTests.cs @@ -139,7 +139,7 @@ namespace PackageManagement.Tests.EnvDTE public void Value_GetFullPath_ReturnsProjectItemFullFileName() { CreateProjectItemProperties(); - msbuildFileProjectItem.FileName = @"d:\projects\test.cs"; + msbuildFileProjectItem.FileName = ICSharpCode.Core.FileName.Create(@"d:\projects\test.cs"); string path = properties.Item("FullPath").Value as string; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs index 8212e40c67..272169fca3 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs @@ -461,7 +461,7 @@ namespace PackageManagement.Tests.EnvDTE var fileItem = msbuildProject.Items.First() as FileProjectItem; Assert.AreEqual(@"tools\test.cs", fileItem.Include); - Assert.AreEqual(@"d:\projects\myproject\tools\test.cs", fileItem.FileName); + Assert.AreEqual(@"d:\projects\myproject\tools\test.cs", fileItem.FileName.ToString()); Assert.AreEqual(ItemType.Page, fileItem.ItemType); Assert.AreEqual(msbuildProject, fileItem.Project); } @@ -587,7 +587,7 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(@"tools\a.txt", item.Include); Assert.AreEqual(ItemType.None, item.ItemType); - Assert.AreEqual(@"d:\projects\myproject\tools\a.txt", item.FileName); + Assert.AreEqual(@"d:\projects\myproject\tools\a.txt", item.FileName.ToString()); Assert.AreEqual(1, msbuildProject.Items.Count); } @@ -638,7 +638,7 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(@"tools\packages", item.Include); Assert.AreEqual(ItemType.Folder, item.ItemType); - Assert.AreEqual(@"d:\projects\myproject\tools\packages", item.FileName); + Assert.AreEqual(@"d:\projects\myproject\tools\packages", item.FileName.ToString()); Assert.AreEqual(1, msbuildProject.Items.Count); } @@ -658,7 +658,7 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(@"tools\packages\a.txt", item.Include); Assert.AreEqual(ItemType.None, item.ItemType); - Assert.AreEqual(@"d:\projects\myproject\tools\packages\a.txt", item.FileName); + Assert.AreEqual(@"d:\projects\myproject\tools\packages\a.txt", item.FileName.ToString()); Assert.AreEqual(1, msbuildProject.Items.Count); } @@ -809,7 +809,7 @@ namespace PackageManagement.Tests.EnvDTE string linkName = fileItem.GetEvaluatedMetadata("Link"); Assert.AreEqual(@"..\anotherproject\test.cs", fileItem.Include); - Assert.AreEqual(fileName, fileItem.FileName); + Assert.AreEqual(fileName, fileItem.FileName.ToString()); Assert.AreEqual(ItemType.Page, fileItem.ItemType); Assert.IsTrue(fileItem.IsLink); Assert.AreEqual("test.cs", linkName); @@ -853,7 +853,7 @@ namespace PackageManagement.Tests.EnvDTE FileProjectItem fileItem = msbuildProject.FindFile(new FileName(fileName)); Assert.AreEqual("MainForm.Designer.cs", fileItem.Include); - Assert.AreEqual(fileName, fileItem.FileName); + Assert.AreEqual(fileName, fileItem.FileName.ToString()); Assert.AreEqual(ItemType.Page, fileItem.ItemType); Assert.AreEqual(msbuildProject, fileItem.Project); Assert.AreEqual("MainForm.cs", fileItem.DependentUpon); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/Reference3Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/Reference3Tests.cs index 52b6718581..a05c791c99 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/Reference3Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/Reference3Tests.cs @@ -124,7 +124,7 @@ namespace PackageManagement.Tests.EnvDTE public void Path_SystemXmlReferenceInProjectReferences_ReturnsFullPathToSystemXml() { CreateReference("System.Xml"); - referenceProjectItem.FileName = @"c:\Program Files\Microsoft\Reference Assemblies\v4\System.Xml.dll"; + referenceProjectItem.FileName = FileName.Create(@"c:\Program Files\Microsoft\Reference Assemblies\v4\System.Xml.dll"); string path = reference.Path; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs index 92330a124a..260f5f2a24 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs @@ -86,7 +86,7 @@ namespace PackageManagement.Tests.Helpers public static void AddFile(MSBuildBasedProject project, string fileName) { var fileProjectItem = new FileProjectItem(project, ItemType.Compile); - fileProjectItem.FileName = fileName; + fileProjectItem.FileName = FileName.Create(fileName); ProjectService.AddProjectItem(project, fileProjectItem); } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs index a670319b8c..cbc97d84e4 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs @@ -476,7 +476,7 @@ namespace PackageManagement.Tests FileProjectItem fileItem = ProjectHelper.GetFile(project, fileName); FileProjectItem expectedFileItem = new FileProjectItem(project, ItemType.Compile); - expectedFileItem.FileName = fileName; + expectedFileItem.FileName = FileName.Create(fileName); FileProjectItemAssert.AreEqual(expectedFileItem, fileItem); } @@ -493,7 +493,7 @@ namespace PackageManagement.Tests FileProjectItem fileItem = ProjectHelper.GetFile(project, fileName); FileProjectItem expectedFileItem = new FileProjectItem(project, ItemType.EmbeddedResource); - expectedFileItem.FileName = fileName; + expectedFileItem.FileName = FileName.Create(fileName); FileProjectItemAssert.AreEqual(expectedFileItem, fileItem); } @@ -511,7 +511,7 @@ namespace PackageManagement.Tests FileProjectItem fileItem = ProjectHelper.GetFile(project, fileName); FileProjectItem expectedFileItem = new FileProjectItem(project, ItemType.Compile); - expectedFileItem.FileName = fileName; + expectedFileItem.FileName = FileName.Create(fileName); FileProjectItemAssert.AreEqual(expectedFileItem, fileItem); } @@ -529,7 +529,7 @@ namespace PackageManagement.Tests FileProjectItem fileItem = ProjectHelper.GetFile(project, fileName); FileProjectItem expectedFileItem = new FileProjectItem(project, ItemType.Compile); - expectedFileItem.FileName = fileName; + expectedFileItem.FileName = FileName.Create(fileName); FileProjectItemAssert.AreEqual(expectedFileItem, fileItem); } diff --git a/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableFileProjectItem.cs b/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableFileProjectItem.cs index 595b49ffb7..8510cc89cb 100644 --- a/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableFileProjectItem.cs +++ b/src/AddIns/Misc/TextTemplating/Test/Helpers/TestableFileProjectItem.cs @@ -2,13 +2,14 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; namespace TextTemplating.Tests.Helpers { public class TestableFileProjectItem : FileProjectItem { - string fileName; + FileName fileName; public TestableProject TestableProject; @@ -21,10 +22,10 @@ namespace TextTemplating.Tests.Helpers : base(project, ItemType.None) { this.TestableProject = project; - this.fileName = fileName; + this.fileName = FileName.Create(fileName); } - public override string FileName { + public override FileName FileName { get { return fileName; } set { fileName = value; } } diff --git a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingAssemblyPathResolverTests.cs b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingAssemblyPathResolverTests.cs index 47466354c9..c28f428e6d 100644 --- a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingAssemblyPathResolverTests.cs +++ b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingAssemblyPathResolverTests.cs @@ -108,7 +108,7 @@ namespace TextTemplating.Tests CreateResolver(); ReferenceProjectItem reference = AddReferenceToProject("Test"); string expectedFileName = @"d:\projects\MyProject\lib\Test.dll"; - reference.FileName = expectedFileName; + reference.FileName = FileName.Create(expectedFileName); string result = resolver.ResolvePath("Test"); 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 d28261fb3e..eeec489ffc 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 @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -70,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference void AddServiceReferenceFileToProject(ServiceReferenceFileName fileName) { var projectItem = new FileProjectItem(project, ItemType.Compile); - projectItem.FileName = fileName.Path; + projectItem.FileName = FileName.Create(fileName.Path); projectItem.DependentUpon = "Reference.svcmap"; AddProjectItemToProject(projectItem); } @@ -169,16 +170,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference AddProjectItemToProject(item); } - string GetDefaultAppConfigFileName() + FileName GetDefaultAppConfigFileName() { - return Path.Combine(project.Directory, "app.config"); + return project.Directory.CombineFile("app.config"); } public IEnumerable GetReferences() { - foreach (ReferenceProjectItem item in project.GetItemsOfType(ItemType.Reference)) { - yield return item; - } + return project.GetItemsOfType(ItemType.Reference).OfType(); } } } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs index 86e5458e6d..0792667b6c 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs @@ -3,6 +3,7 @@ using System; using ICSharpCode.SharpDevelop.Project; +using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference { @@ -13,7 +14,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference string fileName) : base(project, ItemType.None) { - this.FileName = fileName; + this.FileName = FileName.Create(fileName); AddMetadata(); } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs index 9c718b57fc..19de1fffcd 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs @@ -81,7 +81,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands LoggingService.Debug("Found file " + virtualFullName); FileProjectItem newItem = new FileProjectItem(node.Project, fileItem.ItemType); if (FileUtility.IsBaseDirectory(directoryName, fileItem.FileName)) { - newItem.FileName = FileUtility.RenameBaseDirectory(fileItem.FileName, directoryName, copiedFileName); + newItem.FileName = FileName.Create(FileUtility.RenameBaseDirectory(fileItem.FileName, directoryName, copiedFileName)); } else { newItem.FileName = fileItem.FileName; } diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 7f63788fdb..93653cd9cb 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -357,7 +357,7 @@ namespace ICSharpCode.SharpDevelop.Project /// Returns null when the project does not output any assembly. /// [Browsable(false)] - public virtual string OutputAssemblyFullPath { + public virtual FileName OutputAssemblyFullPath { get { return null; } @@ -528,7 +528,7 @@ namespace ICSharpCode.SharpDevelop.Project } } if (!mscorlib) { - referenceItems.Add(new ReferenceProjectItem(this, "mscorlib") { FileName = typeof(object).Module.FullyQualifiedName }); + referenceItems.Add(new ReferenceProjectItem(this, "mscorlib") { FileName = FileName.Create(typeof(object).Module.FullyQualifiedName) }); } return referenceItems; } diff --git a/src/Main/Base/Project/Src/Project/CompilableProject.cs b/src/Main/Base/Project/Src/Project/CompilableProject.cs index 3c2579e16f..ae5645d4f9 100644 --- a/src/Main/Base/Project/Src/Project/CompilableProject.cs +++ b/src/Main/Base/Project/Src/Project/CompilableProject.cs @@ -111,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Project /// Gets the path where temporary files are written to during compilation. /// [Browsable(false)] - public string IntermediateOutputFullPath { + public DirectoryName IntermediateOutputFullPath { get { string outputPath = GetEvaluatedProperty("IntermediateOutputPath"); if (string.IsNullOrEmpty(outputPath)) { @@ -121,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Project } outputPath = Path.Combine(outputPath, this.ActiveConfiguration.Configuration); } - return Path.Combine(Directory, outputPath); + return Directory.CombineDirectory(outputPath); } } @@ -170,22 +170,22 @@ namespace ICSharpCode.SharpDevelop.Project /// /// The full path of the assembly generated by the project. /// - public override string OutputAssemblyFullPath { + public override FileName OutputAssemblyFullPath { get { string outputPath = GetEvaluatedProperty("OutputPath") ?? ""; - return FileUtility.NormalizePath(Path.Combine(Path.Combine(Directory, outputPath), AssemblyName + GetExtension(OutputType))); + return Directory.CombineDirectory(outputPath).CombineFile(AssemblyName + GetExtension(OutputType)); } } /// /// The full path of the folder where the project's primary output files go. /// - public string OutputFullPath { + public DirectoryName OutputFullPath { get { string outputPath = GetEvaluatedProperty("OutputPath"); - // FileUtility.NormalizePath() cleans up any back references. + // CombineDirectory() cleans up any back references. // e.g. C:\windows\system32\..\system becomes C:\windows\system - return FileUtility.NormalizePath(Path.Combine(Directory, outputPath)); + return Directory.CombineDirectory(outputPath); } } diff --git a/src/Main/Base/Project/Src/Project/CustomTool.cs b/src/Main/Base/Project/Src/Project/CustomTool.cs index 691dbafde6..f3210f690a 100644 --- a/src/Main/Base/Project/Src/Project/CustomTool.cs +++ b/src/Main/Base/Project/Src/Project/CustomTool.cs @@ -173,7 +173,7 @@ namespace ICSharpCode.SharpDevelop.Project FileProjectItem outputItem = project.FindFile(FileName.Create(outputFileName)); if (outputItem == null) { outputItem = new FileProjectItem(project, ItemType.Compile); - outputItem.FileName = outputFileName; + outputItem.FileName = FileName.Create(outputFileName); outputItem.DependentUpon = Path.GetFileName(baseItem.FileName); outputItem.SetEvaluatedMetadata("AutoGen", "True"); ProjectService.AddProjectItem(project, outputItem); diff --git a/src/Main/Base/Project/Src/Project/IProject.cs b/src/Main/Base/Project/Src/Project/IProject.cs index 75c6c128e4..11f9e26f79 100644 --- a/src/Main/Base/Project/Src/Project/IProject.cs +++ b/src/Main/Base/Project/Src/Project/IProject.cs @@ -124,7 +124,7 @@ namespace ICSharpCode.SharpDevelop.Project /// Gets the full path of the output assembly. /// Returns null when the project does not output any assembly. /// - string OutputAssemblyFullPath { + FileName OutputAssemblyFullPath { get; } diff --git a/src/Main/Base/Project/Src/Project/Items/ComReferenceProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ComReferenceProjectItem.cs index 93c9a2f801..d6fabd2afe 100644 --- a/src/Main/Base/Project/Src/Project/Items/ComReferenceProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/ComReferenceProjectItem.cs @@ -4,6 +4,7 @@ using System; using System.ComponentModel; using System.IO; +using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Project { @@ -93,12 +94,12 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Gets the file name of the COM interop assembly. /// - public override string FileName { + public override FileName FileName { get { try { if (Project != null && Project.OutputAssemblyFullPath != null) { - string outputFolder = Path.GetDirectoryName(Project.OutputAssemblyFullPath); - string interopFileName = Path.Combine(outputFolder, String.Concat("Interop.", Include, ".dll")); + DirectoryName outputFolder = Project.OutputAssemblyFullPath.GetParentDirectory(); + FileName interopFileName = outputFolder.CombineFile("Interop." + Include + ".dll"); if (File.Exists(interopFileName)) { return interopFileName; } @@ -111,7 +112,7 @@ namespace ICSharpCode.SharpDevelop.Project // look in obj\Debug: if (Project is CompilableProject) { outputFolder = (Project as CompilableProject).IntermediateOutputFullPath; - interopFileName = Path.Combine(outputFolder, String.Concat("Interop.", Include, ".dll")); + interopFileName = outputFolder.CombineFile("Interop." + Include + ".dll"); if (File.Exists(interopFileName)) { return interopFileName; } @@ -124,16 +125,16 @@ namespace ICSharpCode.SharpDevelop.Project } } catch (Exception) { } - return Include; + return FileName.Create(Include); } set { } } - static string GetActiveXInteropFileName(string outputFolder, string include) + static FileName GetActiveXInteropFileName(DirectoryName outputFolder, string include) { - if (include.ToLowerInvariant().StartsWith("ax")) { - return Path.Combine(outputFolder, String.Concat("AxInterop.", include.Substring(2), ".dll")); + if (include.StartsWith("ax", StringComparison.OrdinalIgnoreCase)) { + return outputFolder.CombineFile(String.Concat("AxInterop.", include.Substring(2), ".dll")); } return null; } diff --git a/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs index a4e965b55c..f63bbf9cf6 100644 --- a/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs @@ -62,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Project Description = "${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectFile.FileName.Description}")] [Browsable(true)] [ReadOnly(true)] - public override string FileName { + public override FileName FileName { get { return base.FileName; } set { base.FileName = value; } } diff --git a/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs index f21002dbdb..75d6cd981a 100644 --- a/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs @@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Project public abstract class ProjectItem : LocalizedObject, IDisposable, ICloneable { IProject project; - volatile string fileNameCache; + volatile FileName fileNameCache; bool treatIncludeAsLiteral; // either use: (bound mode) @@ -414,15 +414,15 @@ namespace ICSharpCode.SharpDevelop.Project /// and the setter throws a NotSupportedException. /// [Browsable(false)] - public virtual string FileName { + public virtual FileName FileName { get { if (project == null) { - return this.Include; + return FileName.Create(this.Include); } - string fileName = this.fileNameCache; + FileName fileName = this.fileNameCache; if (fileName == null) { lock (SyncRoot) { - fileName = FileUtility.NormalizePath(Path.Combine(project.Directory, this.Include)); + fileName = project.Directory.CombineFile(this.Include); fileNameCache = fileName; } } diff --git a/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs index 333de83089..8be560e07f 100644 --- a/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs @@ -169,36 +169,38 @@ namespace ICSharpCode.SharpDevelop.Project set { redist = value; } } - string fullPath; + FileName fullPath; [ReadOnly(true)] [Browsable(true)] - public override string FileName { + public override FileName FileName { get { if (fullPath != null) { return fullPath; } if (Project != null) { - string projectDir = Project.Directory; + DirectoryName projectDir = Project.Directory; string hintPath = HintPath; try { if (hintPath != null && hintPath.Length > 0) { - return FileUtility.NormalizePath(Path.Combine(projectDir, hintPath)); + return projectDir.CombineFile(hintPath); } - string name = FileUtility.NormalizePath(Path.Combine(projectDir, Include)); + FileName name = projectDir.CombineFile(Include); if (File.Exists(name)) { return name; } - if (File.Exists(name + ".dll")) { - return name + ".dll"; + name = projectDir.CombineFile(Include + ".dll"); + if (File.Exists(name)) { + return name; } - if (File.Exists(name + ".exe")) { - return name + ".exe"; + name = projectDir.CombineFile(Include + ".exe"); + if (File.Exists(name)) { + return name; } } catch {} // ignore errors when path is invalid } - return Include; + return FileName.Create(Include); } set { fullPath = value; diff --git a/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs b/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs index 9e43b53804..a1fc0ffb76 100644 --- a/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs +++ b/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs @@ -100,10 +100,10 @@ namespace ICSharpCode.SharpDevelop.Project } } - public override string FileName { + public override FileName FileName { get { if (Project != null && RelPath != null) { - return Path.Combine(Project.Directory, RelPath.Trim('\\')); + return FileName.Create(Path.Combine(Project.Directory, RelPath.Trim('\\'))); } return null; } diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs index b8e82a3d23..f7279a0afd 100644 --- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Description; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; using ICSharpCode.SharpDevelop.Project; using NUnit.Framework; @@ -130,7 +131,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences IProject dummyProject = MockRepository.GenerateStub(); dummyProject.Stub(p => p.SyncRoot).Return(new object()); var projectItem = new ReferenceProjectItem(dummyProject, reference); - projectItem.FileName = fileName; + projectItem.FileName = FileName.Create(fileName); projectReferences.Add(projectItem); return projectItem; } diff --git a/src/Main/Core/Project/Src/Services/FileUtility/DirectoryName.cs b/src/Main/Core/Project/Src/Services/FileUtility/DirectoryName.cs index c8987216f7..d46ee50f86 100644 --- a/src/Main/Core/Project/Src/Services/FileUtility/DirectoryName.cs +++ b/src/Main/Core/Project/Src/Services/FileUtility/DirectoryName.cs @@ -64,6 +64,26 @@ namespace ICSharpCode.Core return FileName.Create(Path.Combine(normalizedPath, relativePath)); } + /// + /// Combines this directory name with a relative path. + /// + public FileName CombineFile(string relativeFileName) + { + if (relativeFileName == null) + return null; + return FileName.Create(Path.Combine(normalizedPath, relativeFileName)); + } + + /// + /// Combines this directory name with a relative path. + /// + public DirectoryName CombineDirectory(string relativeDirectoryName) + { + if (relativeDirectoryName == null) + return null; + return DirectoryName.Create(Path.Combine(normalizedPath, relativeDirectoryName)); + } + /// /// Converts the specified absolute path into a relative path (relative to this). /// diff --git a/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngine.cs b/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngine.cs index 2de6728f82..cb32bbd5d9 100644 --- a/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngine.cs +++ b/src/Main/SharpDevelop/Project/Build/MSBuildEngine/MSBuildEngine.cs @@ -172,7 +172,7 @@ namespace ICSharpCode.SharpDevelop.Project //LoggingService.Debug("Got information about " + assembly.OriginalInclude + "; fullpath=" + assembly.FullPath); foreach (var referenceItem in assembly.ReferenceItems) { referenceItem.AssemblyName = assembly.AssemblyName; - referenceItem.FileName = assembly.FullPath; + referenceItem.FileName = FileName.Create(assembly.FullPath); referenceItem.Redist = assembly.Redist; referenceItem.DefaultCopyLocalValue = assembly.CopyLocal; handledReferenceItems.Add(referenceItem); @@ -181,7 +181,7 @@ namespace ICSharpCode.SharpDevelop.Project if (firstItem != null) { resolvedAssemblies.Add(firstItem); } else { - resolvedAssemblies.Add(new ReferenceProjectItem(baseProject, assembly.OriginalInclude) { FileName = assembly.FullPath }); + resolvedAssemblies.Add(new ReferenceProjectItem(baseProject, assembly.OriginalInclude) { FileName = FileName.Create(assembly.FullPath) }); } } // Add any assemblies that weren't resolved yet. This is important - for example, this adds back project references. diff --git a/src/Main/SharpDevelop/Project/Solution.cs b/src/Main/SharpDevelop/Project/Solution.cs index 644cc2d6f8..02ad87ba6d 100644 --- a/src/Main/SharpDevelop/Project/Solution.cs +++ b/src/Main/SharpDevelop/Project/Solution.cs @@ -355,7 +355,7 @@ namespace ICSharpCode.SharpDevelop.Project foreach (ProjectItem item in project.Items) { if (FileUtility.IsBaseDirectory(oldName, item.FileName)) { SD.GetRequiredService().RaiseProjectItemRemoved(new ProjectItemEventArgs(project, item)); - item.FileName = FileUtility.RenameBaseDirectory(item.FileName, oldName, newName); + item.FileName = FileName.Create(FileUtility.RenameBaseDirectory(item.FileName, oldName, newName)); SD.GetRequiredService().RaiseProjectItemAdded(new ProjectItemEventArgs(project, item)); } }