Index: third_party/WebKit/Source/platform/inspector_protocol/CodeGenerator.py |
diff --git a/third_party/WebKit/Source/platform/inspector_protocol/CodeGenerator.py b/third_party/WebKit/Source/platform/inspector_protocol/CodeGenerator.py |
index 57bd6cea47911adae46fbe1d9a00ff449bff0395..8952a946e41123b5b0f9d1a695d8ab266c849384 100644 |
--- a/third_party/WebKit/Source/platform/inspector_protocol/CodeGenerator.py |
+++ b/third_party/WebKit/Source/platform/inspector_protocol/CodeGenerator.py |
@@ -88,6 +88,30 @@ def output_file(file_name): |
return open(file_name, "w") |
+def topsort_domains(): |
+ domains = {} |
+ for domain in json_api["domains"]: |
+ domains[domain["domain"]] = domain |
+ |
+ processed = set() |
+ result = [] |
+ |
+ def process(name): |
+ if name in processed: |
+ return |
+ domain = domains[name] |
+ deps = [] |
+ if "depends" in domain: |
+ for dep in domain["depends"]: |
+ process(dep) |
+ result.append(domain) |
+ processed.add(name) |
+ |
+ for domain in json_api["domains"]: |
+ process(domain["domain"]) |
+ json_api["domains"] = result |
+ |
+ |
def patch_full_qualified_refs(): |
def patch_full_qualified_refs_in_domain(json, domain_name): |
if isinstance(json, list): |
@@ -239,6 +263,7 @@ def create_type_definitions(): |
else: |
type_definitions[domain["domain"] + "." + type["id"]] = create_primitive_type_definition(type["type"]) |
+topsort_domains() |
patch_full_qualified_refs() |
create_type_definitions() |
@@ -305,7 +330,5 @@ def generate(class_name): |
jinja_env = initialize_jinja_env(output_dirname) |
-generate("Backend") |
generate("Dispatcher") |
-generate("Frontend") |
generate("TypeBuilder") |