#if NET_2_0
using System;
-using System.Collections;
+using System.Collections.Generic;
using System.Collections.Specialized;
using System.Reflection;
using System.Xml;
}
public void Prepare (ITask task, XmlElement taskElement,
- IDictionary parameters, Type taskType)
+ IDictionary <string, string> parameters, Type taskType)
{
- Hashtable values;
+ Dictionary <string, object> values;
PropertyInfo currentProperty;
PropertyInfo[] properties;
-
+ object value;
+
this.task = task;
this.taskElement = taskElement;
this.taskType = taskType;
- values = new Hashtable ();
+ values = new Dictionary <string, object> ();
- foreach (DictionaryEntry de in parameters) {
- currentProperty = taskType.GetProperty ((string) de.Key);
+ foreach (KeyValuePair <string, string> de in parameters) {
+ currentProperty = taskType.GetProperty (de.Key);
if (currentProperty == null)
throw new InvalidProjectFileException (String.Format ("Task does not have property \"{0}\" defined",
de.Key));
- values.Add ((string) de.Key, GetObjectFromString ((string) de.Value, currentProperty.PropertyType));
+
+ value = GetObjectFromString (de.Value, currentProperty.PropertyType);
+
+ if (value != null)
+ values.Add (de.Key, value);
}
properties = taskType.GetProperties ();
object o;
foreach (XmlNode xmlNode in taskElement.ChildNodes) {
- if (xmlNode is XmlElement) {
- xmlElement = (XmlElement) xmlNode;
-
- if (xmlElement.Name != "Output")
- throw new InvalidProjectFileException ("Only Output elements can be Task's child nodes.");
- if (xmlElement.GetAttribute ("ItemName") != "" && xmlElement.GetAttribute ("PropertyName") != "")
- throw new InvalidProjectFileException ("Only one of ItemName and ProperytyName attributes can be specified.");
- if (xmlElement.GetAttribute ("TaskParameter") == "")
- throw new InvalidProjectFileException ("TaskParameter attribute must be specified.");
-
- taskParameter = xmlElement.GetAttribute ("TaskParameter");
- itemName = xmlElement.GetAttribute ("ItemName");
- propertyName = xmlElement.GetAttribute ("PropertyName");
-
- propertyInfo = taskType.GetProperty (taskParameter);
- if (propertyInfo == null)
- throw new Exception ("Could not get property info.");
- if (propertyInfo.IsDefined (outputAttribute, false) == false)
- throw new Exception ("This is not output property.");
-
- o = propertyInfo.GetValue (task, null);
- if (o == null)
- continue;
+ if (!(xmlNode is XmlElement))
+ continue;
+
+ xmlElement = (XmlElement) xmlNode;
+
+ if (xmlElement.Name != "Output")
+ throw new InvalidProjectFileException ("Only Output elements can be Task's child nodes.");
+ if (xmlElement.GetAttribute ("ItemName") != String.Empty && xmlElement.GetAttribute ("PropertyName") != String.Empty)
+ throw new InvalidProjectFileException ("Only one of ItemName and PropertyName attributes can be specified.");
+ if (xmlElement.GetAttribute ("TaskParameter") == String.Empty)
+ throw new InvalidProjectFileException ("TaskParameter attribute must be specified.");
- if (itemName != String.Empty) {
- PublishItemGroup (propertyInfo, o, itemName);
- } else {
- PublishProperty (propertyInfo, o, propertyName);
- }
+ taskParameter = xmlElement.GetAttribute ("TaskParameter");
+ itemName = xmlElement.GetAttribute ("ItemName");
+ propertyName = xmlElement.GetAttribute ("PropertyName");
+
+ propertyInfo = taskType.GetProperty (taskParameter);
+ if (propertyInfo == null)
+ throw new Exception ("Could not get property info.");
+ if (propertyInfo.IsDefined (outputAttribute, false) == false)
+ throw new Exception ("This is not output property.");
+
+ o = propertyInfo.GetValue (task, null);
+ if (o == null)
+ continue;
+
+ if (itemName != String.Empty) {
+ PublishItemGroup (propertyInfo, o, itemName);
+ } else {
+ PublishProperty (propertyInfo, o, propertyName);
}
}
}
string itemName)
{
BuildItemGroup newItems = CollectItemGroup (propertyInfo, o, itemName);
- if (parentProject.EvaluatedItemsByName.Contains (itemName)) {
- BuildItemGroup big = (BuildItemGroup) parentProject.EvaluatedItemsByName [itemName];
+
+ if (parentProject.EvaluatedItemsByName.ContainsKey (itemName)) {
+ BuildItemGroup big = parentProject.EvaluatedItemsByName [itemName];
big.Clear ();
parentProject.EvaluatedItemsByName.Remove (itemName);
parentProject.EvaluatedItemsByName.Add (itemName, newItems);
} else {
parentProject.EvaluatedItemsByName.Add (itemName, newItems);
}
+ foreach (BuildItem bi in newItems)
+ parentProject.EvaluatedItems.AddItem (bi);
}
private void PublishProperty (PropertyInfo propertyInfo,
private object GetObjectFromString (string raw, Type type)
{
- OldExpression e;
+ Expression e;
object result;
- e = new OldExpression (parentProject);
- e.ParseSource (raw);
+ e = new Expression ();
+ e.Parse (raw);
- if (type == typeof (ITaskItem)) {
- result = e.ConvertTo (typeof (ITaskItem));
- } else if (type == typeof (ITaskItem[])) {
- result = e.ConvertTo (typeof (ITaskItem[]));
- } else {
- result = e.ConvertTo (type);
- }
+ if ((string) e.ConvertTo (parentProject, typeof (string)) == String.Empty)
+ return null;
+
+ result = e.ConvertTo (parentProject, type);
return result;
}