private void ProcessTaskParameter()

in src/StructuredLogger/Construction/MessageProcessor.cs [160:229]


        private void ProcessTaskParameter(TaskParameterEventArgs args)
        {
            string itemType = args.ItemType;
            var items = args.Items;
            var kind = args.Kind;

            NamedNode parent = null;
            BaseNode node = null;
            if (kind == TaskParameterMessageKind.TaskInput || kind == TaskParameterMessageKind.TaskOutput)
            {
                var task = GetTask(args);
                if (task == null || IgnoreParameters(task))
                {
                    return;
                }

                bool isOutput = kind == TaskParameterMessageKind.TaskOutput;

                string folderName = isOutput ? Strings.OutputItems : Strings.Parameters;
                parent = task.GetOrCreateNodeWithName<Folder>(folderName);

                node = CreateParameterNode(itemType, items, isOutput);
            }
            else if (
                kind == TaskParameterMessageKind.AddItem ||
                kind == TaskParameterMessageKind.RemoveItem ||
                kind == TaskParameterMessageKind.SkippedTargetInputs ||
                kind == TaskParameterMessageKind.SkippedTargetOutputs)
            {
                parent = GetTarget(args);

                NamedNode named;
                if (kind == TaskParameterMessageKind.AddItem)
                {
                    named = new AddItem
                    {
                        LineNumber = args.LineNumber
                    };
                }
                else if (kind == TaskParameterMessageKind.RemoveItem)
                {
                    named = new RemoveItem
                    {
                        LineNumber = args.LineNumber
                    };
                }
                else
                {
                    named = new Folder();
                    if (kind == TaskParameterMessageKind.SkippedTargetInputs)
                    {
                        itemType = Strings.Inputs;
                    }
                    else
                    {
                        itemType = Strings.Outputs;
                    }
                }

                named.Name = itemType;

                AddItems(items, named);
                node = named;
            }

            if (node != null && parent != null)
            {
                parent.AddChild(node);
            }
        }