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

Unified Diff: Source/bindings/scripts/compute_interfaces_info.py

Issue 270823002: Fix "implements in RHS file" (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 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
« no previous file with comments | « no previous file | Source/bindings/scripts/utilities.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/compute_interfaces_info.py
diff --git a/Source/bindings/scripts/compute_interfaces_info.py b/Source/bindings/scripts/compute_interfaces_info.py
index 2333f5c1ff2559314b3dcab6d4a811962d7097cb..9e64cd0d56af4881a5aa40d5d1813ee4e9a43b2d 100755
--- a/Source/bindings/scripts/compute_interfaces_info.py
+++ b/Source/bindings/scripts/compute_interfaces_info.py
@@ -173,11 +173,16 @@ def compute_individual_info(idl_filename):
# If not a partial interface, the basename is the interface name
interface_name, _ = os.path.splitext(os.path.basename(idl_filename))
+ # 'implements' statements can be included in either the file for the
+ # implement*ing* interface (lhs of 'implements') or implement*ed* interface
+ # (rhs of 'implements'). Store both for now, then merge to implement*ing*
+ # interface later.
left_interfaces, right_interfaces = get_implements_from_idl(idl_file_contents, interface_name)
interfaces_info[interface_name] = {
'full_path': full_path,
'implemented_as': implemented_as,
+ 'implemented_by_interfaces': left_interfaces, # private, merged to next
'implements_interfaces': right_interfaces,
'include_path': this_include_path,
# FIXME: temporary private field, while removing old treatement of
@@ -193,10 +198,6 @@ def compute_individual_info(idl_filename):
'referenced_interfaces': get_put_forward_interfaces_from_idl(idl_file_contents),
}
- for left_interface_name in left_interfaces:
- interface_info = interfaces_info[left_interface_name]
Nils Barth (inactive) 2014/05/08 06:31:45 This fails with KeyError: 'Window' ...on r-b-t for
- interface_info['implements_interfaces'].append(interface_name)
-
# Record inheritance information
inherited_extended_attributes_by_interface[interface_name] = dict(
(key, value)
@@ -246,6 +247,15 @@ def compute_interfaces_info(idl_files):
compute_inheritance_info(interface_name)
# Compute dependencies
+ # Move implements info from implement*ed* interface (rhs of 'implements')
+ # to implement*ing* interface (lhs of 'implements').
+ # Note that moving an 'implements' statement between implementing and
+ # implemented files does not change the info (or hence cause a rebuild)!
+ for right_interface_name, interface_info in interfaces_info.iteritems():
+ for left_interface_name in interface_info['implemented_by_interfaces']:
+ interfaces_info[left_interface_name]['implements_interfaces'].append(right_interface_name)
+ del interface_info['implemented_by_interfaces']
Nils Barth (inactive) 2014/05/08 06:31:45 We *move* the info, not just copying it, which mea
+
# An IDL file's dependencies are partial interface files that extend it,
# and files for other interfaces that this interfaces implements.
for interface_name, interface_info in interfaces_info.iteritems():
« no previous file with comments | « no previous file | Source/bindings/scripts/utilities.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698