From f91811fe97c48571db90cb2173b9c55a5a687f8d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 28 Apr 2006 16:16:01 +0000 Subject: [PATCH] Fixed SD2-524: Wildcards in MSBuild custom items are not interpreted git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1360 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Project/Items/FileProjectItem.cs | 8 +++++++ .../Src/Project/Items/ImportProjectItem.cs | 8 +++++++ .../Project/Src/Project/Items/ProjectItem.cs | 13 +++++++++++- .../Src/Project/Items/ReferenceProjectItem.cs | 8 +++++++ .../Src/Project/Items/UnknownProjectItem.cs | 10 ++++++++- .../Project/Src/Project/MSBuildProject.cs | 21 +++++++++++++++++++ .../Project/Src/Project/WebReferenceUrl.cs | 8 +++++++ 7 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs index 2f81150bbc..8616ccdecb 100644 --- a/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/FileProjectItem.cs @@ -131,5 +131,13 @@ namespace ICSharpCode.SharpDevelop.Project { this.type = type; } + + public override ProjectItem Clone() + { + ProjectItem n = new FileProjectItem(this.Project, this.ItemType); + n.Include = this.Include; + this.CopyExtraPropertiesTo(n); + return n; + } } } diff --git a/src/Main/Base/Project/Src/Project/Items/ImportProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ImportProjectItem.cs index 73fad4724e..395eb31bd8 100644 --- a/src/Main/Base/Project/Src/Project/Items/ImportProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/ImportProjectItem.cs @@ -23,5 +23,13 @@ namespace ICSharpCode.SharpDevelop.Project return ItemType.Import; } } + + public override ProjectItem Clone() + { + ImportProjectItem n = new ImportProjectItem(this.Project); + n.Include = this.Include; + this.CopyExtraPropertiesTo(n); + return n; + } } } diff --git a/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs index dcef5205d6..10d82d0481 100644 --- a/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/ProjectItem.cs @@ -42,7 +42,7 @@ namespace ICSharpCode.SharpDevelop.Project BootstrapperFile } - public abstract class ProjectItem : LocalizedObject, IDisposable + public abstract class ProjectItem : LocalizedObject, IDisposable, ICloneable { string include; PropertyGroup properties = new PropertyGroup(); @@ -82,6 +82,17 @@ namespace ICSharpCode.SharpDevelop.Project item.Include = newInclude; } + public virtual ProjectItem Clone() + { + // TODO: Make me abstract in SD 2.1 + throw new NotSupportedException(); + } + + object ICloneable.Clone() + { + return this.Clone(); + } + [Browsable(false)] public PropertyGroup Properties { get { diff --git a/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs index 1a38678340..aa7a684017 100644 --- a/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs @@ -169,5 +169,13 @@ namespace ICSharpCode.SharpDevelop.Project return null; } + + public override ProjectItem Clone() + { + ProjectItem n = new ReferenceProjectItem(this.Project); + n.Include = this.Include; + this.CopyExtraPropertiesTo(n); + return n; + } } } diff --git a/src/Main/Base/Project/Src/Project/Items/UnknownProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/UnknownProjectItem.cs index b8a2fd0731..f86b70b8a2 100644 --- a/src/Main/Base/Project/Src/Project/Items/UnknownProjectItem.cs +++ b/src/Main/Base/Project/Src/Project/Items/UnknownProjectItem.cs @@ -13,7 +13,7 @@ using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Project { /// - /// Description of ReferenceProjectItem. + /// A project item whose type is not known by SharpDevelop. /// public class UnknownProjectItem : ProjectItem { @@ -35,5 +35,13 @@ namespace ICSharpCode.SharpDevelop.Project { this.tag = tag; } + + public override ProjectItem Clone() + { + ProjectItem n = new UnknownProjectItem(this.Project, this.Tag); + n.Include = this.Include; + this.CopyExtraPropertiesTo(n); + return n; + } } } diff --git a/src/Main/Base/Project/Src/Project/MSBuildProject.cs b/src/Main/Base/Project/Src/Project/MSBuildProject.cs index 5da0187849..b14eb99f7d 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildProject.cs @@ -117,6 +117,7 @@ namespace ICSharpCode.SharpDevelop.Project } } } + ExpandWildcards(); string userSettingsFileName = projectFileName + ".user"; if (File.Exists(userSettingsFileName)) { @@ -139,6 +140,26 @@ namespace ICSharpCode.SharpDevelop.Project } } + void ExpandWildcards() + { + for (int i = 0; i < items.Count; i++) { + ProjectItem item = items[i]; + if (item.Include.IndexOf('*') >= 0 && item is FileProjectItem) { + items.RemoveAt(i--); + try { + string path = Path.Combine(this.Directory, Path.GetDirectoryName(item.Include)); + foreach (string file in System.IO.Directory.GetFiles(path, Path.GetFileName(item.Include))) { + ProjectItem n = item.Clone(); + n.Include = FileUtility.GetRelativePath(this.Directory, file); + items.Insert(++i, n); + } + } catch (Exception ex) { + MessageService.ShowError(ex, "Error expanding wildcards in " + item.Include); + } + } + } + } + void LoadPropertyGroup(XmlReader reader, bool isUserFile) { string condition = reader.GetAttribute("Condition"); diff --git a/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs b/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs index 91ec5dafd6..1d9058aad6 100644 --- a/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs +++ b/src/Main/Base/Project/Src/Project/WebReferenceUrl.cs @@ -116,5 +116,13 @@ namespace ICSharpCode.SharpDevelop.Project { UrlBehavior = "Static"; } + + public override ProjectItem Clone() + { + ProjectItem n = new WebReferenceUrl(this.Project); + n.Include = this.Include; + this.CopyExtraPropertiesTo(n); + return n; + } } }