| Index: lib/dom/scripts/systemhtml.py
|
| diff --git a/lib/dom/scripts/systemhtml.py b/lib/dom/scripts/systemhtml.py
|
| index 1350ecfe515806548d5fe18b8375190333c945de..161627b9c951ac9275d6652b957b2e72c9b16cd2 100644
|
| --- a/lib/dom/scripts/systemhtml.py
|
| +++ b/lib/dom/scripts/systemhtml.py
|
| @@ -589,7 +589,7 @@ def EmitHtmlElementFactoryConstructors(emitter, infos, typename, class_name):
|
| CONSTRUCTOR=constructor_info.ConstructorFullName(),
|
| CLASS=class_name,
|
| TAG=info.tag,
|
| - PARAMS=constructor_info.ParametersInterfaceDeclaration())
|
| + PARAMS=constructor_info.ParametersInterfaceDeclaration(DartType))
|
| for param in constructor_info.param_infos:
|
| inits.Emit(' if ($E != null) _e.$E = $E;\n', E=param.name)
|
|
|
| @@ -622,30 +622,32 @@ def DomToHtmlEvent(event_name):
|
| # ------------------------------------------------------------------------------
|
| class HtmlSystemShared(object):
|
|
|
| - def __init__(self, database):
|
| + def __init__(self, context):
|
| self._event_classes = set()
|
| self._seen_event_names = {}
|
| - self._database = database
|
| - self._inheritance_closure = _ComputeInheritanceClosure(database)
|
| - self._html_renames = self._MakeHtmlRenames()
|
| + self._database = context.database
|
| + self._type_registry = context.type_registry
|
| + self._inheritance_closure = _ComputeInheritanceClosure(self._database)
|
|
|
| - def _HasAncestor(self, interface, names_to_match):
|
| + @staticmethod
|
| + def _HasAncestor(database, interface, names_to_match):
|
| for parent in interface.parents:
|
| if parent.type.id in names_to_match:
|
| return True
|
| - if not self._database.HasInterface(parent.type.id):
|
| + if not database.HasInterface(parent.type.id):
|
| continue
|
| - parent_interface = self._database.GetInterface(parent.type.id)
|
| - if self._HasAncestor(parent_interface, names_to_match):
|
| + parent_interface = database.GetInterface(parent.type.id)
|
| + if HtmlSystemShared._HasAncestor(database, parent_interface, names_to_match):
|
| return True
|
| return False
|
|
|
| - def _MakeHtmlRenames(self):
|
| + @staticmethod
|
| + def MakeHtmlRenames(database):
|
| html_renames = {}
|
|
|
| - for interface in self._database.GetInterfaces():
|
| + for interface in database.GetInterfaces():
|
| if (interface.id.startswith('HTML') and
|
| - self._HasAncestor(interface, ['Element', 'Document'])):
|
| + HtmlSystemShared._HasAncestor(database, interface, ['Element', 'Document'])):
|
| html_renames[interface.id] = interface.id[4:]
|
|
|
| for subclass in _html_strip_webkit_prefix_classes:
|
| @@ -659,15 +661,12 @@ class HtmlSystemShared(object):
|
|
|
| return html_renames
|
|
|
| - def _HTMLInterfaceName(self, interface_name):
|
| - return self._html_renames.get(interface_name, interface_name)
|
| -
|
| def _FindMatch(self, interface_name, member, member_prefix, candidates):
|
| for ancestor_name in self._AllAncestorInterfaces(interface_name):
|
| - name = self._HTMLInterfaceName(ancestor_name) + '.' + member
|
| + name = self._DartType(ancestor_name) + '.' + member
|
| if name in candidates:
|
| return name
|
| - name = (self._HTMLInterfaceName(interface_name) + '.' + member_prefix +
|
| + name = (self._DartType(interface_name) + '.' + member_prefix +
|
| member)
|
| if name in candidates:
|
| return name
|
| @@ -738,9 +737,6 @@ class HtmlSystemShared(object):
|
| raise Exception('Only one parent event class allowed ' + interface.id)
|
| return parent_event_classes[0]
|
|
|
| - def _ImplClassName(self, type_name):
|
| - return '_' + type_name + 'Impl'
|
| -
|
| # This returns two values: the first is whether or not an "on" property should
|
| # be generated for the interface, and the second is the event attributes to
|
| # generate if it should.
|
| @@ -756,21 +752,16 @@ class HtmlSystemShared(object):
|
| def IsPrivate(self, name):
|
| return name.startswith('_')
|
|
|
| - def DartType(self, idl_type):
|
| - type_info = TypeRegistry().TypeInfo(idl_type)
|
| - return self._HTMLInterfaceName(type_info.dart_type())
|
| + def _DartType(self, type_name):
|
| + return self._type_registry.DartType(type_name)
|
|
|
| -class HtmlSystem(System):
|
|
|
| - def __init__(self, context):
|
| - super(HtmlSystem, self).__init__(context)
|
| - self._shared = HtmlSystemShared(self._database)
|
| -
|
| -class HtmlInterfacesSystem(HtmlSystem):
|
| +class HtmlInterfacesSystem(System):
|
|
|
| def __init__(self, context, backend):
|
| super(HtmlInterfacesSystem, self).__init__(context)
|
| self._backend = backend
|
| + self._shared = HtmlSystemShared(context)
|
| self._dart_interface_file_paths = []
|
| self._elements_factory_emitter = None
|
|
|
| @@ -803,8 +794,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
|
| system._database, interface)
|
| self._system = system
|
| self._shared = system._shared
|
| - self._html_interface_name = self._shared._HTMLInterfaceName(
|
| - self._interface.id)
|
| + self._html_interface_name = system._type_registry.InterfaceName(self._interface.id)
|
| self._backend = system._backend.ImplementationGenerator(self._interface)
|
|
|
| def StartInterface(self):
|
| @@ -828,14 +818,14 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
|
| # TODO(vsm): Remove source_filter.
|
| if MatchSourceFilter(parent):
|
| # Parent is a DOM type.
|
| - extends.append(self._shared.DartType(parent.type.id))
|
| + extends.append(self._DartType(parent.type.id))
|
| elif '<' in parent.type.id:
|
| # Parent is a Dart collection type.
|
| # TODO(vsm): Make this check more robust.
|
| - extends.append(self._shared.DartType(parent.type.id))
|
| + extends.append(self._DartType(parent.type.id))
|
| else:
|
| suppressed_extends.append('%s.%s' %
|
| - (self._common_prefix, self._shared.DartType(parent.type.id)))
|
| + (self._common_prefix, self._DartType(parent.type.id)))
|
|
|
| comment = ' extends'
|
| extends_str = ''
|
| @@ -909,9 +899,8 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
|
| self._members_emitter.Emit(
|
| '\n'
|
| ' $CTOR($PARAMS);\n',
|
| - CTOR=self._shared.DartType(constructor_info.ConstructorFullName()),
|
| - PARAMS=constructor_info.ParametersInterfaceDeclaration(
|
| - self._shared.DartType))
|
| + CTOR=self._DartType(constructor_info.ConstructorFullName()),
|
| + PARAMS=constructor_info.ParametersInterfaceDeclaration(self._DartType))
|
|
|
| element_type = MaybeTypedArrayElementTypeInHierarchy(
|
| self._interface, self._system._database)
|
| @@ -925,7 +914,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
|
| ' $CTOR.fromBuffer(ArrayBuffer buffer,'
|
| ' [int byteOffset, int length]);\n',
|
| CTOR=self._interface.id,
|
| - TYPE=self._shared.DartType(element_type))
|
| + TYPE=self._DartType(element_type))
|
|
|
| self._GenerateEvents()
|
|
|
| @@ -967,36 +956,40 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
|
| self._members_emitter.Emit('\n $MODIFIER$TYPE $NAME;\n',
|
| MODIFIER=modifier,
|
| NAME=html_name,
|
| - TYPE=self._shared.DartType(attribute.type.id))
|
| + TYPE=self._DartType(attribute.type.id))
|
| self._backend.AddAttribute(attribute, html_name, read_only)
|
|
|
| def AddSecondaryAttribute(self, interface, attribute):
|
| self._backend.SecondaryContext(interface)
|
| self.AddAttribute(attribute, True)
|
|
|
| - def AddOperation(self, info, is_secondary=False):
|
| + def AddOperation(self, info, skip_declaration=False):
|
| """
|
| Arguments:
|
| operations - contains the overloads, one or more operations with the same
|
| name.
|
| """
|
| - html_name = self._shared.RenameInHtmlLibrary(
|
| - self._interface.id, info.name)
|
| - if html_name and not self._shared.IsPrivate(html_name) and not is_secondary:
|
| + html_name = self._shared.RenameInHtmlLibrary(self._interface.id, info.name)
|
| + if not html_name:
|
| + if info.name == 'item':
|
| + # FIXME: item should be renamed to operator[], not removed.
|
| + self._backend.AddOperation(info, '_item')
|
| + return
|
| +
|
| + if not self._shared.IsPrivate(html_name) and not skip_declaration:
|
| self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */',
|
| DOMINTERFACE=info.overloads[0].doc_js_interface_name,
|
| DOMNAME=info.name)
|
|
|
| self._members_emitter.Emit('\n'
|
| ' $TYPE $NAME($PARAMS);\n',
|
| - TYPE=self._shared.DartType(info.type_name),
|
| + TYPE=self._DartType(info.type_name),
|
| NAME=html_name,
|
| - PARAMS=info.ParametersInterfaceDeclaration(
|
| - self._shared.DartType))
|
| - self._backend.AddOperation(info)
|
| + PARAMS=info.ParametersInterfaceDeclaration(self._DartType))
|
| + self._backend.AddOperation(info, html_name)
|
|
|
| def AddStaticOperation(self, info):
|
| - self._backend.AddStaticOperation(info)
|
| + self.AddOperation(info, True)
|
|
|
| def AddSecondaryOperation(self, interface, info):
|
| self._backend.SecondaryContext(interface)
|
| @@ -1006,7 +999,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
|
| self._backend.FinishInterface()
|
|
|
| def AddConstant(self, constant):
|
| - type = TypeOrNothing(DartType(constant.type.id), constant.type.id)
|
| + type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id)
|
| self._members_emitter.Emit('\n static final $TYPE$NAME = $VALUE;\n',
|
| NAME=constant.id,
|
| TYPE=type,
|
| @@ -1077,7 +1070,7 @@ class HtmlGeneratorDummyBackend(object):
|
| def AddAttribute(self, attribute, html_name, read_only):
|
| pass
|
|
|
| - def AddOperation(self, info):
|
| + def AddOperation(self, info, html_name):
|
| pass
|
|
|
|
|
| @@ -1093,9 +1086,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| def __init__(self, system, interface):
|
| super(HtmlFrogClassGenerator, self).__init__(
|
| system, interface, None, None)
|
| - self._shared = self._system._shared
|
| - self._html_interface_name = self._shared._HTMLInterfaceName(
|
| - self._interface.id)
|
| + self._html_interface_name = system._type_registry.InterfaceName(self._interface.id)
|
|
|
| def HasImplementation(self):
|
| return not (IsPureInterface(self._interface.id) or
|
| @@ -1123,12 +1114,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| return True
|
|
|
| def _ImplClassName(self, type_name):
|
| - return self._shared._ImplClassName(type_name)
|
| -
|
| - def _NarrowToImplementationType(self, type_name):
|
| - if self._ShouldNarrowToImplementationType(type_name):
|
| - return self._ImplClassName(self._shared.DartType(type_name))
|
| - return self._shared.DartType(type_name)
|
| + return '_%sImpl' % type_name
|
|
|
| def StartInterface(self):
|
| interface = self._interface
|
| @@ -1145,7 +1131,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| elif IsPureInterface(supertype):
|
| pass
|
| else:
|
| - base = self._ImplClassName(self._shared._HTMLInterfaceName(supertype))
|
| + base = self._ImplClassName(self._DartType(supertype))
|
|
|
| native_spec = MakeNativeSpec(interface.javascript_binding_name)
|
|
|
| @@ -1155,7 +1141,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| implements = [self._html_interface_name]
|
| element_type = MaybeTypedArrayElementType(self._interface)
|
| if element_type:
|
| - implements.append('List<%s>' % self._shared.DartType(element_type))
|
| + implements.append('List<%s>' % self._DartType(element_type))
|
| implements.append('JavaScriptIndexingBehavior')
|
|
|
| template_file = 'impl_%s.darttemplate' % self._html_interface_name
|
| @@ -1187,7 +1173,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| template,
|
| FACTORYPROVIDER=factory_provider,
|
| CONSTRUCTOR=self._html_interface_name,
|
| - PARAMETERS=constructor_info.ParametersImplementationDeclaration(),
|
| + PARAMETERS=constructor_info.ParametersImplementationDeclaration(self._DartType),
|
| NAMED_CONSTRUCTOR=constructor_info.name or self._html_interface_name,
|
| ARGUMENTS=constructor_info.ParametersAsArgumentList())
|
|
|
| @@ -1237,7 +1223,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| if self._interface.id != 'NodeList':
|
| template_file = 'immutable_list_mixin.darttemplate'
|
| template = self._system._templates.Load(template_file)
|
| - self._members_emitter.Emit(template, E=self._shared.DartType(element_type))
|
| + self._members_emitter.Emit(template, E=self._DartType(element_type))
|
|
|
| def AddAttribute(self, attribute, html_name, read_only):
|
| if self._HasCustomImplementation(attribute.id):
|
| @@ -1310,7 +1296,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| NAME=attr.id,
|
| TYPE=self._NarrowInputType(attr.type.id))
|
|
|
| - def AddOperation(self, info):
|
| + def AddOperation(self, info, html_name):
|
| """
|
| Arguments:
|
| info: An OperationInfo object.
|
| @@ -1318,9 +1304,8 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
| if self._HasCustomImplementation(info.name):
|
| return
|
|
|
| - html_name = self._shared.RenameInHtmlLibrary(
|
| - self._interface.id, info.name, implementation_class=True)
|
| - if not html_name:
|
| + # FIXME: support static operations.
|
| + if info.IsStatic():
|
| return
|
|
|
| # Do we need a native body?
|
| @@ -1352,7 +1337,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
|
|
|
| # ------------------------------------------------------------------------------
|
|
|
| -class HtmlFrogSystem(HtmlSystem):
|
| +class HtmlFrogSystem(System):
|
|
|
| def __init__(self, context):
|
| super(HtmlFrogSystem, self).__init__(context)
|
|
|