using System;
using System.Collections;
+using System.Collections.Generic;
using System.Text;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
objects.Add (s);
}
- public object ConvertTo (Type type)
+ public object ConvertTo (Project project, Type type)
{
- if (type.IsArray == true) {
+ if (type.IsArray) {
if (type == typeof (ITaskItem[]))
- return ConvertToITaskItemArray ();
+ return ConvertToITaskItemArray (project);
else
- return ConvertToArray (type);
+ return ConvertToArray (project, type);
} else {
if (type == typeof (ITaskItem))
- return ConvertToITaskItem ();
+ return ConvertToITaskItem (project);
else
- return ConvertToNonArray (type);
+ return ConvertToNonArray (project, type);
}
}
yield return o;
}
- object ConvertToNonArray (Type type)
+ object ConvertToNonArray (Project project, Type type)
{
- return ConvertToObject (ConvertToString (), type);
+ return ConvertToObject (ConvertToString (project), type);
}
-
- object ConvertToArray (Type type)
+
+ object ConvertToArray (Project project, Type type)
{
- string[] rawTable = ToString ().Split (';');
+ string[] rawTable = ConvertToString (project).Split (';');
int i = 0;
- if (type == typeof (bool[]) ||
- type == typeof (string[]) ||
- type == typeof (int[]) ||
- type == typeof (uint[]) ||
- type == typeof (DateTime[])) {
-
- object[] array = new object [rawTable.Length];
+ if (type == typeof (bool[])) {
+ bool[] array = new bool [rawTable.Length];
foreach (string raw in rawTable)
- array [i++] = ConvertToObject (raw, type.GetElementType ());
+ array [i++] = (bool) ConvertToObject (raw, type.GetElementType ());
return array;
-
- } else throw new Exception ("Invalid type.");
+ } else if (type == typeof (string[])) {
+ string[] array = new string [rawTable.Length];
+ foreach (string raw in rawTable)
+ array [i++] = (string) ConvertToObject (raw, type.GetElementType ());
+ return array;
+ } else if (type == typeof (int[])) {
+ int[] array = new int [rawTable.Length];
+ foreach (string raw in rawTable)
+ array [i++] = (int) ConvertToObject (raw, type.GetElementType ());
+ return array;
+ } else if (type == typeof (uint[])) {
+ uint[] array = new uint [rawTable.Length];
+ foreach (string raw in rawTable)
+ array [i++] = (uint) ConvertToObject (raw, type.GetElementType ());
+ return array;
+ } else if (type == typeof (DateTime[])) {
+ DateTime[] array = new DateTime [rawTable.Length];
+ foreach (string raw in rawTable)
+ array [i++] = (DateTime) ConvertToObject (raw, type.GetElementType ());
+ return array;
+ } else
+ throw new Exception ("Invalid type");
}
object ConvertToObject (string raw, Type type)
throw new Exception (String.Format ("Unknown type: {0}", type.ToString ()));
}
}
-
- string ConvertToString ()
+ string ConvertToString (Project project)
{
StringBuilder sb = new StringBuilder ();
if (o is string) {
sb.Append ((string) o);
} else if (o is ItemReference) {
- sb.Append (((ItemReference)o).ConvertToString ());
+ ItemReference ir = (ItemReference) o;
+ sb.Append (ir.ConvertToString (project));
} else if (o is PropertyReference) {
- sb.Append (((PropertyReference)o).ConvertToString ());
+ PropertyReference pr = (PropertyReference) o;
+ sb.Append (pr.ConvertToString (project));
} else if (o is MetadataReference) {
// FIXME: we don't handle them yet
} else {
return sb.ToString ();
}
- ITaskItem ConvertToITaskItem ()
+ ITaskItem ConvertToITaskItem (Project project)
{
ITaskItem item;
if (objects [0] is ItemReference) {
ItemReference ir = (ItemReference) objects [0];
- ITaskItem[] array = ir.ConvertToITaskItemArray ();
+ ITaskItem[] array = ir.ConvertToITaskItemArray (project);
if (array.Length == 1) {
return array [0];
} else {
throw new Exception ("TaskItem array too long");
}
} else {
- item = new TaskItem (ConvertToString ());
+ item = new TaskItem (ConvertToString (project));
return item;
}
}
- ITaskItem[] ConvertToITaskItemArray ()
+ ITaskItem[] ConvertToITaskItemArray (Project project)
{
- ArrayList finalItems = new ArrayList ();
+ List <ITaskItem> finalItems = new List <ITaskItem> ();
ArrayList tempItems = new ArrayList ();
ITaskItem[] array;
- ITaskItem[] finalArray;
foreach (object o in objects) {
if (o is ItemReference) {
tempItems.Add (o);
} else if (o is PropertyReference) {
PropertyReference pr = (PropertyReference) o;
- tempItems.Add (pr.ConvertToString ());
+ tempItems.Add (pr.ConvertToString (project));
} else if (o is MetadataReference) {
// FIXME: not handled yet
} else if (o is string) {
foreach (object o in tempItems) {
if (o is ItemReference) {
ItemReference ir = (ItemReference) o;
- array = ir.ConvertToITaskItemArray ();
+ array = ir.ConvertToITaskItemArray (project);
if (array != null)
- foreach (ITaskItem item in array)
- finalItems.Add (item);
+ finalItems.AddRange (array);
} else if (o is string) {
string s = (string) o;
- array = ConvertToITaskItemArrayFromString (s);
- foreach (ITaskItem item in array)
- finalItems.Add (item);
+ array = ConvertToITaskItemArrayFromString (project, s);
+ finalItems.AddRange (array);
} else {
throw new Exception ("Invalid type in tempItems collection.");
}
}
- finalArray = new ITaskItem [finalItems.Count];
- int i = 0;
- foreach (ITaskItem item in finalItems)
- finalArray [i++] = item;
- return finalArray;
+ return finalItems.ToArray ();
}
- ITaskItem[] ConvertToITaskItemArrayFromString (string source)
+ ITaskItem[] ConvertToITaskItemArrayFromString (Project project, string source)
{
ArrayList tempItems = new ArrayList ();
ITaskItem[] finalArray;