Project parentProject;
PropertyType propertyType;
- private BuildProperty ()
+ 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");
}
internal BuildProperty (string propertyName,
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 ();
+ 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 ()
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);
}
- private bool FromXml {
+ 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 {
set {
this.@value = value;
if (FromXml) {
- propertyElement.InnerText = value;
+ propertyElement.InnerXml = value;
} else {
finalValue = value;
}
return propertyType;
}
}
+
+ internal XmlElement XmlElement {
+ get { return propertyElement; }
+ }
}
internal enum PropertyType {