/// <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); var property = itemGroup as Property; if (property != null) { itemGroup = new Item { Name = property.Name, Text = property.Value }; containerNode.Name = stringTable.Intern(property.Name); } containerNode.AddChild(itemGroup); target.AddChild(containerNode); }
/// <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); }
public void Process(BuildMessageEventArgs args) { if (args == null) { return; } var message = args.Message; if (string.IsNullOrEmpty(message)) { return; } switch (message[0]) { case 'A': if (message.StartsWith(ItemGroupIncludeMessagePrefix)) { AddItemGroup(args, ItemGroupIncludeMessagePrefix, new AddItem()); return; } break; case 'O': if (message.StartsWith(OutputItemsMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("OutputItems"); var parameter = ItemGroupParser.ParsePropertyOrItemList(message, OutputItemsMessagePrefix, stringTable); folder.AddChild(parameter); return; } if (message.StartsWith(OutputPropertyMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("OutputProperties"); var parameter = ItemGroupParser.ParsePropertyOrItemList(message, OutputPropertyMessagePrefix, stringTable); folder.AddChild(parameter); return; } break; case 'R': if (message.StartsWith(ItemGroupRemoveMessagePrefix)) { AddItemGroup(args, ItemGroupRemoveMessagePrefix, new RemoveItem()); return; } break; case 'S': if (message.StartsWith(PropertyGroupMessagePrefix)) { AddPropertyGroup(args, PropertyGroupMessagePrefix); return; } break; case 'T': if (message.StartsWith(TaskParameterMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("Parameters"); var parameter = ItemGroupParser.ParsePropertyOrItemList(message, TaskParameterMessagePrefix, stringTable); folder.AddChild(parameter); return; } break; case 'U': // A task from assembly message (parses out the task name and assembly path). var match = usingTaskRegex.Match(message); if (match.Success) { construction.SetTaskAssembly( stringTable.Intern(match.Groups["task"].Value), stringTable.Intern(match.Groups["assembly"].Value)); return; } break; default: break; } if (args is TaskCommandLineEventArgs taskArgs) { AddCommandLine(taskArgs); return; } // Just the generic log message or something we currently don't handle in the object model. AddMessage(args, message); }
public void Process(BuildMessageEventArgs args) { if (args == null) { return; } var message = args.Message; if (string.IsNullOrEmpty(message)) { return; } if (args.SenderName == "BinaryLogger") { var parameter = ItemGroupParser.ParsePropertyOrItemList(message, string.Empty, stringTable); construction.Build.AddChild(parameter); return; } if (message.StartsWith(Strings.ItemGroupIncludeMessagePrefix)) { AddItemGroup(args, Strings.ItemGroupIncludeMessagePrefix, new AddItem()); return; } if (message.StartsWith(Strings.OutputItemsMessagePrefix)) { var task = GetTask(args); //this.construction.Build.Statistics.ReportOutputItemMessage(task, message); var folder = task.GetOrCreateNodeWithName <Folder>("OutputItems"); var parameter = ItemGroupParser.ParsePropertyOrItemList(message, Strings.OutputItemsMessagePrefix, stringTable); folder.AddChild(parameter); return; } if (message.StartsWith(Strings.OutputPropertyMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("OutputProperties"); var parameter = ItemGroupParser.ParsePropertyOrItemList(message, Strings.OutputPropertyMessagePrefix, stringTable); folder.AddChild(parameter); return; } if (message.StartsWith(Strings.ItemGroupRemoveMessagePrefix)) { AddItemGroup(args, Strings.ItemGroupRemoveMessagePrefix, new RemoveItem()); return; } if (message.StartsWith(Strings.PropertyGroupMessagePrefix)) { AddPropertyGroup(args, Strings.PropertyGroupMessagePrefix); return; } if (message.StartsWith(Strings.TaskParameterMessagePrefix)) { var task = GetTask(args); if (IgnoreParameters(task)) { return; } //this.construction.Build.Statistics.ReportTaskParameterMessage(task, message); var folder = task.GetOrCreateNodeWithName <Folder>(Strings.Parameters); var parameter = ItemGroupParser.ParsePropertyOrItemList(message, Strings.TaskParameterMessagePrefix, stringTable); folder.AddChild(parameter); return; } // A task from assembly message (parses out the task name and assembly path). var match = Strings.UsingTask(message); if (match.Success) { construction.SetTaskAssembly( stringTable.Intern(match.Groups["task"].Value), stringTable.Intern(match.Groups["assembly"].Value)); return; } if (args is TaskCommandLineEventArgs taskArgs) { if (AddCommandLine(taskArgs)) { return; } } // Just the generic log message or something we currently don't handle in the object model. AddMessage(args, message); }
public void Process(BuildMessageEventArgs args) { // Task Input / Outputs if (args.Message.StartsWith(TaskParameterMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("Parameters"); var parameter = ItemGroupParser.ParsePropertyOrItemList(args.Message, TaskParameterMessagePrefix, stringTable); folder.AddChild(parameter); } else if (args.Message.StartsWith(OutputItemsMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("OutputItems"); var parameter = ItemGroupParser.ParsePropertyOrItemList(args.Message, OutputItemsMessagePrefix, stringTable); folder.AddChild(parameter); } else if (args.Message.StartsWith(OutputPropertyMessagePrefix)) { var task = GetTask(args); var folder = task.GetOrCreateNodeWithName <Folder>("OutputProperties"); var parameter = ItemGroupParser.ParsePropertyOrItemList(args.Message, OutputPropertyMessagePrefix, stringTable); folder.AddChild(parameter); } // Item / Property groups else if (args.Message.StartsWith(PropertyGroupMessagePrefix)) { AddPropertyGroup(args, PropertyGroupMessagePrefix); } else if (args.Message.StartsWith(ItemGroupIncludeMessagePrefix)) { AddItemGroup(args, ItemGroupIncludeMessagePrefix, new AddItem()); } else if (args.Message.StartsWith(ItemGroupRemoveMessagePrefix)) { AddItemGroup(args, ItemGroupRemoveMessagePrefix, new RemoveItem()); } else { // This was command line arguments for task var taskArgs = args as TaskCommandLineEventArgs; if (taskArgs != null) { AddCommandLine(taskArgs); return; } // A task from assembly message (parses out the task name and assembly path). const string taskAssemblyPattern = "Using \"(?<task>.+)\" task from (assembly|the task factory) \"(?<assembly>.+)\"\\."; var match = Regex.Match(args.Message, taskAssemblyPattern); if (match.Success) { construction.SetTaskAssembly( stringTable.Intern(match.Groups["task"].Value), stringTable.Intern(match.Groups["assembly"].Value)); } else { // Just the generic log message or something we currently don't handle in the object model. AddMessage(args, args.Message); } } }