Пример #1
0
        public void WarningRaised(object sender, BuildWarningEventArgs args)
        {
            try
            {
                lock (syncLock)
                {
                    TreeNode parent = FindParent(args.BuildEventContext);
                    if (parent == null)
                    {
                        parent = Build;
                    }

                    var warning = new Warning();

                    string text = args.Message;

                    if (parent is ResolveAssemblyReferenceTask rar)
                    {
                        var match = Strings.IsFoundConflicts(text);
                        if (match.Success)
                        {
                            string details = match.Groups[2].Value;
                            // https://github.com/KirillOsenkov/MSBuildStructuredLog/issues/443
                            ItemGroupParser.ParseThereWasAConflict(warning, details, stringTable);
                            text = text.GetFirstLine();
                        }
                    }

                    parent = parent.GetOrCreateNodeWithName <Folder>(Strings.Warnings);

                    Populate(warning, args, text);

                    parent.AddChild(warning);
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
Пример #2
0
        private bool ProcessRAR(ResolveAssemblyReferenceTask task, ref TreeNode node, string message)
        {
            Folder inputs  = task.Inputs;
            Folder results = task.Results;

            node = results ?? inputs;

            if (message.StartsWith("    ", StringComparison.Ordinal))
            {
                message = message.Substring(4);

                var parameter = node?.FindLastChild <Parameter>();
                if (parameter != null)
                {
                    bool thereWasAConflict = Strings.IsThereWasAConflictPrefix(parameter.Name);
                    if (thereWasAConflict)
                    {
                        if (construction.Build.IsMSBuildVersionAtLeast(16, 9))
                        {
                            // https://github.com/KirillOsenkov/MSBuildStructuredLog/issues/443
                            ItemGroupParser.ParseThereWasAConflict(parameter, message, stringTable);
                        }
                        else
                        {
                            HandleThereWasAConflict(parameter, message, stringTable);
                        }

                        return(true);
                    }

                    if (!string.IsNullOrWhiteSpace(message))
                    {
                        node = parameter;

                        if (message.StartsWith("    ", StringComparison.Ordinal))
                        {
                            message = message.Substring(4);

                            var lastItem = parameter.FindLastChild <Item>();

                            // only indent if it's not a "For SearchPath..." message - that one needs to be directly under parameter
                            // also don't indent if it's under AssemblyFoldersEx in Results
                            if (lastItem != null &&
                                !Strings.ForSearchPathPrefix.IsMatch(message) &&
                                !parameter.Name.StartsWith("AssemblyFoldersEx", StringComparison.Ordinal))
                            {
                                node = lastItem;
                            }
                        }

                        if (!string.IsNullOrEmpty(message))
                        {
                            var equals = message.IndexOf('=');
                            if (equals != -1 && message.IndexOfFirstLineBreak() == -1)
                            {
                                var kvp      = TextUtilities.ParseNameValue(message);
                                var metadata = new Metadata
                                {
                                    Name  = Intern(kvp.Key.TrimEnd(space)),
                                    Value = Intern(kvp.Value.TrimStart(space))
                                };
                                node.Children.Add(metadata);
                                metadata.Parent = node;
                            }
                            else
                            {
                                node.AddChild(new Item
                                {
                                    Text = Intern(message)
                                });
                            }
                        }
                    }

                    return(true);
                }
            }
            else
            {
                if (results == null)
                {
                    bool isResult = Strings.UnifiedPrimaryReferencePrefix.IsMatch(message) ||
                                    Strings.PrimaryReferencePrefix.IsMatch(message) ||
                                    Strings.DependencyPrefix.IsMatch(message) ||
                                    Strings.UnifiedDependencyPrefix.IsMatch(message) ||
                                    Strings.AssemblyFoldersExLocation.IsMatch(message) ||
                                    Strings.IsThereWasAConflictPrefix(message);

                    if (isResult)
                    {
                        results      = task.GetOrCreateNodeWithName <Folder>(Strings.Results);
                        task.Results = results;
                        node         = results;
                    }
                    else
                    {
                        if (inputs == null)
                        {
                            inputs      = task.GetOrCreateNodeWithName <Folder>(Strings.Inputs);
                            task.Inputs = inputs;
                        }

                        node = inputs;
                    }
                }
                else
                {
                    node = results;
                }

                var    parameter = new Parameter();
                string parameterName;

                if (Strings.IsThereWasAConflictPrefix(message))
                {
                    ItemGroupParser.ParseThereWasAConflict(parameter, message, stringTable);
                    parameterName = message.GetFirstLine();
                }
                else
                {
                    parameterName = message.TrimEnd(':');
                }

                parameter.Name = Intern(parameterName);

                node.AddChild(parameter);
                return(true);
            }

            return(false);
        }