using System; using System.Collections.Generic; 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.Instance)) { target.Domains.Add(domain); } else { Merge(source, domain, target.Domains.Single(t => NameEqualityComparer.Instance.Equals(domain, t))); } } } static void Merge(Protocol protocol, Domain source, Domain target) { foreach (var command in source.Commands) { if (!target.Commands.Contains(command, NameEqualityComparer.Instance)) { target.Commands.Add(command); } else { var targetCommand = target.Commands.Single(t => NameEqualityComparer.Instance.Equals(command, t)); if(!targetCommand.Equals(command)) { Console.WriteLine($"{protocol.Alias};{source.Name};{command.Name};{command};{targetCommand}"); } else { foreach (var v in command.SupportedBy) { targetCommand.SupportedBy.Add(v); } } } } foreach (var @event in source.Events) { if (!target.Events.Contains(@event, NameEqualityComparer.Instance)) { target.Events.Add(@event); } else { } } foreach (var type in source.Types) { if (!target.Types.Contains(type, NameEqualityComparer.Instance)) { target.Types.Add(type); } else { } } } } }