X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FMicrosoft.Build.Engine%2FMicrosoft.Build.BuildEngine%2FBuildProperty.cs;h=f8701183adf847cf173df37e74b2eda7df633dc2;hb=d531a7515eaad9fb1c2ca9fff160851fa70aa168;hp=2a3491d32af17b85d6ae2d5b6fcb35e9a6b63513;hpb=f73e0d5c67f0d26e85b92fc4b75fc48783f20d64;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 2a3491d32af..f8701183adf 100644 --- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildProperty.cs +++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildProperty.cs @@ -32,47 +32,74 @@ using System.Text; using System.Xml; namespace Microsoft.Build.BuildEngine { - public class BuildProperty : IBuildProperty { + public class BuildProperty { XmlElement propertyElement; - XmlAttribute condition; string finalValue; + bool isImported; string value; string name; + Project parentProject; PropertyType propertyType; - - public BuildProperty () - : this (null, null) + + BuildProperty () + { + } + + 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"); } - public BuildProperty (string propertyName, - string propertyValue) + internal BuildProperty (string propertyName, + string propertyValue, PropertyType propertyType) { this.name = propertyName; this.value = propertyValue; + this.finalValue = propertyValue; + this.propertyType = propertyType; + this.isImported = false; + } + + internal BuildProperty (Project parentProject, XmlElement propertyElement) + { + if (propertyElement == null) + throw new ArgumentNullException ("propertyElement"); + + this.propertyElement = propertyElement; + this.propertyType = PropertyType.Normal; + this.parentProject = parentProject; + this.name = propertyElement.Name; + this.value = propertyElement.InnerXml; + this.isImported = false; } + [MonoTODO] public BuildProperty Clone (bool deepClone) { - BuildProperty bp; - - bp = new BuildProperty (); - bp.condition = this.condition; - bp.finalValue = this.finalValue; - bp.name = this.name; - bp.propertyElement = this.propertyElement; - bp.propertyType = this.propertyType; - bp.value = this.value; - - return bp; - } - - public static implicit operator string (BuildProperty propertyToCast) + 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 () @@ -83,50 +110,53 @@ namespace Microsoft.Build.BuildEngine { return Value; } - - internal void BindToXml (XmlElement propertyElement) + internal void Evaluate () { - if (propertyElement == null) - throw new ArgumentNullException ("propertyElement"); - this.propertyElement = propertyElement; - this.condition = propertyElement.GetAttributeNode ("Condition"); - this.name = propertyElement.Name; - this.value = propertyElement.InnerText; + 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 void UpdateXml () - { + + internal bool FromXml { + get { + return propertyElement != null; + } } - + public string Condition { get { - if (condition == null) - return null; + if (FromXml) + return propertyElement.GetAttribute ("Condition"); else - return condition.Value; + return String.Empty; } set { - if (condition != null) - condition.Value = value; + 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 { get { - if (finalValue == null) { + if (finalValue == null) return this.@value; - } else + else return finalValue; } - internal set { - finalValue = value; - } + } + + public bool IsImported { + get { return isImported; } } public string Name { - get { - return name; - } + get { return name; } } public string Value { @@ -135,21 +165,31 @@ namespace Microsoft.Build.BuildEngine { } set { this.@value = value; + if (FromXml) { + propertyElement.InnerXml = value; + } else { + finalValue = value; + } } } internal PropertyType PropertyType { - get { return propertyType; } - set { propertyType = value; } + get { + return propertyType; + } + } + + internal XmlElement XmlElement { + get { return propertyElement; } } } internal enum PropertyType { Reserved, - CommandLine, + Global, Normal, Environment } } -#endif \ No newline at end of file +#endif