diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs index 23fa943a2a832..256cfd3ed9864 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs @@ -32,7 +32,6 @@ using System.Collections.Specialized; using System.IO; using Microsoft.Build.Framework; -using Mono.XBuild.Utilities; namespace Microsoft.Build.Utilities { @@ -40,7 +39,20 @@ public sealed class TaskItem : MarshalByRefObject, ITaskItem { IDictionary metadata; string itemSpec; + static string[] reservedMetadataNames; + static Hashtable reservedMetadataHash; + static TaskItem () + { + reservedMetadataNames = new string [] { + "FullPath", "RootDir", "Filename", "Extension", "RelativeDir", "Directory", + "RecursiveDir", "Identity", "ModifiedTime", "CreatedTime", "AccessedTime"}; + reservedMetadataHash = CollectionsUtil.CreateCaseInsensitiveHashtable (ReservedMetadataNameCount); + foreach (string s in reservedMetadataNames) { + reservedMetadataHash.Add (s, null); + } + } + public TaskItem () { this.itemSpec = String.Empty; @@ -77,6 +89,69 @@ public TaskItem (string itemSpec, IDictionary itemMetadata) this.metadata = CollectionsUtil.CreateCaseInsensitiveHashtable (itemMetadata); } + public static ICollection ReservedMetadataNames { + get { + return (ICollection) reservedMetadataNames.Clone (); + } + } + + public static int ReservedMetadataNameCount { + get { + return reservedMetadataNames.Length; + } + } + + public static bool IsReservedMetadataName (string metadataName) + { + return reservedMetadataHash.Contains (metadataName.ToLower ()); + } + + public static string GetReservedMetadata (string itemSpec, string metadataName) + { + switch (metadataName.ToLower ()) { + case "fullpath": + return Path.GetFullPath (itemSpec); + case "rootdir": + return Path.GetPathRoot (itemSpec); + case "filename": + return Path.GetFileNameWithoutExtension (itemSpec); + case "extension": + return Path.GetExtension (itemSpec); + case "relativedir": + return Path.GetDirectoryName (itemSpec); + case "directory": + return Path.GetDirectoryName (Path.GetFullPath (itemSpec)); + case "recursivedir": + // FIXME: how to handle this? + return ""; + case "identity": + return Path.Combine (Path.GetDirectoryName (itemSpec), Path.GetFileName (itemSpec)); + case "modifiedtime": + if (File.Exists (itemSpec)) + return File.GetLastWriteTime (itemSpec).ToString (); + else if (Directory.Exists (itemSpec)) + return Directory.GetLastWriteTime (itemSpec).ToString (); + else + return String.Empty; + case "createdtime": + if (File.Exists (itemSpec)) + return File.GetCreationTime (itemSpec).ToString (); + else if (Directory.Exists (itemSpec)) + return Directory.GetCreationTime (itemSpec).ToString (); + else + return String.Empty; + case "accessedtime": + if (File.Exists (itemSpec)) + return File.GetLastAccessTime (itemSpec).ToString (); + else if (Directory.Exists (itemSpec)) + return Directory.GetLastAccessTime (itemSpec).ToString (); + else + return String.Empty; + default: + throw new ArgumentException ("Invalid reserved metadata name"); + } + } + public IDictionary CloneCustomMetadata () { IDictionary clonedMetadata = CollectionsUtil.CreateCaseInsensitiveHashtable (); @@ -101,8 +176,8 @@ public void CopyMetadataTo (ITaskItem destinationItem) public string GetMetadata (string metadataName) { - if (ReservedNameUtils.IsReservedMetadataName (metadataName)) - return ReservedNameUtils.GetReservedMetadata (ItemSpec, metadataName); + if (IsReservedMetadataName (metadataName)) + return GetReservedMetadata (ItemSpec, metadataName); else if (metadata.Contains (metadataName)) return (string) metadata [metadataName]; else @@ -118,7 +193,7 @@ public void RemoveMetadata (string metadataName) { if (metadataName == null) throw new ArgumentNullException ("metadataName"); - if (ReservedNameUtils.IsReservedMetadataName (metadataName)) + if (IsReservedMetadataName (metadataName)) throw new ArgumentException ("Can't remove reserved metadata"); if (metadata.Contains (metadataName)) metadata.Remove (metadataName); @@ -130,7 +205,7 @@ public void SetMetadata (string metadataName, string metadataValue) throw new ArgumentNullException ("metadataName"); if (metadataValue == null) throw new ArgumentNullException ("metadataValue"); - if (ReservedNameUtils.IsReservedMetadataName (metadataName)) + if (IsReservedMetadataName (metadataName)) throw new ArgumentException ("Can't modify reserved metadata"); if (metadata.Contains (metadataName)) @@ -156,7 +231,7 @@ public override string ToString () get { ArrayList list = new ArrayList (); - foreach (string s in ReservedNameUtils.ReservedMetadataNames) + foreach (string s in ReservedMetadataNames) list.Add (s); foreach (string s in metadata.Keys) list.Add (s); diff --git a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ChangeLog b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ChangeLog index ed8d5d0872664..0dae7394159c1 100644 --- a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ChangeLog +++ b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ChangeLog @@ -1,7 +1,3 @@ -2006-04-14 Marek Sieradzki - - * ReservedNameUtils.cs: Added. - 2005-09-22 Marek Sieradzki * MonoLocationHelper.cs: Added GetXBuildDir (). diff --git a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs index 9d2fea9ff0cbd..e69de29bb2d1d 100644 --- a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs +++ b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs @@ -1,119 +0,0 @@ -// -// ReservedNameUtils.cs -// -// Author: -// Marek Sieradzki (marek.sieradzki@gmail.com) -// -// (C) 2006 Marek Sieradzki -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -#if NET_2_0 - -using System; -using System.Collections; -using System.Collections.Specialized; -using System.IO; - -namespace Mono.XBuild.Utilities { - - internal static class ReservedNameUtils { - - static string[] reservedMetadataNames; - static Hashtable reservedMetadataHash; - - static ReservedNameUtils () - { - reservedMetadataNames = new string [] { - "FullPath", "RootDir", "Filename", "Extension", "RelativeDir", "Directory", - "RecursiveDir", "Identity", "ModifiedTime", "CreatedTime", "AccessedTime"}; - reservedMetadataHash = CollectionsUtil.CreateCaseInsensitiveHashtable (ReservedMetadataNameCount); - foreach (string s in reservedMetadataNames) { - reservedMetadataHash.Add (s, null); - } - } - - public static ICollection ReservedMetadataNames { - get { - return (ICollection) reservedMetadataNames.Clone (); - } - } - - public static int ReservedMetadataNameCount { - get { - return reservedMetadataNames.Length; - } - } - - public static bool IsReservedMetadataName (string metadataName) - { - return reservedMetadataHash.Contains (metadataName.ToLower ()); - } - - public static string GetReservedMetadata (string itemSpec, - string metadataName) - { - switch (metadataName.ToLower ()) { - case "fullpath": - return Path.GetFullPath (itemSpec); - case "rootdir": - return Path.GetPathRoot (itemSpec); - case "filename": - return Path.GetFileNameWithoutExtension (itemSpec); - case "extension": - return Path.GetExtension (itemSpec); - case "relativedir": - return Path.GetDirectoryName (itemSpec); - case "directory": - return Path.GetDirectoryName (Path.GetFullPath (itemSpec)); - case "recursivedir": - // FIXME: how to handle this? - return ""; - case "identity": - return Path.Combine (Path.GetDirectoryName (itemSpec), Path.GetFileName (itemSpec)); - case "modifiedtime": - if (File.Exists (itemSpec)) - return File.GetLastWriteTime (itemSpec).ToString (); - else if (Directory.Exists (itemSpec)) - return Directory.GetLastWriteTime (itemSpec).ToString (); - else - return String.Empty; - case "createdtime": - if (File.Exists (itemSpec)) - return File.GetCreationTime (itemSpec).ToString (); - else if (Directory.Exists (itemSpec)) - return Directory.GetCreationTime (itemSpec).ToString (); - else - return String.Empty; - case "accessedtime": - if (File.Exists (itemSpec)) - return File.GetLastAccessTime (itemSpec).ToString (); - else if (Directory.Exists (itemSpec)) - return Directory.GetLastAccessTime (itemSpec).ToString (); - else - return String.Empty; - default: - throw new ArgumentException ("Invalid reserved metadata name"); - } - } - } -} - -#endif