Skip to content
Snippets Groups Projects
ProtocolMerger.cs 2.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System;
    using System.Collections.Generic;
    
    using System.Collections.ObjectModel;
    
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MasterDevs.ChromeDevTools.ProtocolGenerator
    {
        class ProtocolMerger
        {
            public static void Merge(Protocol source, Protocol target)
            {
                foreach (var domain in source.Domains)
                {
    
                    if (!target.Domains.Contains(domain, NameEqualityComparer<Domain>.Instance))
    
                    {
                        target.Domains.Add(domain);
                    }
                    else
                    {
    
                        Merge(source, domain, target.Domains.Single(t => NameEqualityComparer<Domain>.Instance.Equals(domain, t)));
    
            static void Merge(Protocol protocol, Domain source, Domain target)
    
                Merge(protocol, source, source.Commands, target.Commands);
                Merge(protocol, source, source.Events, target.Events);
                Merge(protocol, source, source.Types, target.Types);
            }
    
            static void Merge<T>(Protocol protocol, Domain domain, Collection<T> source, Collection<T> target)
                where T : ProtocolItem
            {
                foreach (var item in source)
    
                    if (!target.Contains(item, NameEqualityComparer<T>.Instance))
    
                        target.Add(item);
    
                        var targetItem = target.Single(t => NameEqualityComparer<T>.Instance.Equals(item, t));
    
                        if (!targetItem.Equals(item))
    
                            Console.WriteLine($"{protocol.Alias};{domain.Name};{item.Name};{item};{targetItem};{typeof(T).Name}");
    
                            foreach (var v in item.SupportedBy)
    
                                targetItem.SupportedBy.Add(v);