Index: Source/bindings/scripts/interface_dependency_resolver.py |
diff --git a/Source/bindings/scripts/interface_dependency_resolver.py b/Source/bindings/scripts/interface_dependency_resolver.py |
index 0db1ca18328fd4551dcad32a81f5a54c1055dca0..f755d878ae24d6bf1de1b00a1751673e7fd550b1 100644 |
--- a/Source/bindings/scripts/interface_dependency_resolver.py |
+++ b/Source/bindings/scripts/interface_dependency_resolver.py |
@@ -44,16 +44,12 @@ from utilities import idl_filename_to_component, is_valid_component_dependency |
# Note that this moves the extended attribute from the interface to the member, |
# which changes the semantics and yields different code than the same extended |
# attribute on the main interface. |
-# |
-# Paired with the extended attribute name is its value type; needed to be able |
-# to correctly merge interface-level occurrences with ones that may |
-# be present on the method/attribute/constant. |
-DEPENDENCY_EXTENDED_ATTRIBUTES = { |
- 'Conditional': 'string', |
- 'PerContextEnabled': 'string', |
- 'RuntimeEnabled': 'string', |
- 'TypeChecking': 'list', |
-} |
+DEPENDENCY_EXTENDED_ATTRIBUTES = frozenset([ |
+ 'Conditional', |
+ 'PerContextEnabled', |
+ 'RuntimeEnabled', |
+ 'TypeChecking', |
+]) |
class InterfaceDependencyResolver(object): |
@@ -248,7 +244,7 @@ def transfer_extended_attributes(dependency_interface, dependency_interface_base |
merged_extended_attributes = dict( |
(key, value) |
for key, value in dependency_interface.extended_attributes.iteritems() |
- if key in DEPENDENCY_EXTENDED_ATTRIBUTES.keys()) |
+ if key in DEPENDENCY_EXTENDED_ATTRIBUTES) |
# A partial interface's members are implemented as static member functions |
# in a separate C++ class. This class name is stored in |
@@ -280,20 +276,8 @@ def transfer_extended_attributes(dependency_interface, dependency_interface_base |
'ImplementedAs', dependency_interface_basename)) |
def update_attributes(attributes, extras): |
- def to_list(x): |
- if type(x) is list: |
- return x |
- else: |
- return [x] |
- |
for key, value in extras.items(): |
- if key in attributes: |
- # Interface-level extended attributes do not take precedence |
- # over same attribute at the method/attribute/const-level. |
- # If the attribute value is a list, the two are combined. |
- if DEPENDENCY_EXTENDED_ATTRIBUTES[key] == 'list': |
- attributes[key] = to_list(attributes[key]) + to_list(value) |
- else: |
+ if key not in attributes: |
attributes[key] = value |
for attribute in dependency_interface.attributes: |