// 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.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)
+
+ private BuildProperty ()
+ {
+ }
+
+ public BuildProperty (string propertyName, string propertyValue)
+ : this (propertyName, propertyValue, PropertyType.Normal)
{
+ if (propertyName == null)
+ throw new ArgumentNullException (null,
+ "Parameter \"propertyName\" cannot be null.");
+ if (propertyValue == null)
+ throw new ArgumentNullException (null,
+ "Parameter \"propertyValue\" cannot be null.");
}
- 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.InnerText;
+ 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;
+ 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 implicit operator string (BuildProperty propertyToCast)
+ public static explicit operator string (BuildProperty propertyToCast)
{
if (propertyToCast == null)
throw new ArgumentNullException ("propertyToCast");
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;
+ if (FromXml) {
+ OldExpression exp = new OldExpression (parentProject);
+ exp.ParseSource (Value);
+ finalValue = (string) exp.ConvertTo (typeof (string));
+ parentProject.EvaluatedProperties.AddProperty (this);
+ }
}
-
- internal void UpdateXml ()
- {
+
+ private 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);
}
}
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 {
}
set {
this.@value = value;
+ if (FromXml) {
+ propertyElement.InnerText = value;
+ } else {
+ finalValue = value;
+ }
}
}
internal PropertyType PropertyType {
- get { return propertyType; }
- set { propertyType = value; }
+ get {
+ return propertyType;
+ }
}
}
internal enum PropertyType {
Reserved,
- CommandLine,
+ Global,
Normal,
Environment
}
}
+
+#endif