Beispiel #1
0
        /// <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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
                }
            }
        }