Index: tools/dom/scripts/systemhtml.py |
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py |
index 64351a8ac06ebeadf1d99f8a60baba4c11d3cdba..62896ba9ebc8c99b3c9c9fb7260fee2a21951b92 100644 |
--- a/tools/dom/scripts/systemhtml.py |
+++ b/tools/dom/scripts/systemhtml.py |
@@ -19,6 +19,22 @@ _logger = logging.getLogger('systemhtml') |
HTML_LIBRARY_NAMES = ['html', 'indexed_db', 'svg', |
'web_audio', 'web_gl', 'web_sql'] |
+# |
+# The following two sets let us avoid shadowing fields with properties. |
+# This information could be derived from the IDL files but would require |
+# a significant refactor to compute accurately. Instead we manually compute |
+# these sets based on manual triage ofstrong mode errors. |
Alan Knight
2016/04/21 19:37:07
extreme nit: typo in ofstrong
Jacob
2016/04/21 19:42:41
it isdone
|
+_force_property_members = monitored.Set('systemhtml._force_property_members', [ |
+ 'Element.outerHtml', |
+ 'Element.isContentEditable', |
+ 'AudioContext.createGain', |
+ 'AudioContext.createScriptProcessor', |
+ ]) |
+_safe_to_ignore_shadowing_members = monitored.Set('systemhtml._safe_to_ignore_shadowing_members', [ |
+ 'SVGElement.tabIndex', |
+ 'SVGStyleElement.title', |
+ ]) |
+ |
_js_custom_members = monitored.Set('systemhtml._js_custom_members', [ |
'AudioBufferSourceNode.start', |
'AudioBufferSourceNode.stop', |
@@ -895,8 +911,13 @@ class Dart2JSBackend(HtmlDartGenerator): |
# is renamed. |
(super_attribute, super_attribute_interface) = self._FindShadowedAttribute( |
attribute) |
+ if self._ForcePropertyMember(html_name): |
+ self._members_emitter.Emit('\n // Using property as subclass shadows.'); |
+ self._AddAttributeUsingProperties(attribute, html_name, read_only) |
+ return |
+ |
if super_attribute: |
- if read_only: |
+ if read_only or self._SafeToIgnoreShadowingMember(html_name): |
if attribute.type.id == super_attribute.type.id: |
# Compatible attribute, use the superclass property. This works |
# because JavaScript will do its own dynamic dispatch. |
@@ -1161,6 +1182,14 @@ class Dart2JSBackend(HtmlDartGenerator): |
member_name = '%s.%s' % (self._interface.doc_js_name, member_name) |
return member_name in _js_custom_members |
+ def _ForcePropertyMember(self, member_name): |
+ member_name = '%s.%s' % (self._interface.doc_js_name, member_name) |
+ return member_name in _force_property_members |
+ |
+ def _SafeToIgnoreShadowingMember(self, member_name): |
+ member_name = '%s.%s' % (self._interface.doc_js_name, member_name) |
+ return member_name in _safe_to_ignore_shadowing_members |
+ |
def _RenamingAnnotation(self, idl_name, member_name): |
if member_name != idl_name: |
return "@JSName('%s')\n " % idl_name |