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=1ebadce9a23e54946020ac6b06902e21e1e8cd67;hpb=4eb352bcb3ef7a71dc9ab62c5cd2d5e7598619f7;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 1ebadce9a23..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,7 +44,7 @@ namespace Microsoft.Build.BuildEngine { Project parentProject; PropertyType propertyType; - private BuildProperty () + BuildProperty () { } @@ -50,11 +52,9 @@ namespace Microsoft.Build.BuildEngine { : this (propertyName, propertyValue, PropertyType.Normal) { if (propertyName == null) - throw new ArgumentNullException (null, - "Parameter \"propertyName\" cannot be null."); + throw new ArgumentNullException ("propertyName"); if (propertyValue == null) - throw new ArgumentNullException (null, - "Parameter \"propertyValue\" cannot be null."); + throw new ArgumentNullException ("propertyValue"); } internal BuildProperty (string propertyName, @@ -76,7 +76,7 @@ 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; } @@ -99,8 +99,9 @@ namespace Microsoft.Build.BuildEngine { 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 () @@ -113,15 +114,32 @@ namespace Microsoft.Build.BuildEngine { internal void Evaluate () { - if (FromXml) { - OldExpression exp = new OldExpression (parentProject); - exp.ParseSource (Value); - finalValue = (string) exp.ConvertTo (typeof (string)); - parentProject.EvaluatedProperties.AddProperty (this); - } + 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[])); } - private bool FromXml { + internal bool FromXml { get { return propertyElement != null; } @@ -137,6 +155,8 @@ namespace Microsoft.Build.BuildEngine { 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."); } } @@ -164,7 +184,7 @@ namespace Microsoft.Build.BuildEngine { set { this.@value = value; if (FromXml) { - propertyElement.InnerText = value; + propertyElement.InnerXml = value; } else { finalValue = value; } @@ -176,6 +196,10 @@ namespace Microsoft.Build.BuildEngine { return propertyType; } } + + internal XmlElement XmlElement { + get { return propertyElement; } + } } internal enum PropertyType {