/// <summary> /// Applies each of the item modifications in order. /// Items are replaced with a virtual clone before they are modified. /// If an item does not exist in this group, the modification is skipped. /// If any modifications conflict, these modifications win. /// Returns the cloned item made, or null if it does not exist in this group. /// </summary> internal BuildItem ModifyItemAfterCloningUsingVirtualMetadata(BuildItem item, Dictionary<string, string> metadata) { int index = items.IndexOf(item); if (index > -1) { BuildItem clone = items[index].VirtualClone(); items[index] = clone; foreach (KeyValuePair<string, string> pair in metadata) { clone.SetVirtualMetadata(pair.Key, pair.Value); } return clone; } return null; }