示例#1
0
文件: Lookup.cs 项目: 3F/IeXod
        /// <summary>
        /// Apply modifies to a temporary result group.
        /// Items to be modified are virtual-cloned so the original isn't changed.
        /// </summary>
        private void ApplyModifies(BuildItemGroup result, Dictionary <BuildItem, Dictionary <string, string> > allModifies)
        {
            // Clone, because we're modifying actual items, and this would otherwise be visible to other batches,
            // and would be "published" even if a target fails.
            // FUTURE - don't need to clone here for non intrinsic tasks, but at present, they don't do modifies

            // Store the clone, in case we're asked to modify or remove it later (we will record it against the real item)
            if (cloneTable == null)
            {
                cloneTable = new Dictionary <BuildItem, BuildItem>();
            }

            foreach (KeyValuePair <BuildItem, Dictionary <string, string> > modify in allModifies)
            {
                BuildItem clone = result.ModifyItemAfterCloningUsingVirtualMetadata(modify.Key, modify.Value);

                // This will be null if the item wasn't in the result group, ie, it had been removed after being modified
                if (clone != null)
                {
#if DEBUG
                    ErrorUtilities.VerifyThrow(!cloneTable.ContainsKey(clone), "Should be new, not already in table!");
#endif
                    cloneTable[clone] = modify.Key;
                }
            }
        }