+ void SplitParentItem ()
+ {
+ BuildItem parent = parent_item;
+ List <BuildItem> list = new List <BuildItem> ();
+ XmlElement insertAfter = parent.itemElement;
+ foreach (BuildItem bi in parent.child_items) {
+ BuildItem added = InsertElementAfter (parent, bi, insertAfter);
+ insertAfter = added.itemElement;
+ list.Add (added);
+ }
+ parent.parent_item_group.ReplaceWith (parent, list);
+ parent.itemElement.ParentNode.RemoveChild (parent.itemElement);
+ }
+
+ static BuildItem InsertElementAfter (BuildItem parent, BuildItem child, XmlElement insertAfter)
+ {
+ BuildItem newParent;
+
+ XmlDocument doc = parent.itemElement.OwnerDocument;
+ XmlElement newElement = doc.CreateElement (child.Name, Project.XmlNamespace);
+ newElement.SetAttribute ("Include", child.FinalItemSpec);
+ if (parent.itemElement.HasAttribute ("Condition"))
+ newElement.SetAttribute ("Condition", parent.itemElement.GetAttribute ("Condition"));
+ foreach (XmlElement xe in parent.itemElement)
+ newElement.AppendChild (xe.Clone ());
+ parent.itemElement.ParentNode.InsertAfter (newElement, insertAfter);
+
+ newParent = new BuildItem (newElement, parent.parent_item_group);
+ newParent.child_items.Add (child);
+ child.parent_item = newParent;
+
+ return newParent;
+ }
+