int imports;
int itemGroups;
+ Project project;
int propertyGroups;
int chooses;
LinkedList <object> list;
- LinkedListNode <object> iterator;
- Project project;
+ LinkedListNode <object> add_iterator;
public GroupingCollection (Project project)
{
- this.project = project;
list = new LinkedList <object> ();
- iterator = null;
+ add_iterator = null;
+ this.project = project;
}
public IEnumerator GetChooseEnumerator ()
{
bpg.GroupingCollection = this;
propertyGroups++;
- if (iterator == null)
+ if (add_iterator == null)
list.AddLast (bpg);
- else
- list.AddAfter (iterator, bpg);
+ else {
+ list.AddAfter (add_iterator, bpg);
+ add_iterator = add_iterator.Next;
+ }
}
internal void Add (BuildItemGroup big)
{
itemGroups++;
- if (iterator == null)
+ if (add_iterator == null)
list.AddLast (big);
- else
- list.AddAfter (iterator, big);
+ else {
+ list.AddAfter (add_iterator, big);
+ add_iterator = add_iterator.Next;
+ }
}
internal void Add (BuildChoose bc)
{
chooses++;
- if (iterator == null)
+ if (add_iterator == null)
list.AddLast (bc);
- else
- list.AddAfter (iterator, bc);
+ else {
+ list.AddAfter (add_iterator, bc);
+ add_iterator = add_iterator.Next;
+ }
}
internal void Add (Import import)
{
imports++;
- if (iterator == null)
+ if (add_iterator == null)
list.AddLast (import);
- else
- list.AddAfter (iterator, import);
+ else {
+ list.AddAfter (add_iterator, import);
+ add_iterator = add_iterator.Next;
+ }
+ }
+
+ internal void Remove (BuildItemGroup big)
+ {
+ big.XmlElement.ParentNode.RemoveChild (big.XmlElement);
+ list.Remove (big);
+ }
+
+ internal void Remove (BuildPropertyGroup bpg)
+ {
+ bpg.XmlElement.ParentNode.RemoveChild (bpg.XmlElement);
+ list.Remove (bpg);
}
internal void Evaluate ()
Evaluate (EvaluationType.Item);
}
- // FIXME: check conditions on groups/imports
void Evaluate (EvaluationType type)
{
BuildItemGroup big;
BuildPropertyGroup bpg;
Import import;
+ LinkedListNode <object> evaluate_iterator;
if (type == EvaluationType.Property) {
- iterator = list.First;
-
- while (iterator != null) {
- if (iterator.Value is BuildPropertyGroup) {
- bpg = (BuildPropertyGroup) iterator.Value;
- bpg.Evaluate ();
- } else if (iterator.Value is Import) {
- import = (Import) iterator.Value;
- import.Evaluate ();
+ evaluate_iterator = list.First;
+ add_iterator = list.First;
+
+ while (evaluate_iterator != null) {
+ if (evaluate_iterator.Value is BuildPropertyGroup) {
+ bpg = (BuildPropertyGroup) evaluate_iterator.Value;
+ if (ConditionParser.ParseAndEvaluate (bpg.Condition, project))
+ bpg.Evaluate ();
+ } else if (evaluate_iterator.Value is Import) {
+ import = (Import) evaluate_iterator.Value;
+ if (ConditionParser.ParseAndEvaluate (import.Condition, project))
+ import.Evaluate ();
}
- iterator = iterator.Next;
+ // if it wasn't moved by adding anything because of evaluating a Import shift it
+ if (add_iterator == evaluate_iterator)
+ add_iterator = add_iterator.Next;
+
+ evaluate_iterator = evaluate_iterator.Next;
}
} else {
- iterator = list.First;
-
- while (iterator != null) {
- if (iterator.Value is BuildItemGroup) {
- big = (BuildItemGroup) iterator.Value;
-
- big.Evaluate ();
+ evaluate_iterator = list.First;
+ add_iterator = list.First;
+
+ while (evaluate_iterator != null) {
+ if (evaluate_iterator.Value is BuildItemGroup) {
+ big = (BuildItemGroup) evaluate_iterator.Value;
+ if (ConditionParser.ParseAndEvaluate (big.Condition, project))
+ big.Evaluate ();
}
- iterator = iterator.Next;
+ evaluate_iterator = evaluate_iterator.Next;
}
}
+
+ add_iterator = null;
}
internal int Imports {