X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FMicrosoft.Build.Engine%2FMicrosoft.Build.BuildEngine%2FBuildProperty.cs;h=841d3aab355140864d542f47075fbbd1cc4fe816;hb=b75ff503063b30246eb81770e082f3f54799d52a;hp=09b0b15060d1279863888fb9f4c9e8aafbe38a06;hpb=096265478e6e4145c90250a5bf78c0c179ee50af;p=mono.git diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildProperty.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildProperty.cs index 09b0b15060d..841d3aab355 100644 --- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildProperty.cs +++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildProperty.cs @@ -31,6 +31,8 @@ using System; using System.Text; using System.Xml; +using Microsoft.Build.Framework; + namespace Microsoft.Build.BuildEngine { public class BuildProperty { @@ -42,19 +44,17 @@ namespace Microsoft.Build.BuildEngine { Project parentProject; PropertyType propertyType; - internal bool FromXml { - get { - return propertyElement != null; - } - } - - private BuildProperty () + BuildProperty () { } - public BuildProperty (string propertyName, string propertyValue): - this (propertyName, propertyValue, PropertyType.Normal) + public BuildProperty (string propertyName, string propertyValue) + : this (propertyName, propertyValue, PropertyType.Normal) { + if (propertyName == null) + throw new ArgumentNullException ("propertyName"); + if (propertyValue == null) + throw new ArgumentNullException ("propertyValue"); } internal BuildProperty (string propertyName, @@ -76,31 +76,32 @@ namespace Microsoft.Build.BuildEngine { this.propertyType = PropertyType.Normal; this.parentProject = parentProject; this.name = propertyElement.Name; - this.value = propertyElement.InnerText; + this.value = propertyElement.InnerXml; this.isImported = false; } [MonoTODO] public BuildProperty Clone (bool deepClone) { - return (BuildProperty) this.MemberwiseClone (); - } - - internal void Evaluate () - { - if (FromXml) { - OldExpression exp = new OldExpression (parentProject); - exp.ParseSource (Value); - finalValue = (string) exp.ConvertTo (typeof (string)); - parentProject.EvaluatedProperties.AddProperty (this); + if (deepClone) { + if (FromXml) + throw new NotImplementedException (); + else + return (BuildProperty) this.MemberwiseClone (); + } else { + if (FromXml) + throw new NotImplementedException (); + else + throw new InvalidOperationException ("A shallow clone of this object cannot be created."); } } public static explicit operator string (BuildProperty propertyToCast) { if (propertyToCast == null) - throw new ArgumentNullException ("propertyToCast"); - return propertyToCast.ToString (); + return String.Empty; + else + return propertyToCast.ToString (); } public override string ToString () @@ -111,9 +112,52 @@ namespace Microsoft.Build.BuildEngine { return Value; } + internal void Evaluate () + { + BuildProperty evaluated = new BuildProperty (Name, Value); + + Expression exp = new Expression (); + exp.Parse (Value, false, false); + evaluated.finalValue = (string) exp.ConvertTo (parentProject, typeof (string)); + + parentProject.EvaluatedProperties.AddProperty (evaluated); + } + + internal string ConvertToString (Project project) + { + Expression exp = new Expression (); + exp.Parse (Value, true, false); + + return (string) exp.ConvertTo (project, typeof (string)); + } + + internal ITaskItem[] ConvertToITaskItemArray (Project project) + { + Expression exp = new Expression (); + exp.Parse (Value, true, false); + + return (ITaskItem[]) exp.ConvertTo (project, typeof (ITaskItem[])); + } + + internal bool FromXml { + get { + return propertyElement != null; + } + } + public string Condition { - get { return propertyElement.GetAttribute ("Condition"); } - set { propertyElement.SetAttribute ("Condition", value); } + get { + if (FromXml) + return propertyElement.GetAttribute ("Condition"); + else + return String.Empty; + } + set { + if (FromXml) + propertyElement.SetAttribute ("Condition", value); + else + throw new InvalidOperationException ("Cannot set a condition on an object not represented by an XML element in the project file."); + } } public string FinalValue { @@ -140,7 +184,7 @@ namespace Microsoft.Build.BuildEngine { set { this.@value = value; if (FromXml) { - propertyElement.InnerText = value; + propertyElement.InnerXml = value; } else { finalValue = value; } @@ -152,6 +196,10 @@ namespace Microsoft.Build.BuildEngine { return propertyType; } } + + internal XmlElement XmlElement { + get { return propertyElement; } + } } internal enum PropertyType {