public void OnAdded(NamedNode child) { if (child?.LookupKey == null) { return; } EnsureCacheCreated(); var key = new ChildrenCacheKey(child.GetType(), child.LookupKey); childrenCache[key] = child; }
/// <summary> /// Handles BuildMessage event when an ItemGroup discovery/evaluation is logged. /// </summary> /// <param name="args">The <see cref="BuildMessageEventArgs"/> instance containing the event data.</param> /// <param name="prefix">The prefix string.</param> public void AddItemGroup(BuildMessageEventArgs args, string prefix, NamedNode containerNode) { var project = construction.GetOrAddProject(args.BuildEventContext.ProjectContextId); var target = project.GetTargetById(args.BuildEventContext.TargetId); var itemGroup = ItemGroupParser.ParsePropertyOrItemList(args.Message, prefix, stringTable); if (itemGroup is Property property) { itemGroup = new Item { Text = property.Value }; containerNode.Name = property.Name; containerNode.AddChild(itemGroup); } else if (itemGroup is Parameter parameter) { containerNode.Name = parameter.Name; foreach (ParentedNode child in parameter.Children) { child.Parent = null; containerNode.AddChild(child); } } if (target.LastChild is NamedNode last && last.GetType() == containerNode.GetType() && last.Name == containerNode.Name) { foreach (ParentedNode child in containerNode.Children) { child.Parent = null; last.AddChild(child); } return; } target.AddChild(containerNode); }