Dictionary <string, object> values;
PropertyInfo currentProperty;
PropertyInfo[] properties;
+ object value;
this.task = task;
this.taskElement = taskElement;
if (currentProperty == null)
throw new InvalidProjectFileException (String.Format ("Task does not have property \"{0}\" defined",
de.Key));
- values.Add (de.Key, GetObjectFromString (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))
+ 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);
}
}
}
- private void InitializeParameter (PropertyInfo propertyInfo, object value)
+ void InitializeParameter (PropertyInfo propertyInfo, object value)
{
propertyInfo.SetValue (task, value, null);
}
- private void PublishItemGroup (PropertyInfo propertyInfo,
+ void PublishItemGroup (PropertyInfo propertyInfo,
object o,
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,
+ void PublishProperty (PropertyInfo propertyInfo,
object o,
string propertyName)
{
parentProject.EvaluatedProperties.AddProperty (bp);
}
- private BuildProperty CollectProperty (PropertyInfo propertyInfo, object o, string name)
+ BuildProperty CollectProperty (PropertyInfo propertyInfo, object o, string name)
{
string output = null;
BuildProperty bp;
return bp;
}
- private BuildItemGroup CollectItemGroup (PropertyInfo propertyInfo, object o, string name)
+ BuildItemGroup CollectItemGroup (PropertyInfo propertyInfo, object o, string name)
{
BuildItemGroup big;
string temp;
return big;
}
- private object GetObjectFromString (string raw, Type type)
+ 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, true);
- 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;
}