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

Unified Diff: lib/dom/scripts/systemhtml.py

Issue 10704102: Cleanup attributes generation in dart:html. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: . Created 8 years, 5 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 | « lib/dom/scripts/systemfrog.py ('k') | lib/dom/scripts/systemnative.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/dom/scripts/systemhtml.py
diff --git a/lib/dom/scripts/systemhtml.py b/lib/dom/scripts/systemhtml.py
index b28893e4f83379c479bc8055880621ba07aad8d0..bceccb307a775356a10d7df559d1a8c9cf61853c 100644
--- a/lib/dom/scripts/systemhtml.py
+++ b/lib/dom/scripts/systemhtml.py
@@ -272,11 +272,10 @@ _html_library_remove = set([
])
_html_library_custom = set([
- 'IFrameElement.get:contentWindow',
- 'Window.get:document',
- 'Window.get:top',
- 'Window.get:location',
- 'Window.set:location',
+ 'IFrameElement.contentWindow',
+ 'Window.document',
+ 'Window.top',
+ 'Window.location',
'Window.open',
'IDBDatabase.transaction',
])
@@ -947,46 +946,37 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
def AmendIndexer(self, element_type):
self._backend.AmendIndexer(element_type)
- def AddAttribute(self, attribute):
- self._backend.AddAttribute(attribute)
-
- getter = attribute
- setter = attribute if not IsReadOnly(attribute) else None
- dom_name = DartDomNameOfAttribute(getter)
- html_getter_name = self._shared.RenameInHtmlLibrary(
+ def AddAttribute(self, attribute, is_secondary=False):
+ dom_name = DartDomNameOfAttribute(attribute)
+ html_name = self._shared.RenameInHtmlLibrary(
self._interface.id, dom_name, 'get:')
- html_setter_name = self._shared.RenameInHtmlLibrary(
- self._interface.id, dom_name, 'set:')
-
- if not html_getter_name or self._shared.IsPrivate(html_getter_name):
- getter = None
- if not html_setter_name or self._shared.IsPrivate(html_setter_name):
- setter = None
- if not getter and not setter:
+ if not html_name or self._shared.IsPrivate(html_name):
return
+
+ html_setter_name = self._shared.RenameInHtmlLibrary(
+ self._interface.id, dom_name, 'set:')
+ read_only = IsReadOnly(attribute) or not html_setter_name
+
# We don't yet handle inconsistent renames of the getter and setter yet.
- if html_getter_name and html_setter_name:
- assert html_getter_name == html_setter_name
-
- self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */',
- DOMINTERFACE=getter.doc_js_interface_name,
- DOMNAME=dom_name)
- if (getter and setter and
- getter.type.id == setter.type.id):
- self._members_emitter.Emit('\n $TYPE $NAME;\n',
- NAME=html_getter_name,
- TYPE=self._shared.DartType(getter.type.id))
- return
- if getter and not setter:
- self._members_emitter.Emit('\n final $TYPE $NAME;\n',
- NAME=html_getter_name,
- TYPE=self._shared.DartType(getter.type.id))
- return
- raise Exception('Unexpected getter/setter combination %s %s' %
- (getter, setter))
+ assert(not html_setter_name or html_name == html_setter_name)
- def AddOperation(self, info):
+ if not is_secondary:
+ self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */',
+ DOMINTERFACE=attribute.doc_js_interface_name,
+ DOMNAME=dom_name)
+ modifier = 'final ' if read_only else ''
+ self._members_emitter.Emit('\n $MODIFIER$TYPE $NAME;\n',
+ MODIFIER=modifier,
+ NAME=html_name,
+ TYPE=self._shared.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):
"""
Arguments:
operations - contains the overloads, one or more operations with the same
@@ -994,7 +984,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
"""
html_name = self._shared.RenameInHtmlLibrary(
self._interface.id, info.name)
- if html_name and not self._shared.IsPrivate(html_name):
+ if html_name and not self._shared.IsPrivate(html_name) and not is_secondary:
self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */',
DOMINTERFACE=info.overloads[0].doc_js_interface_name,
DOMNAME=info.name)
@@ -1010,8 +1000,11 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
def AddStaticOperation(self, info):
self._backend.AddStaticOperation(info)
+ def AddSecondaryOperation(self, interface, info):
+ self._backend.SecondaryContext(interface)
+ self.AddOperation(info, True)
+
def FinishInterface(self):
- self._backend.AddSecondaryMembers(self._interface)
self._backend.FinishInterface()
def AddConstant(self, constant):
@@ -1083,7 +1076,7 @@ class HtmlDartInterfaceGenerator(BaseGenerator):
class HtmlGeneratorDummyBackend(object):
- def AddAttribute(self, attribute):
+ def AddAttribute(self, attribute, html_name, read_only):
pass
def AddOperation(self, info):
@@ -1248,83 +1241,54 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
template = self._system._templates.Load(template_file)
self._members_emitter.Emit(template, E=self._shared.DartType(element_type))
- def AddAttribute(self, attribute):
- getter = attribute
- setter = attribute if not IsReadOnly(attribute) else None
- dom_name = DartDomNameOfAttribute(getter or setter)
- html_getter_name = None
- if not self._shared.IsCustomInHtmlLibrary(
- self._interface, dom_name, 'get:'):
- html_getter_name = self._shared.RenameInHtmlLibrary(
- self._interface.id, dom_name, 'get:',
- implementation_class=True)
- html_setter_name = None
- if not self._shared.IsCustomInHtmlLibrary(
- self._interface, dom_name, 'set:'):
- html_setter_name = self._shared.RenameInHtmlLibrary(
- self._interface.id, dom_name, 'set:',
- implementation_class=True)
-
- if not html_getter_name:
- getter = None
- if not html_setter_name:
- setter = None
-
- if not getter and not setter:
+ def AddAttribute(self, attribute, html_name, read_only):
+ if self._shared.IsCustomInHtmlLibrary(self._interface, attribute.id):
return
- if ((getter and html_getter_name != getter.id) or
- (setter and html_setter_name != setter.id)):
- if getter:
- self._AddRenamingGetter(getter, html_getter_name)
- if setter:
- self._AddRenamingSetter(setter, html_setter_name)
+ if attribute.id != html_name:
+ self._AddRenamingGetter(attribute, html_name)
+ if not read_only:
+ self._AddRenamingSetter(attribute, html_name)
return
- # If the (getter, setter) pair is shadowing, we can't generate a shadowing
+ # If the attribute is shadowing, we can't generate a shadowing
# field (Issue 1633).
- (super_getter, super_getter_interface) = self._FindShadowedAttribute(getter, _merged_html_interfaces)
- (super_setter, super_setter_interface) = self._FindShadowedAttribute(setter, _merged_html_interfaces)
- if super_getter or super_setter:
- if getter and not setter and super_getter and not super_setter:
- if getter.type.id == super_getter.type.id:
- # Compatible getter, use the superclass property. This works because
- # JavaScript will do its own dynamic dispatch.
- output_type = getter and self._NarrowOutputType(getter.type.id)
+ (super_attribute, super_attribute_interface) = self._FindShadowedAttribute(attribute, _merged_html_interfaces)
+ if super_attribute:
+ if read_only:
+ if attribute.type.id == super_attribute.type.id:
+ # Compatible attribute, use the superclass property. This works
+ # because JavaScript will do its own dynamic dispatch.
self._members_emitter.Emit(
'\n'
' // Use implementation from $SUPER.\n'
' // final $TYPE $NAME;\n',
- SUPER=super_getter_interface,
- NAME=DartDomNameOfAttribute(getter),
- TYPE=output_type)
+ SUPER=super_attribute_interface,
+ NAME=DartDomNameOfAttribute(attribute),
+ TYPE=self._NarrowOutputType(attribute.type.id))
return
self._members_emitter.Emit('\n // Shadowing definition.')
- self._AddAttributeUsingProperties(getter, setter)
+ self._AddAttributeUsingProperties(attribute, read_only)
return
- output_type = getter and self._NarrowOutputType(getter.type.id)
- input_type = setter and self._NarrowInputType(setter.type.id)
- if getter and setter and input_type == output_type:
+ output_type = self._NarrowOutputType(attribute.type.id)
+ input_type = self._NarrowInputType(attribute.type.id)
+ if not read_only:
self._members_emitter.Emit(
'\n $TYPE $NAME;\n',
- NAME=DartDomNameOfAttribute(getter),
+ NAME=DartDomNameOfAttribute(attribute),
TYPE=output_type)
- return
- if getter and not setter:
+ else:
self._members_emitter.Emit(
'\n final $TYPE $NAME;\n',
- NAME=DartDomNameOfAttribute(getter),
+ NAME=DartDomNameOfAttribute(attribute),
TYPE=output_type)
- return
- self._AddAttributeUsingProperties(getter, setter)
- def _AddAttributeUsingProperties(self, getter, setter):
- if getter:
- self._AddGetter(getter)
- if setter:
- self._AddSetter(setter)
+ def _AddAttributeUsingProperties(self, attribute, read_only):
+ self._AddGetter(attribute)
+ if not read_only:
+ self._AddSetter(attribute)
def _AddGetter(self, attr):
self._AddRenamingGetter(attr, DartDomNameOfAttribute(attr))
« no previous file with comments | « lib/dom/scripts/systemfrog.py ('k') | lib/dom/scripts/systemnative.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698