Newer
Older
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}");
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
}
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
{
}
}
}
}
}