Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(897)

Unified Diff: third_party/WebKit/Source/bindings/scripts/v8_union.py

Issue 2750003003: bindings: Correctly expand all class/header dependencies in unions. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/scripts/v8_union.py
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_union.py b/third_party/WebKit/Source/bindings/scripts/v8_union.py
index c277fb598cb5f74c4c41cd72de4e8dc8a2279804..da193080c9f36e8a7bad57a7d3c9631b69d80d6d 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_union.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_union.py
@@ -34,7 +34,7 @@ header_forward_decls = set()
header_includes = set()
-def container_context(union_type, interfaces_info):
+def container_context(union_type, info_provider):
cpp_includes.clear()
header_forward_decls.clear()
header_includes.clear()
@@ -55,7 +55,7 @@ def container_context(union_type, interfaces_info):
record_type = None
string_type = None
for member in sorted(union_type.flattened_member_types, key=lambda m: m.name):
- context = member_context(member, interfaces_info)
+ context = member_context(member, info_provider)
members.append(context)
if member.base_type == 'ArrayBuffer':
if array_buffer_type:
@@ -123,7 +123,8 @@ def container_context(union_type, interfaces_info):
}
-def _update_includes_and_forward_decls(member, interface_info):
+def _update_includes_and_forward_decls(member, info_provider):
+ interface_info = info_provider.interfaces_info.get(member.name, None)
if interface_info:
cpp_includes.update(interface_info.get(
'dependencies_include_paths', []))
@@ -135,16 +136,22 @@ def _update_includes_and_forward_decls(member, interface_info):
header_forward_decls.add(member.implemented_as)
else:
if member.is_record_type:
- # The headers for both T and U must be present when
- # Vector<std::pair<T, U>> is declared.
- header_includes.update(member.includes_for_type())
+ _update_includes_and_forward_decls(member.key_type, info_provider)
+ _update_includes_and_forward_decls(member.value_type, info_provider)
+ elif member.is_array_or_sequence_type:
+ _update_includes_and_forward_decls(member.element_type, info_provider)
else:
- cpp_includes.update(member.includes_for_type())
+ if member.is_union_type:
+ # Reaching this block means we have a union that is inside a
+ # record or sequence.
+ header_forward_decls.add(member.name)
+ cpp_includes.update([info_provider.include_path_for_union_types(member)])
+ else:
+ cpp_includes.update(member.includes_for_type())
-def member_context(member, interfaces_info):
- interface_info = interfaces_info.get(member.name, None)
- _update_includes_and_forward_decls(member, interface_info)
+def member_context(member, info_provider):
+ _update_includes_and_forward_decls(member, info_provider)
if member.is_nullable:
member = member.inner_type
return {

Powered by Google App Engine
This is Rietveld 408576698