File: CombineLinkerXmlFiles.cs
Web Access
Project: src\runtime\src\tools\illink\src\ILLink.Tasks\ILLink.Tasks.csproj (ILLink.Tasks)
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System.Xml;
using System.Xml.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace ILLink.Tasks
{
    /// <summary>
    /// Combines multiple ILLink xml files into a single xml file.
    /// </summary>
    public class CombineLinkerXmlFiles : Task
    {
        /// <summary>
        /// The individual ILLink xml files that will be combined into one.
        /// </summary>
        [Required]
        public ITaskItem[] LinkerXmlFiles { get; set; }

        /// <summary>
        /// The path to the file to generate.
        /// </summary>
        [Required]
        public string CombinedLinkerXmlFile { get; set; }

        public override bool Execute()
        {
            var combined = new XElement("linker");
            foreach (var linkerXmlFile in LinkerXmlFiles)
            {
                XDocument subFile = XDocument.Load(linkerXmlFile.ItemSpec);

                foreach (var element in subFile.Root.Elements())
                {
                    combined.Add(element);
                }
            }

            var xdoc = new XDocument(combined);

            XmlWriterSettings xws = new XmlWriterSettings
            {
                Indent = true,
                OmitXmlDeclaration = true
            };

            using (XmlWriter xw = XmlWriter.Create(CombinedLinkerXmlFile, xws))
            {
                xdoc.Save(xw);
            }

            return true;
        }
    }
}