diff --git a/source/ProtocolGenerator/Domain.cs b/source/ProtocolGenerator/Domain.cs index 9bce5337cfee664063d5aa7edd88e192d5d6730b..16815cb1dc521d415dd83c8f0ef86fa9ebd96733 100644 --- a/source/ProtocolGenerator/Domain.cs +++ b/source/ProtocolGenerator/Domain.cs @@ -55,6 +55,10 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator [JsonProperty("experimental")] public bool IsExperimental { get; set; } + [JsonProperty("deprecated")] + public bool IsDeprecated { get; set; } + + public string[] Dependencies { get; set; } public Command GetCommand(string name) diff --git a/source/ProtocolGenerator/Program.cs b/source/ProtocolGenerator/Program.cs index 574676d9fd8b442bcf55bda9b5361508bcaff083..3587e5184e464ecb78193d0e1ffff76fbdddb66a 100644 --- a/source/ProtocolGenerator/Program.cs +++ b/source/ProtocolGenerator/Program.cs @@ -28,16 +28,20 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator { // At this point in time, we only process the most recent Chrome // and iOS (Safari) protocols. - Dictionary<string, string> protocolFiles = new Dictionary<string, string>(); + Dictionary<string, string[]> protocolFiles = new Dictionary<string, string[]> + { + {"Chrome", new [] { "js_protocol.json", "browser_protocol.json" } }, + {"iOS", new [] { "Inspector-iOS-9.3.json" } } + }; + + //protocolFiles.Add("Chrome-0.1", "Inspector-0.1.json"); //protocolFiles.Add("Chrome-1.0", "Inspector-1.0.json"); //protocolFiles.Add("Chrome", "Inspector-1.1.json"); - protocolFiles.Add("Chrome", "browser_protocol.json"); - protocolFiles.Add("ChromeJS", "js_protocol.json"); //protocolFiles.Add("iOS-7.0", "Inspector-iOS-7.0.json"); //protocolFiles.Add("iOS-8.0", "Inspector-iOS-8.0.json"); //protocolFiles.Add("iOS-9.0", "Inspector-iOS-9.0.json"); - protocolFiles.Add("iOS", "Inspector-iOS-9.3.json"); + Collection<Protocol> protocols = new Collection<Protocol>(); diff --git a/source/ProtocolGenerator/Protocol.cs b/source/ProtocolGenerator/Protocol.cs index 1f5ff07a73dd3593c4dc464a322093524c1f3fac..a2f692395e9e003b4b992855ac341de2ff768f0f 100644 --- a/source/ProtocolGenerator/Protocol.cs +++ b/source/ProtocolGenerator/Protocol.cs @@ -5,57 +5,27 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator { public class Protocol { - public Protocol() - { - this.Compatible = new Collection<string>(); - this.Domains = new Collection<Domain>(); - } + public Collection<string> Compatible { get; set; } = new Collection<string>(); - public Collection<string> Compatible - { - get; - set; - } - - public Version Version - { - get; - set; - } + public Version Version { get; set; } - public Collection<Domain> Domains - { - get; - set; - } + public Collection<Domain> Domains { get; set; } = new Collection<Domain>(); - public string SourceFile - { - get; - set; - } + public string[] SourceFiles { get; set; } - public string Alias - { - get; - set; - } + public string Alias { get; set; } public Domain GetDomain(string name) { - return this.Domains.SingleOrDefault(d => string.Equals(d.Name, name, System.StringComparison.OrdinalIgnoreCase)); + return Domains.SingleOrDefault(d => string.Equals(d.Name, name, System.StringComparison.OrdinalIgnoreCase)); } public override string ToString() { - if(this.SourceFile != null) - { - return $"{this.Alias} ({this.SourceFile})"; - } - else - { - return this.Alias; - } + if (SourceFiles?.Any() == true) + return $"{Alias} ({string.Join(", ", SourceFiles)})"; + + return Alias; } } } diff --git a/source/ProtocolGenerator/ProtocolProcessor.cs b/source/ProtocolGenerator/ProtocolProcessor.cs index 2286424ad44295645d84ee2932fa53e860bae2e2..481821acf7b9d41661e4fa89548a232df866c75b 100644 --- a/source/ProtocolGenerator/ProtocolProcessor.cs +++ b/source/ProtocolGenerator/ProtocolProcessor.cs @@ -3,8 +3,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace MasterDevs.ChromeDevTools.ProtocolGenerator { @@ -82,22 +80,39 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator property.TypeReference = explicitMappings[fullReferenceName]; } } - else if(property.Items != null) + else if (property.Items != null) { ResolveTypeReferences(protocol, domain, property.Items, explicitMappings); } } - public static Protocol LoadProtocol(string path, string alias) + public static Protocol LoadProtocol(string[] paths, string alias) { - string json = File.ReadAllText(path); - JsonSerializerSettings settings = new JsonSerializerSettings(); - settings.MissingMemberHandling = MissingMemberHandling.Error; - settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; + if (paths == null || paths.Length < 1) + throw new ArgumentException("Must specify at least one path", nameof(paths)); + + JsonSerializerSettings settings = new JsonSerializerSettings + { + MissingMemberHandling = MissingMemberHandling.Error, + MetadataPropertyHandling = MetadataPropertyHandling.Ignore + }; + + string json = File.ReadAllText(paths[0]); Protocol p = JsonConvert.DeserializeObject<Protocol>(json, settings); - p.SourceFile = path; + p.SourceFiles = paths; p.Alias = alias; + if (paths.Length > 1) + { + foreach (var path in paths.Skip(1)) + { + json = File.ReadAllText(path); + Protocol partial = JsonConvert.DeserializeObject<Protocol>(json, settings); + foreach (var domain in partial.Domains) + p.Domains.Add(domain); + } + } + foreach (var domain in p.Domains) { foreach (var command in domain.Commands)