Revert "Use @Native annotation on dart2js DOM native classes"

TBR=blois@google.com

BUG=

Review URL: https://codereview.chromium.org//410823002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38486 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/sdk/lib/_blink/dartium/_blink_dartium.dart b/sdk/lib/_blink/dartium/_blink_dartium.dart
index 4347c95..354c8c69a 100644
--- a/sdk/lib/_blink/dartium/_blink_dartium.dart
+++ b/sdk/lib/_blink/dartium/_blink_dartium.dart
@@ -2169,6 +2169,8 @@
 
   static $readyState_Getter(mthis) native "FileReader_readyState_Getter";
 
+  static $result_Getter(mthis) native "FileReader_result_Getter";
+
   static $abort_Callback(mthis) native "FileReader_abort_Callback_RESOLVER_STRING_0_";
 
   static $readAsArrayBuffer_Callback(mthis, blob) native "FileReader_readAsArrayBuffer_Callback_RESOLVER_STRING_1_Blob";
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 7a2e905..2c51456 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -54,7 +54,7 @@
 // Not actually used, but imported since dart:html can generate these objects.
 import 'dart:_js_helper' show
     convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
-    JSName, Native, Null, Returns,
+    JSName, Null, Returns,
     findDispatchTagForInterceptorClass, setNativeSubclassDispatchRecord,
     makeLeafDispatchRecord;
 import 'dart:_interceptors' show
@@ -124,8 +124,7 @@
 
 @DocsEditable()
 @DomName('AbstractWorker')
-@Native("AbstractWorker")
-abstract class AbstractWorker extends Interceptor implements EventTarget {
+abstract class AbstractWorker extends Interceptor implements EventTarget native "AbstractWorker" {
   // To suppress missing implicit constructor warnings.
   factory AbstractWorker._() { throw new UnsupportedError("Not supported"); }
 
@@ -152,8 +151,7 @@
 @DocsEditable()
 @DomName('Algorithm')
 @Experimental() // untriaged
-@Native("Algorithm")
-class Algorithm extends Interceptor {
+class Algorithm extends Interceptor native "Algorithm" {
   // To suppress missing implicit constructor warnings.
   factory Algorithm._() { throw new UnsupportedError("Not supported"); }
 
@@ -169,8 +167,7 @@
 
 @DocsEditable()
 @DomName('HTMLAnchorElement')
-@Native("HTMLAnchorElement")
-class AnchorElement extends HtmlElement implements UrlUtils {
+class AnchorElement extends HtmlElement implements UrlUtils native "HTMLAnchorElement" {
   // To suppress missing implicit constructor warnings.
   factory AnchorElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -270,8 +267,7 @@
 @DocsEditable()
 @DomName('Animation')
 @Experimental() // untriaged
-@Native("Animation")
-class Animation extends TimedItem {
+class Animation extends TimedItem native "Animation" {
   // To suppress missing implicit constructor warnings.
   factory Animation._() { throw new UnsupportedError("Not supported"); }
 
@@ -303,8 +299,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
-@Native("WebKitAnimationEvent")
-class AnimationEvent extends Event {
+class AnimationEvent extends Event native "WebKitAnimationEvent" {
   // To suppress missing implicit constructor warnings.
   factory AnimationEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -329,8 +324,7 @@
 @SupportedBrowser(SupportedBrowser.OPERA)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("ApplicationCache,DOMApplicationCache,OfflineResourceList")
-class ApplicationCache extends EventTarget {
+class ApplicationCache extends EventTarget native "ApplicationCache,DOMApplicationCache,OfflineResourceList" {
   // To suppress missing implicit constructor warnings.
   factory ApplicationCache._() { throw new UnsupportedError("Not supported"); }
 
@@ -514,8 +508,7 @@
  * on MDN.
  */
 @DomName('HTMLAreaElement')
-@Native("HTMLAreaElement")
-class AreaElement extends HtmlElement implements UrlUtils {
+class AreaElement extends HtmlElement implements UrlUtils native "HTMLAreaElement" {
   // To suppress missing implicit constructor warnings.
   factory AreaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -606,8 +599,7 @@
 
 @DocsEditable()
 @DomName('HTMLAudioElement')
-@Native("HTMLAudioElement")
-class AudioElement extends MediaElement {
+class AudioElement extends MediaElement native "HTMLAudioElement" {
   // To suppress missing implicit constructor warnings.
   factory AudioElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -637,8 +629,7 @@
 @DomName('AutocompleteErrorEvent')
 // http://wiki.whatwg.org/wiki/RequestAutocomplete
 @Experimental()
-@Native("AutocompleteErrorEvent")
-class AutocompleteErrorEvent extends Event {
+class AutocompleteErrorEvent extends Event native "AutocompleteErrorEvent" {
   // To suppress missing implicit constructor warnings.
   factory AutocompleteErrorEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -653,8 +644,7 @@
 
 @DocsEditable()
 @DomName('HTMLBRElement')
-@Native("HTMLBRElement")
-class BRElement extends HtmlElement {
+class BRElement extends HtmlElement native "HTMLBRElement" {
   // To suppress missing implicit constructor warnings.
   factory BRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -677,8 +667,7 @@
 @DomName('BarProp')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#barprop
 @deprecated // standard
-@Native("BarProp")
-class BarProp extends Interceptor {
+class BarProp extends Interceptor native "BarProp" {
   // To suppress missing implicit constructor warnings.
   factory BarProp._() { throw new UnsupportedError("Not supported"); }
 
@@ -693,8 +682,7 @@
 
 @DocsEditable()
 @DomName('HTMLBaseElement')
-@Native("HTMLBaseElement")
-class BaseElement extends HtmlElement {
+class BaseElement extends HtmlElement native "HTMLBaseElement" {
   // To suppress missing implicit constructor warnings.
   factory BaseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -724,8 +712,7 @@
 @DocsEditable()
 @DomName('BeforeLoadEvent')
 @Experimental()
-@Native("BeforeLoadEvent")
-class BeforeLoadEvent extends Event {
+class BeforeLoadEvent extends Event native "BeforeLoadEvent" {
   // To suppress missing implicit constructor warnings.
   factory BeforeLoadEvent._() { throw new UnsupportedError("Not supported"); }
 }
@@ -736,8 +723,7 @@
 
 @DocsEditable()
 @DomName('BeforeUnloadEvent')
-@Native("BeforeUnloadEvent")
-class BeforeUnloadEvent extends Event {
+class BeforeUnloadEvent extends Event native "BeforeUnloadEvent" {
   // To suppress missing implicit constructor warnings.
   factory BeforeUnloadEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -754,8 +740,7 @@
 
 
 @DomName('Blob')
-@Native("Blob")
-class Blob extends Interceptor {
+class Blob extends Interceptor native "Blob" {
   // To suppress missing implicit constructor warnings.
   factory Blob._() { throw new UnsupportedError("Not supported"); }
 
@@ -790,6 +775,7 @@
   static _create_bag() => JS('var', '{}');
   static _bag_set(bag, key, value) { JS('void', '#[#] = #', bag, key, value); }
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -797,8 +783,7 @@
 
 @DocsEditable()
 @DomName('HTMLBodyElement')
-@Native("HTMLBodyElement")
-class BodyElement extends HtmlElement implements WindowEventHandlers {
+class BodyElement extends HtmlElement implements WindowEventHandlers native "HTMLBodyElement" {
   // To suppress missing implicit constructor warnings.
   factory BodyElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1009,8 +994,7 @@
 
 @DocsEditable()
 @DomName('HTMLButtonElement')
-@Native("HTMLButtonElement")
-class ButtonElement extends HtmlElement {
+class ButtonElement extends HtmlElement native "HTMLButtonElement" {
   // To suppress missing implicit constructor warnings.
   factory ButtonElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1104,8 +1088,7 @@
 @DomName('CDATASection')
 // http://dom.spec.whatwg.org/#cdatasection
 @deprecated // deprecated
-@Native("CDATASection")
-class CDataSection extends Text {
+class CDataSection extends Text native "CDATASection" {
   // To suppress missing implicit constructor warnings.
   factory CDataSection._() { throw new UnsupportedError("Not supported"); }
 }
@@ -1118,8 +1101,7 @@
 @DomName('Canvas2DContextAttributes')
 // http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL
 @Experimental()
-@Native("Canvas2DContextAttributes")
-class Canvas2DContextAttributes extends Interceptor {
+class Canvas2DContextAttributes extends Interceptor native "Canvas2DContextAttributes" {
   // To suppress missing implicit constructor warnings.
   factory Canvas2DContextAttributes._() { throw new UnsupportedError("Not supported"); }
 
@@ -1133,8 +1115,7 @@
 
 
 @DomName('HTMLCanvasElement')
-@Native("HTMLCanvasElement")
-class CanvasElement extends HtmlElement implements CanvasImageSource {
+class CanvasElement extends HtmlElement implements CanvasImageSource native "HTMLCanvasElement" {
   // To suppress missing implicit constructor warnings.
   factory CanvasElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1331,8 +1312,7 @@
  * * [CanvasGradient](http://www.w3.org/TR/2010/WD-2dcontext-20100304/#canvasgradient) from W3C.
  */
 @DomName('CanvasGradient')
-@Native("CanvasGradient")
-class CanvasGradient extends Interceptor {
+class CanvasGradient extends Interceptor native "CanvasGradient" {
   // To suppress missing implicit constructor warnings.
   factory CanvasGradient._() { throw new UnsupportedError("Not supported"); }
 
@@ -1383,8 +1363,7 @@
  * * [CanvasPattern](http://www.w3.org/TR/2010/WD-2dcontext-20100304/#canvaspattern) from W3C.
  */
 @DomName('CanvasPattern')
-@Native("CanvasPattern")
-class CanvasPattern extends Interceptor {
+class CanvasPattern extends Interceptor native "CanvasPattern" {
   // To suppress missing implicit constructor warnings.
   factory CanvasPattern._() { throw new UnsupportedError("Not supported"); }
 }
@@ -1401,8 +1380,7 @@
  * [WebGLRenderingContext].
  */
 @DomName('CanvasRenderingContext')
-@Native("CanvasRenderingContext")
-class CanvasRenderingContext extends Interceptor {
+class CanvasRenderingContext extends Interceptor native "CanvasRenderingContext" {
   // To suppress missing implicit constructor warnings.
   factory CanvasRenderingContext._() { throw new UnsupportedError("Not supported"); }
 
@@ -1417,8 +1395,7 @@
 
 
 @DomName('CanvasRenderingContext2D')
-@Native("CanvasRenderingContext2D")
-class CanvasRenderingContext2D extends CanvasRenderingContext {
+class CanvasRenderingContext2D extends CanvasRenderingContext native "CanvasRenderingContext2D" {
   // To suppress missing implicit constructor warnings.
   factory CanvasRenderingContext2D._() { throw new UnsupportedError("Not supported"); }
 
@@ -2001,6 +1978,7 @@
   @deprecated
   double get backingStorePixelRatio => 1.0;
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -2008,8 +1986,7 @@
 
 @DocsEditable()
 @DomName('CharacterData')
-@Native("CharacterData")
-class CharacterData extends Node implements ChildNode {
+class CharacterData extends Node implements ChildNode native "CharacterData" {
   // To suppress missing implicit constructor warnings.
   factory CharacterData._() { throw new UnsupportedError("Not supported"); }
 
@@ -2076,8 +2053,7 @@
 
 @DocsEditable()
 @DomName('CloseEvent')
-@Native("CloseEvent")
-class CloseEvent extends Event {
+class CloseEvent extends Event native "CloseEvent" {
   // To suppress missing implicit constructor warnings.
   factory CloseEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -2100,8 +2076,7 @@
 
 @DocsEditable()
 @DomName('Comment')
-@Native("Comment")
-class Comment extends CharacterData {
+class Comment extends CharacterData native "Comment" {
   factory Comment([String data]) {
     if (data != null) {
       return JS('Comment', '#.createComment(#)', document, data);
@@ -2119,8 +2094,7 @@
 
 
 @DomName('CompositionEvent')
-@Native("CompositionEvent")
-class CompositionEvent extends UIEvent {
+class CompositionEvent extends UIEvent native "CompositionEvent" {
   factory CompositionEvent(String type,
       {bool canBubble: false, bool cancelable: false, Window view,
       String data}) {
@@ -2267,8 +2241,7 @@
 @DocsEditable()
 @DomName('ConsoleBase')
 @Experimental() // untriaged
-@Native("ConsoleBase")
-class ConsoleBase extends Interceptor {
+class ConsoleBase extends Interceptor native "ConsoleBase" {
   // To suppress missing implicit constructor warnings.
   factory ConsoleBase._() { throw new UnsupportedError("Not supported"); }
 
@@ -2292,8 +2265,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#content-element
-@Native("HTMLContentElement")
-class ContentElement extends HtmlElement {
+class ContentElement extends HtmlElement native "HTMLContentElement" {
   // To suppress missing implicit constructor warnings.
   factory ContentElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2331,8 +2303,7 @@
 
 @DocsEditable()
 @DomName('Coordinates')
-@Native("Coordinates")
-class Coordinates extends Interceptor {
+class Coordinates extends Interceptor native "Coordinates" {
   // To suppress missing implicit constructor warnings.
   factory Coordinates._() { throw new UnsupportedError("Not supported"); }
 
@@ -2375,8 +2346,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 // http://www.w3.org/TR/WebCryptoAPI/
-@Native("Crypto")
-class Crypto extends Interceptor {
+class Crypto extends Interceptor native "Crypto" {
   // To suppress missing implicit constructor warnings.
   factory Crypto._() { throw new UnsupportedError("Not supported"); }
 
@@ -2402,8 +2372,7 @@
 @DocsEditable()
 @DomName('Key')
 @Experimental() // untriaged
-@Native("Key")
-class CryptoKey extends Interceptor {
+class CryptoKey extends Interceptor native "Key" {
   // To suppress missing implicit constructor warnings.
   factory CryptoKey._() { throw new UnsupportedError("Not supported"); }
 
@@ -2436,8 +2405,7 @@
 @DomName('CSS')
 // http://www.w3.org/TR/css3-conditional/#the-css-interface
 @Experimental() // None
-@Native("CSS")
-class Css extends Interceptor {
+class Css extends Interceptor native "CSS" {
   // To suppress missing implicit constructor warnings.
   factory Css._() { throw new UnsupportedError("Not supported"); }
 
@@ -2459,8 +2427,7 @@
 @DomName('CSSCharsetRule')
 // http://dev.w3.org/csswg/cssom/#the-csscharsetrule-interface
 @Experimental()
-@Native("CSSCharsetRule")
-class CssCharsetRule extends CssRule {
+class CssCharsetRule extends CssRule native "CSSCharsetRule" {
   // To suppress missing implicit constructor warnings.
   factory CssCharsetRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2479,8 +2446,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 // http://www.w3.org/TR/filter-effects/
-@Native("WebKitCSSFilterRule")
-class CssFilterRule extends CssRule {
+class CssFilterRule extends CssRule native "WebKitCSSFilterRule" {
   // To suppress missing implicit constructor warnings.
   factory CssFilterRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2497,8 +2463,7 @@
 @DomName('CSSFontFaceLoadEvent')
 // http://www.w3.org/TR/css3-fonts/
 @Experimental()
-@Native("CSSFontFaceLoadEvent")
-class CssFontFaceLoadEvent extends Event {
+class CssFontFaceLoadEvent extends Event native "CSSFontFaceLoadEvent" {
   // To suppress missing implicit constructor warnings.
   factory CssFontFaceLoadEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -2514,8 +2479,7 @@
 
 @DocsEditable()
 @DomName('CSSFontFaceRule')
-@Native("CSSFontFaceRule")
-class CssFontFaceRule extends CssRule {
+class CssFontFaceRule extends CssRule native "CSSFontFaceRule" {
   // To suppress missing implicit constructor warnings.
   factory CssFontFaceRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2530,8 +2494,7 @@
 
 @DocsEditable()
 @DomName('CSSImportRule')
-@Native("CSSImportRule")
-class CssImportRule extends CssRule {
+class CssImportRule extends CssRule native "CSSImportRule" {
   // To suppress missing implicit constructor warnings.
   factory CssImportRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2555,8 +2518,7 @@
 @DocsEditable()
 @DomName('CSSKeyframeRule')
 @Experimental() // untriaged
-@Native("CSSKeyframeRule,MozCSSKeyframeRule,WebKitCSSKeyframeRule")
-class CssKeyframeRule extends CssRule {
+class CssKeyframeRule extends CssRule native "CSSKeyframeRule,MozCSSKeyframeRule,WebKitCSSKeyframeRule" {
   // To suppress missing implicit constructor warnings.
   factory CssKeyframeRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2578,8 +2540,7 @@
 @DocsEditable()
 @DomName('CSSKeyframesRule')
 @Experimental() // untriaged
-@Native("CSSKeyframesRule,MozCSSKeyframesRule,WebKitCSSKeyframesRule")
-class CssKeyframesRule extends CssRule {
+class CssKeyframesRule extends CssRule native "CSSKeyframesRule,MozCSSKeyframesRule,WebKitCSSKeyframesRule" {
   // To suppress missing implicit constructor warnings.
   factory CssKeyframesRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2623,8 +2584,7 @@
 
 @DocsEditable()
 @DomName('CSSMediaRule')
-@Native("CSSMediaRule")
-class CssMediaRule extends CssRule {
+class CssMediaRule extends CssRule native "CSSMediaRule" {
   // To suppress missing implicit constructor warnings.
   factory CssMediaRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2653,8 +2613,7 @@
 
 @DocsEditable()
 @DomName('CSSPageRule')
-@Native("CSSPageRule")
-class CssPageRule extends CssRule {
+class CssPageRule extends CssRule native "CSSPageRule" {
   // To suppress missing implicit constructor warnings.
   factory CssPageRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2673,8 +2632,7 @@
 
 @DocsEditable()
 @DomName('CSSRule')
-@Native("CSSRule")
-class CssRule extends Interceptor {
+class CssRule extends Interceptor native "CSSRule" {
   // To suppress missing implicit constructor warnings.
   factory CssRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -2761,9 +2719,8 @@
 
 
 @DomName('CSSStyleDeclaration')
-@Native("CSSStyleDeclaration,MSStyleCSSProperties,CSS2Properties")
  class CssStyleDeclaration  extends Interceptor with 
-    CssStyleDeclarationBase  {
+    CssStyleDeclarationBase  native "CSSStyleDeclaration,MSStyleCSSProperties,CSS2Properties" {
   factory CssStyleDeclaration() => new CssStyleDeclaration.css('');
 
   factory CssStyleDeclaration.css(String css) {
@@ -6045,8 +6002,7 @@
 
 @DocsEditable()
 @DomName('CSSStyleRule')
-@Native("CSSStyleRule")
-class CssStyleRule extends CssRule {
+class CssStyleRule extends CssRule native "CSSStyleRule" {
   // To suppress missing implicit constructor warnings.
   factory CssStyleRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -6065,8 +6021,7 @@
 
 @DocsEditable()
 @DomName('CSSStyleSheet')
-@Native("CSSStyleSheet")
-class CssStyleSheet extends StyleSheet {
+class CssStyleSheet extends StyleSheet native "CSSStyleSheet" {
   // To suppress missing implicit constructor warnings.
   factory CssStyleSheet._() { throw new UnsupportedError("Not supported"); }
 
@@ -6112,8 +6067,7 @@
 
 @DocsEditable()
 @DomName('CSSSupportsRule')
-@Native("CSSSupportsRule")
-class CssSupportsRule extends CssRule {
+class CssSupportsRule extends CssRule native "CSSSupportsRule" {
   // To suppress missing implicit constructor warnings.
   factory CssSupportsRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -6143,8 +6097,7 @@
 @DocsEditable()
 @DomName('CSSViewportRule')
 @Experimental() // untriaged
-@Native("CSSViewportRule")
-class CssViewportRule extends CssRule {
+class CssViewportRule extends CssRule native "CSSViewportRule" {
   // To suppress missing implicit constructor warnings.
   factory CssViewportRule._() { throw new UnsupportedError("Not supported"); }
 
@@ -6161,8 +6114,7 @@
 
 
 @DomName('CustomEvent')
-@Native("CustomEvent")
-class CustomEvent extends Event {
+class CustomEvent extends Event native "CustomEvent" {
     @Creates('Null')  // Set from Dart code; does not instantiate a native type.
   var _dartDetail;
 
@@ -6223,8 +6175,7 @@
 
 @DocsEditable()
 @DomName('HTMLDListElement')
-@Native("HTMLDListElement")
-class DListElement extends HtmlElement {
+class DListElement extends HtmlElement native "HTMLDListElement" {
   // To suppress missing implicit constructor warnings.
   factory DListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6249,8 +6200,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Native("HTMLDataListElement")
-class DataListElement extends HtmlElement {
+class DataListElement extends HtmlElement native "HTMLDataListElement" {
   // To suppress missing implicit constructor warnings.
   factory DataListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6280,8 +6230,7 @@
 
 @DocsEditable()
 @DomName('Clipboard')
-@Native("Clipboard,DataTransfer")
-class DataTransfer extends Interceptor {
+class DataTransfer extends Interceptor native "Clipboard,DataTransfer" {
   // To suppress missing implicit constructor warnings.
   factory DataTransfer._() { throw new UnsupportedError("Not supported"); }
 
@@ -6348,8 +6297,7 @@
 @DomName('DataTransferItem')
 // http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html#the-datatransferitem-interface
 @Experimental()
-@Native("DataTransferItem")
-class DataTransferItem extends Interceptor {
+class DataTransferItem extends Interceptor native "DataTransferItem" {
   // To suppress missing implicit constructor warnings.
   factory DataTransferItem._() { throw new UnsupportedError("Not supported"); }
 
@@ -6397,8 +6345,7 @@
 @DomName('DataTransferItemList')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-datatransferitemlist-interface
 @Experimental()
-@Native("DataTransferItemList")
-class DataTransferItemList extends Interceptor {
+class DataTransferItemList extends Interceptor native "DataTransferItemList" {
   // To suppress missing implicit constructor warnings.
   factory DataTransferItemList._() { throw new UnsupportedError("Not supported"); }
 
@@ -6459,8 +6406,7 @@
 @DocsEditable()
 @DomName('DedicatedWorkerGlobalScope')
 @Experimental() // untriaged
-@Native("DedicatedWorkerGlobalScope")
-class DedicatedWorkerGlobalScope extends WorkerGlobalScope {
+class DedicatedWorkerGlobalScope extends WorkerGlobalScope native "DedicatedWorkerGlobalScope" {
   // To suppress missing implicit constructor warnings.
   factory DedicatedWorkerGlobalScope._() { throw new UnsupportedError("Not supported"); }
 
@@ -6494,8 +6440,7 @@
 @DocsEditable()
 @DomName('DeprecatedStorageInfo')
 @Experimental() // untriaged
-@Native("DeprecatedStorageInfo")
-class DeprecatedStorageInfo extends Interceptor {
+class DeprecatedStorageInfo extends Interceptor native "DeprecatedStorageInfo" {
   // To suppress missing implicit constructor warnings.
   factory DeprecatedStorageInfo._() { throw new UnsupportedError("Not supported"); }
 
@@ -6527,8 +6472,7 @@
 @DocsEditable()
 @DomName('DeprecatedStorageQuota')
 @Experimental() // untriaged
-@Native("DeprecatedStorageQuota")
-class DeprecatedStorageQuota extends Interceptor {
+class DeprecatedStorageQuota extends Interceptor native "DeprecatedStorageQuota" {
   // To suppress missing implicit constructor warnings.
   factory DeprecatedStorageQuota._() { throw new UnsupportedError("Not supported"); }
 
@@ -6552,8 +6496,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
-@Native("HTMLDetailsElement")
-class DetailsElement extends HtmlElement {
+class DetailsElement extends HtmlElement native "HTMLDetailsElement" {
   // To suppress missing implicit constructor warnings.
   factory DetailsElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6583,8 +6526,7 @@
 @DomName('DeviceAcceleration')
 // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
 @Experimental()
-@Native("DeviceAcceleration")
-class DeviceAcceleration extends Interceptor {
+class DeviceAcceleration extends Interceptor native "DeviceAcceleration" {
   // To suppress missing implicit constructor warnings.
   factory DeviceAcceleration._() { throw new UnsupportedError("Not supported"); }
 
@@ -6609,8 +6551,7 @@
 @DomName('DeviceMotionEvent')
 // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
 @Experimental()
-@Native("DeviceMotionEvent")
-class DeviceMotionEvent extends Event {
+class DeviceMotionEvent extends Event native "DeviceMotionEvent" {
   // To suppress missing implicit constructor warnings.
   factory DeviceMotionEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -6644,8 +6585,7 @@
 @DomName('DeviceOrientationEvent')
 // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
 @Experimental()
-@Native("DeviceOrientationEvent")
-class DeviceOrientationEvent extends Event {
+class DeviceOrientationEvent extends Event native "DeviceOrientationEvent" {
   factory DeviceOrientationEvent(String type,
       {bool canBubble: true, bool cancelable: true, num alpha: 0, num beta: 0,
       num gamma: 0, bool absolute: false}) {
@@ -6688,8 +6628,7 @@
 @DomName('DeviceRotationRate')
 // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
 @Experimental()
-@Native("DeviceRotationRate")
-class DeviceRotationRate extends Interceptor {
+class DeviceRotationRate extends Interceptor native "DeviceRotationRate" {
   // To suppress missing implicit constructor warnings.
   factory DeviceRotationRate._() { throw new UnsupportedError("Not supported"); }
 
@@ -6713,8 +6652,7 @@
 @DocsEditable()
 @DomName('HTMLDialogElement')
 @Unstable()
-@Native("HTMLDialogElement")
-class DialogElement extends HtmlElement {
+class DialogElement extends HtmlElement native "HTMLDialogElement" {
   // To suppress missing implicit constructor warnings.
   factory DialogElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -6753,8 +6691,7 @@
 @DomName('DirectoryEntry')
 // http://www.w3.org/TR/file-system-api/#the-directoryentry-interface
 @Experimental()
-@Native("DirectoryEntry")
-class DirectoryEntry extends Entry {
+class DirectoryEntry extends Entry native "DirectoryEntry" {
 
   /**
    * Create a new directory with the specified `path`. If `exclusive` is true,
@@ -6914,6 +6851,7 @@
   }
 
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -6923,8 +6861,7 @@
 @DomName('DirectoryReader')
 // http://www.w3.org/TR/file-system-api/#the-directoryreader-interface
 @Experimental()
-@Native("DirectoryReader")
-class DirectoryReader extends Interceptor {
+class DirectoryReader extends Interceptor native "DirectoryReader" {
   // To suppress missing implicit constructor warnings.
   factory DirectoryReader._() { throw new UnsupportedError("Not supported"); }
 
@@ -6973,8 +6910,7 @@
  * * [Inline-level element](http://www.w3.org/TR/CSS2/visuren.html#inline-boxes) from W3C.
  */
 @DomName('HTMLDivElement')
-@Native("HTMLDivElement")
-class DivElement extends HtmlElement {
+class DivElement extends HtmlElement native "HTMLDivElement" {
   // To suppress missing implicit constructor warnings.
   factory DivElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7004,8 +6940,7 @@
  * [Target 2: Connect Dart & HTML](http://www.dartlang.org/docs/tutorials/connect-dart-html/).
  */
 @DomName('Document')
-@Native("Document")
-class Document extends Node
+class Document extends Node  native "Document"
 {
 
   // To suppress missing implicit constructor warnings.
@@ -7770,8 +7705,7 @@
 
 
 @DomName('DocumentFragment')
-@Native("DocumentFragment")
-class DocumentFragment extends Node implements ParentNode {
+class DocumentFragment extends Node implements ParentNode native "DocumentFragment" {
   factory DocumentFragment() => document.createDocumentFragment();
 
   factory DocumentFragment.html(String html,
@@ -7934,8 +7868,7 @@
 
 @DocsEditable()
 @DomName('DOMError')
-@Native("DOMError")
-class DomError extends Interceptor {
+class DomError extends Interceptor native "DOMError" {
   // To suppress missing implicit constructor warnings.
   factory DomError._() { throw new UnsupportedError("Not supported"); }
 
@@ -7955,8 +7888,7 @@
 
 @DomName('DOMException')
 @Unstable()
-@Native("DOMException")
-class DomException extends Interceptor {
+class DomException extends Interceptor native "DOMException" {
 
   static const String INDEX_SIZE = 'IndexSizeError';
   static const String HIERARCHY_REQUEST = 'HierarchyRequestError';
@@ -8009,8 +7941,7 @@
 
 @DocsEditable()
 @DomName('DOMImplementation')
-@Native("DOMImplementation")
-class DomImplementation extends Interceptor {
+class DomImplementation extends Interceptor native "DOMImplementation" {
   // To suppress missing implicit constructor warnings.
   factory DomImplementation._() { throw new UnsupportedError("Not supported"); }
 
@@ -8038,8 +7969,7 @@
 
 @DocsEditable()
 @DomName('DOMParser')
-@Native("DOMParser")
-class DomParser extends Interceptor {
+class DomParser extends Interceptor native "DOMParser" {
   // To suppress missing implicit constructor warnings.
   factory DomParser._() { throw new UnsupportedError("Not supported"); }
 
@@ -8061,8 +7991,7 @@
 
 @DocsEditable()
 @DomName('DOMSettableTokenList')
-@Native("DOMSettableTokenList")
-class DomSettableTokenList extends DomTokenList {
+class DomSettableTokenList extends DomTokenList native "DOMSettableTokenList" {
   // To suppress missing implicit constructor warnings.
   factory DomSettableTokenList._() { throw new UnsupportedError("Not supported"); }
 
@@ -8081,8 +8010,7 @@
 
 @DocsEditable()
 @DomName('DOMStringList')
-@Native("DOMStringList")
-class DomStringList extends Interceptor with ListMixin<String>, ImmutableListMixin<String> implements JavaScriptIndexingBehavior, List<String> {
+class DomStringList extends Interceptor with ListMixin<String>, ImmutableListMixin<String> implements JavaScriptIndexingBehavior, List<String> native "DOMStringList" {
   // To suppress missing implicit constructor warnings.
   factory DomStringList._() { throw new UnsupportedError("Not supported"); }
 
@@ -8166,8 +8094,7 @@
 
 @DocsEditable()
 @DomName('DOMTokenList')
-@Native("DOMTokenList")
-class DomTokenList extends Interceptor {
+class DomTokenList extends Interceptor native "DOMTokenList" {
   // To suppress missing implicit constructor warnings.
   factory DomTokenList._() { throw new UnsupportedError("Not supported"); }
 
@@ -9264,8 +9191,7 @@
  * An abstract class, which all HTML elements extend.
  */
 @DomName('Element')
-@Native("Element")
-abstract class Element extends Node implements GlobalEventHandlers, ParentNode, ChildNode {
+abstract class Element extends Node implements GlobalEventHandlers, ParentNode, ChildNode native "Element" {
 
   /**
    * Creates an HTML element from a valid fragment of HTML.
@@ -11816,8 +11742,7 @@
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("HTMLEmbedElement")
-class EmbedElement extends HtmlElement {
+class EmbedElement extends HtmlElement native "HTMLEmbedElement" {
   // To suppress missing implicit constructor warnings.
   factory EmbedElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -11882,8 +11807,7 @@
 @DomName('Entry')
 // http://www.w3.org/TR/file-system-api/#the-entry-interface
 @Experimental()
-@Native("Entry")
-class Entry extends Interceptor {
+class Entry extends Interceptor native "Entry" {
   // To suppress missing implicit constructor warnings.
   factory Entry._() { throw new UnsupportedError("Not supported"); }
 
@@ -12022,8 +11946,7 @@
 @DocsEditable()
 @DomName('ErrorEvent')
 @Unstable()
-@Native("ErrorEvent")
-class ErrorEvent extends Event {
+class ErrorEvent extends Event native "ErrorEvent" {
   // To suppress missing implicit constructor warnings.
   factory ErrorEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -12058,8 +11981,7 @@
 
 
 @DomName('Event')
-@Native("Event,InputEvent,ClipboardEvent")
-class Event extends Interceptor {
+class Event extends Interceptor native "Event,InputEvent,ClipboardEvent" {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
   // default to false (since that's Boolean(undefined)).
@@ -12254,8 +12176,7 @@
 @DomName('EventSource')
 // http://www.w3.org/TR/eventsource/#the-eventsource-interface
 @Experimental() // stable
-@Native("EventSource")
-class EventSource extends EventTarget {
+class EventSource extends EventTarget native "EventSource" {
   factory EventSource(String title, {withCredentials: false}) {
     var parsedOptions = {
       'withCredentials': withCredentials,
@@ -12442,8 +12363,7 @@
  * for compile-time type checks and a more concise API.
  */
 @DomName('EventTarget')
-@Native("EventTarget")
-class EventTarget extends Interceptor {
+class EventTarget extends Interceptor native "EventTarget" {
 
   // Custom element created callback.
   EventTarget._created();
@@ -12477,8 +12397,7 @@
 @DocsEditable()
 @DomName('HTMLFieldSetElement')
 @Unstable()
-@Native("HTMLFieldSetElement")
-class FieldSetElement extends HtmlElement {
+class FieldSetElement extends HtmlElement native "HTMLFieldSetElement" {
   // To suppress missing implicit constructor warnings.
   factory FieldSetElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12541,8 +12460,7 @@
 
 @DocsEditable()
 @DomName('File')
-@Native("File")
-class File extends Blob {
+class File extends Blob native "File" {
   // To suppress missing implicit constructor warnings.
   factory File._() { throw new UnsupportedError("Not supported"); }
 
@@ -12593,8 +12511,7 @@
 @DomName('FileEntry')
 // http://www.w3.org/TR/file-system-api/#the-fileentry-interface
 @Experimental()
-@Native("FileEntry")
-class FileEntry extends Entry {
+class FileEntry extends Entry native "FileEntry" {
   // To suppress missing implicit constructor warnings.
   factory FileEntry._() { throw new UnsupportedError("Not supported"); }
 
@@ -12639,8 +12556,7 @@
 @DomName('FileError')
 // http://dev.w3.org/2009/dap/file-system/pub/FileSystem/
 @Experimental()
-@Native("FileError")
-class FileError extends DomError {
+class FileError extends DomError native "FileError" {
   // To suppress missing implicit constructor warnings.
   factory FileError._() { throw new UnsupportedError("Not supported"); }
 
@@ -12703,8 +12619,7 @@
 
 @DocsEditable()
 @DomName('FileList')
-@Native("FileList")
-class FileList extends Interceptor with ListMixin<File>, ImmutableListMixin<File> implements JavaScriptIndexingBehavior, List<File> {
+class FileList extends Interceptor with ListMixin<File>, ImmutableListMixin<File> implements JavaScriptIndexingBehavior, List<File> native "FileList" {
   // To suppress missing implicit constructor warnings.
   factory FileList._() { throw new UnsupportedError("Not supported"); }
 
@@ -12767,8 +12682,7 @@
 
 @DocsEditable()
 @DomName('FileReader')
-@Native("FileReader")
-class FileReader extends EventTarget {
+class FileReader extends EventTarget native "FileReader" {
 
   @DomName('FileReader.result')
   @DocsEditable()
@@ -12926,8 +12840,7 @@
 @DocsEditable()
 @DomName('Stream')
 @Experimental() // untriaged
-@Native("Stream")
-class FileStream extends Interceptor {
+class FileStream extends Interceptor native "Stream" {
   // To suppress missing implicit constructor warnings.
   factory FileStream._() { throw new UnsupportedError("Not supported"); }
 
@@ -12946,8 +12859,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://www.w3.org/TR/file-system-api/
-@Native("DOMFileSystem")
-class FileSystem extends Interceptor {
+class FileSystem extends Interceptor native "DOMFileSystem" {
   // To suppress missing implicit constructor warnings.
   factory FileSystem._() { throw new UnsupportedError("Not supported"); }
 
@@ -12982,8 +12894,7 @@
 @DomName('FileWriter')
 // http://www.w3.org/TR/file-writer-api/#the-filewriter-interface
 @Experimental()
-@Native("FileWriter")
-class FileWriter extends EventTarget {
+class FileWriter extends EventTarget native "FileWriter" {
   // To suppress missing implicit constructor warnings.
   factory FileWriter._() { throw new UnsupportedError("Not supported"); }
 
@@ -13139,8 +13050,7 @@
 
 @DocsEditable()
 @DomName('FocusEvent')
-@Native("FocusEvent")
-class FocusEvent extends UIEvent {
+class FocusEvent extends UIEvent native "FocusEvent" {
   // To suppress missing implicit constructor warnings.
   factory FocusEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -13161,8 +13071,7 @@
 @DocsEditable()
 @DomName('FontFace')
 @Experimental() // untriaged
-@Native("FontFace")
-class FontFace extends Interceptor {
+class FontFace extends Interceptor native "FontFace" {
   // To suppress missing implicit constructor warnings.
   factory FontFace._() { throw new UnsupportedError("Not supported"); }
 
@@ -13226,8 +13135,7 @@
 @DocsEditable()
 @DomName('FontFaceSet')
 @Experimental() // untriaged
-@Native("FontFaceSet")
-class FontFaceSet extends EventTarget {
+class FontFaceSet extends EventTarget native "FontFaceSet" {
   // To suppress missing implicit constructor warnings.
   factory FontFaceSet._() { throw new UnsupportedError("Not supported"); }
 
@@ -13292,8 +13200,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Native("FormData")
-class FormData extends Interceptor {
+class FormData extends Interceptor native "FormData" {
   // To suppress missing implicit constructor warnings.
   factory FormData._() { throw new UnsupportedError("Not supported"); }
 
@@ -13327,8 +13234,7 @@
 
 @DocsEditable()
 @DomName('HTMLFormElement')
-@Native("HTMLFormElement")
-class FormElement extends HtmlElement {
+class FormElement extends HtmlElement native "HTMLFormElement" {
   // To suppress missing implicit constructor warnings.
   factory FormElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -13463,8 +13369,7 @@
 @DomName('Gamepad')
 // https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#gamepad-interface
 @Experimental()
-@Native("Gamepad")
-class Gamepad extends Interceptor {
+class Gamepad extends Interceptor native "Gamepad" {
   // To suppress missing implicit constructor warnings.
   factory Gamepad._() { throw new UnsupportedError("Not supported"); }
 
@@ -13496,8 +13401,7 @@
 @DocsEditable()
 @DomName('Geolocation')
 @Unstable()
-@Native("Geolocation")
-class Geolocation extends Interceptor {
+class Geolocation extends Interceptor native "Geolocation" {
 
   @DomName('Geolocation.getCurrentPosition')
   Future<Geoposition> getCurrentPosition({bool enableHighAccuracy,
@@ -13606,6 +13510,8 @@
   Coordinates get coords => JS('Coordinates', '#.coords', _ptr);
   int get timestamp => JS('int', '#.timestamp', _ptr);
 }
+
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -13614,8 +13520,7 @@
 @DocsEditable()
 @DomName('Geoposition')
 @Unstable()
-@Native("Geoposition")
-class Geoposition extends Interceptor {
+class Geoposition extends Interceptor native "Geoposition" {
   // To suppress missing implicit constructor warnings.
   factory Geoposition._() { throw new UnsupportedError("Not supported"); }
 
@@ -13989,8 +13894,7 @@
  * An `<hr>` tag.
  */
 @DomName('HTMLHRElement')
-@Native("HTMLHRElement")
-class HRElement extends HtmlElement {
+class HRElement extends HtmlElement native "HTMLHRElement" {
   // To suppress missing implicit constructor warnings.
   factory HRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14020,8 +13924,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("HashChangeEvent")
-class HashChangeEvent extends Event {
+class HashChangeEvent extends Event native "HashChangeEvent" {
   factory HashChangeEvent(String type,
       {bool canBubble: true, bool cancelable: true, String oldUrl,
       String newUrl}) {
@@ -14058,8 +13961,7 @@
 
 @DocsEditable()
 @DomName('HTMLHeadElement')
-@Native("HTMLHeadElement")
-class HeadElement extends HtmlElement {
+class HeadElement extends HtmlElement native "HTMLHeadElement" {
   // To suppress missing implicit constructor warnings.
   factory HeadElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14080,8 +13982,7 @@
 
 @DocsEditable()
 @DomName('HTMLHeadingElement')
-@Native("HTMLHeadingElement")
-class HeadingElement extends HtmlElement {
+class HeadingElement extends HtmlElement native "HTMLHeadingElement" {
   // To suppress missing implicit constructor warnings.
   factory HeadingElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14121,8 +14022,7 @@
 
 
 @DomName('History')
-@Native("History")
-class History extends Interceptor implements HistoryBase {
+class History extends Interceptor implements HistoryBase native "History" {
 
   /**
    * Checks if the State APIs are supported on the current platform.
@@ -14186,8 +14086,7 @@
 
 @DocsEditable()
 @DomName('HTMLCollection')
-@Native("HTMLCollection")
-class HtmlCollection extends Interceptor with ListMixin<Node>, ImmutableListMixin<Node> implements JavaScriptIndexingBehavior, List<Node> {
+class HtmlCollection extends Interceptor with ListMixin<Node>, ImmutableListMixin<Node> implements JavaScriptIndexingBehavior, List<Node> native "HTMLCollection" {
   // To suppress missing implicit constructor warnings.
   factory HtmlCollection._() { throw new UnsupportedError("Not supported"); }
 
@@ -14255,8 +14154,7 @@
 
 
 @DomName('HTMLDocument')
-@Native("HTMLDocument")
-class HtmlDocument extends Document {
+class HtmlDocument extends Document native "HTMLDocument" {
   // To suppress missing implicit constructor warnings.
   factory HtmlDocument._() { throw new UnsupportedError("Not supported"); }
 
@@ -14548,8 +14446,7 @@
 
 @DocsEditable()
 @DomName('HTMLFormControlsCollection')
-@Native("HTMLFormControlsCollection")
-class HtmlFormControlsCollection extends HtmlCollection {
+class HtmlFormControlsCollection extends HtmlCollection native "HTMLFormControlsCollection" {
   // To suppress missing implicit constructor warnings.
   factory HtmlFormControlsCollection._() { throw new UnsupportedError("Not supported"); }
 }
@@ -14560,8 +14457,7 @@
 
 @DocsEditable()
 @DomName('HTMLHtmlElement')
-@Native("HTMLHtmlElement")
-class HtmlHtmlElement extends HtmlElement {
+class HtmlHtmlElement extends HtmlElement native "HTMLHtmlElement" {
   // To suppress missing implicit constructor warnings.
   factory HtmlHtmlElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14582,8 +14478,7 @@
 
 @DocsEditable()
 @DomName('HTMLOptionsCollection')
-@Native("HTMLOptionsCollection")
-class HtmlOptionsCollection extends HtmlCollection {
+class HtmlOptionsCollection extends HtmlCollection native "HTMLOptionsCollection" {
   // To suppress missing implicit constructor warnings.
   factory HtmlOptionsCollection._() { throw new UnsupportedError("Not supported"); }
 }
@@ -14640,8 +14535,7 @@
   * * [Using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest)
  */
 @DomName('XMLHttpRequest')
-@Native("XMLHttpRequest")
-class HttpRequest extends HttpRequestEventTarget {
+class HttpRequest extends HttpRequestEventTarget native "XMLHttpRequest" {
 
   /**
    * Creates a GET request for the specified [url].
@@ -15288,8 +15182,7 @@
 @DocsEditable()
 @DomName('XMLHttpRequestEventTarget')
 @Experimental() // untriaged
-@Native("XMLHttpRequestEventTarget")
-class HttpRequestEventTarget extends EventTarget {
+class HttpRequestEventTarget extends EventTarget native "XMLHttpRequestEventTarget" {
   // To suppress missing implicit constructor warnings.
   factory HttpRequestEventTarget._() { throw new UnsupportedError("Not supported"); }
 
@@ -15429,8 +15322,7 @@
 @DomName('XMLHttpRequestUpload')
 // http://xhr.spec.whatwg.org/#xmlhttprequestupload
 @Experimental()
-@Native("XMLHttpRequestUpload")
-class HttpRequestUpload extends HttpRequestEventTarget {
+class HttpRequestUpload extends HttpRequestEventTarget native "XMLHttpRequestUpload" {
   // To suppress missing implicit constructor warnings.
   factory HttpRequestUpload._() { throw new UnsupportedError("Not supported"); }
 }
@@ -15441,8 +15333,7 @@
 
 @DocsEditable()
 @DomName('HTMLIFrameElement')
-@Native("HTMLIFrameElement")
-class IFrameElement extends HtmlElement {
+class IFrameElement extends HtmlElement native "HTMLIFrameElement" {
   // To suppress missing implicit constructor warnings.
   factory IFrameElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15498,8 +15389,7 @@
 @DocsEditable()
 @DomName('ImageBitmap')
 @Experimental() // untriaged
-@Native("ImageBitmap")
-class ImageBitmap extends Interceptor {
+class ImageBitmap extends Interceptor native "ImageBitmap" {
   // To suppress missing implicit constructor warnings.
   factory ImageBitmap._() { throw new UnsupportedError("Not supported"); }
 
@@ -15518,8 +15408,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DomName('ImageData')
-@Native("ImageData")
-class ImageData extends Interceptor {
+class ImageData extends Interceptor native "ImageData" {
 
   // To suppress missing implicit constructor warnings.
   factory ImageData._() { throw new UnsupportedError("Not supported"); }
@@ -15545,8 +15434,7 @@
 
 
 @DomName('HTMLImageElement')
-@Native("HTMLImageElement")
-class ImageElement extends HtmlElement implements CanvasImageSource {
+class ImageElement extends HtmlElement implements CanvasImageSource native "HTMLImageElement" {
   // To suppress missing implicit constructor warnings.
   factory ImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15620,8 +15508,7 @@
 @DocsEditable()
 @DomName('InjectedScriptHost')
 @Experimental() // untriaged
-@Native("InjectedScriptHost")
-class InjectedScriptHost extends Interceptor {
+class InjectedScriptHost extends Interceptor native "InjectedScriptHost" {
   // To suppress missing implicit constructor warnings.
   factory InjectedScriptHost._() { throw new UnsupportedError("Not supported"); }
 
@@ -15636,7 +15523,6 @@
 
 
 @DomName('HTMLInputElement')
-@Native("HTMLInputElement")
 class InputElement extends HtmlElement implements
     HiddenInputElement,
     SearchInputElement,
@@ -15658,7 +15544,8 @@
     SubmitButtonInputElement,
     ImageButtonInputElement,
     ResetButtonInputElement,
-    ButtonInputElement {
+    ButtonInputElement
+     native "HTMLInputElement" {
 
   factory InputElement({String type}) {
     var e = document.createElement("input");
@@ -16504,6 +16391,7 @@
 abstract class ButtonInputElement implements InputElementBase {
   factory ButtonInputElement() => new InputElement(type: 'button');
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -16513,8 +16401,7 @@
 @DomName('InputMethodContext')
 // http://www.w3.org/TR/ime-api/#idl-def-InputMethodContext
 @Experimental()
-@Native("InputMethodContext")
-class InputMethodContext extends EventTarget {
+class InputMethodContext extends EventTarget native "InputMethodContext" {
   // To suppress missing implicit constructor warnings.
   factory InputMethodContext._() { throw new UnsupportedError("Not supported"); }
 
@@ -16549,8 +16436,7 @@
 @DocsEditable()
 @DomName('InstallEvent')
 @Experimental() // untriaged
-@Native("InstallEvent")
-class InstallEvent extends InstallPhaseEvent {
+class InstallEvent extends InstallPhaseEvent native "InstallEvent" {
   // To suppress missing implicit constructor warnings.
   factory InstallEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -16567,8 +16453,7 @@
 @DocsEditable()
 @DomName('InstallPhaseEvent')
 @Experimental() // untriaged
-@Native("InstallPhaseEvent")
-class InstallPhaseEvent extends Event {
+class InstallPhaseEvent extends Event native "InstallPhaseEvent" {
   // To suppress missing implicit constructor warnings.
   factory InstallPhaseEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -16585,8 +16470,7 @@
 @DocsEditable()
 @DomName('KeyPair')
 @Experimental() // untriaged
-@Native("KeyPair")
-class KeyPair extends Interceptor {
+class KeyPair extends Interceptor native "KeyPair" {
   // To suppress missing implicit constructor warnings.
   factory KeyPair._() { throw new UnsupportedError("Not supported"); }
 
@@ -16615,8 +16499,7 @@
  * * [KeyboardEvent](https://developer.mozilla.org/en/DOM/KeyboardEvent) at MDN.
  */
 @DomName('KeyboardEvent')
-@Native("KeyboardEvent")
-class KeyboardEvent extends UIEvent {
+class KeyboardEvent extends UIEvent native "KeyboardEvent" {
 
   /** 
    * Programmatically create a KeyboardEvent. 
@@ -16749,8 +16632,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-keygen-element
-@Native("HTMLKeygenElement")
-class KeygenElement extends HtmlElement {
+class KeygenElement extends HtmlElement native "HTMLKeygenElement" {
   // To suppress missing implicit constructor warnings.
   factory KeygenElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16829,8 +16711,7 @@
 
 @DocsEditable()
 @DomName('HTMLLIElement')
-@Native("HTMLLIElement")
-class LIElement extends HtmlElement {
+class LIElement extends HtmlElement native "HTMLLIElement" {
   // To suppress missing implicit constructor warnings.
   factory LIElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16855,8 +16736,7 @@
 
 @DocsEditable()
 @DomName('HTMLLabelElement')
-@Native("HTMLLabelElement")
-class LabelElement extends HtmlElement {
+class LabelElement extends HtmlElement native "HTMLLabelElement" {
   // To suppress missing implicit constructor warnings.
   factory LabelElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16889,8 +16769,7 @@
 
 @DocsEditable()
 @DomName('HTMLLegendElement')
-@Native("HTMLLegendElement")
-class LegendElement extends HtmlElement {
+class LegendElement extends HtmlElement native "HTMLLegendElement" {
   // To suppress missing implicit constructor warnings.
   factory LegendElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16915,8 +16794,7 @@
 
 @DocsEditable()
 @DomName('HTMLLinkElement')
-@Native("HTMLLinkElement")
-class LinkElement extends HtmlElement {
+class LinkElement extends HtmlElement native "HTMLLinkElement" {
   // To suppress missing implicit constructor warnings.
   factory LinkElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16986,8 +16864,7 @@
 
 @DocsEditable()
 @DomName('Location')
-@Native("Location")
-class Location extends Interceptor implements LocationBase {
+class Location extends Interceptor implements LocationBase native "Location" {
   // To suppress missing implicit constructor warnings.
   factory Location._() { throw new UnsupportedError("Not supported"); }
 
@@ -17083,8 +16960,7 @@
 
 @DocsEditable()
 @DomName('HTMLMapElement')
-@Native("HTMLMapElement")
-class MapElement extends HtmlElement {
+class MapElement extends HtmlElement native "HTMLMapElement" {
   // To suppress missing implicit constructor warnings.
   factory MapElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -17117,8 +16993,7 @@
 @DomName('MediaController')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#mediacontroller
 @Experimental()
-@Native("MediaController")
-class MediaController extends EventTarget {
+class MediaController extends EventTarget native "MediaController" {
   // To suppress missing implicit constructor warnings.
   factory MediaController._() { throw new UnsupportedError("Not supported"); }
 
@@ -17193,8 +17068,7 @@
 @DocsEditable()
 @DomName('HTMLMediaElement')
 @Unstable()
-@Native("HTMLMediaElement")
-class MediaElement extends HtmlElement {
+class MediaElement extends HtmlElement native "HTMLMediaElement" {
   // To suppress missing implicit constructor warnings.
   factory MediaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -17837,8 +17711,7 @@
 @DocsEditable()
 @DomName('MediaError')
 @Unstable()
-@Native("MediaError")
-class MediaError extends Interceptor {
+class MediaError extends Interceptor native "MediaError" {
   // To suppress missing implicit constructor warnings.
   factory MediaError._() { throw new UnsupportedError("Not supported"); }
 
@@ -17877,8 +17750,7 @@
 @DomName('MediaKeyError')
 // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#error-codes
 @Experimental()
-@Native("MediaKeyError")
-class MediaKeyError extends Interceptor {
+class MediaKeyError extends Interceptor native "MediaKeyError" {
   // To suppress missing implicit constructor warnings.
   factory MediaKeyError._() { throw new UnsupportedError("Not supported"); }
 
@@ -17924,8 +17796,7 @@
 @DomName('MediaKeyEvent')
 // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#event-definitions
 @Experimental()
-@Native("MediaKeyEvent")
-class MediaKeyEvent extends Event {
+class MediaKeyEvent extends Event native "MediaKeyEvent" {
   // To suppress missing implicit constructor warnings.
   factory MediaKeyEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -17967,8 +17838,7 @@
 @DomName('MediaKeyMessageEvent')
 // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-mediakeymessageevent
 @Experimental()
-@Native("MediaKeyMessageEvent")
-class MediaKeyMessageEvent extends Event {
+class MediaKeyMessageEvent extends Event native "MediaKeyMessageEvent" {
   // To suppress missing implicit constructor warnings.
   factory MediaKeyMessageEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -17990,8 +17860,7 @@
 @DomName('MediaKeyNeededEvent')
 // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-mediakeyneededevent
 @Experimental()
-@Native("MediaKeyNeededEvent")
-class MediaKeyNeededEvent extends Event {
+class MediaKeyNeededEvent extends Event native "MediaKeyNeededEvent" {
   // To suppress missing implicit constructor warnings.
   factory MediaKeyNeededEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -18013,8 +17882,7 @@
 @DomName('MediaKeySession')
 // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-mediakeysession
 @Experimental()
-@Native("MediaKeySession")
-class MediaKeySession extends EventTarget {
+class MediaKeySession extends EventTarget native "MediaKeySession" {
   // To suppress missing implicit constructor warnings.
   factory MediaKeySession._() { throw new UnsupportedError("Not supported"); }
 
@@ -18048,8 +17916,7 @@
 @DomName('MediaKeys')
 // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html
 @Experimental()
-@Native("MediaKeys")
-class MediaKeys extends Interceptor {
+class MediaKeys extends Interceptor native "MediaKeys" {
   // To suppress missing implicit constructor warnings.
   factory MediaKeys._() { throw new UnsupportedError("Not supported"); }
 
@@ -18076,8 +17943,7 @@
 @DocsEditable()
 @DomName('MediaList')
 @Unstable()
-@Native("MediaList")
-class MediaList extends Interceptor {
+class MediaList extends Interceptor native "MediaList" {
   // To suppress missing implicit constructor warnings.
   factory MediaList._() { throw new UnsupportedError("Not supported"); }
 
@@ -18109,8 +17975,7 @@
 @DocsEditable()
 @DomName('MediaQueryList')
 @Unstable()
-@Native("MediaQueryList")
-class MediaQueryList extends Interceptor {
+class MediaQueryList extends Interceptor native "MediaQueryList" {
   // To suppress missing implicit constructor warnings.
   factory MediaQueryList._() { throw new UnsupportedError("Not supported"); }
 
@@ -18131,8 +17996,7 @@
 @DomName('MediaSource')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#mediasource
 @Experimental()
-@Native("MediaSource")
-class MediaSource extends EventTarget {
+class MediaSource extends EventTarget native "MediaSource" {
   // To suppress missing implicit constructor warnings.
   factory MediaSource._() { throw new UnsupportedError("Not supported"); }
 
@@ -18184,8 +18048,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastream
-@Native("MediaStream")
-class MediaStream extends EventTarget {
+class MediaStream extends EventTarget native "MediaStream" {
   // To suppress missing implicit constructor warnings.
   factory MediaStream._() { throw new UnsupportedError("Not supported"); }
 
@@ -18319,8 +18182,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html
-@Native("MediaStreamEvent")
-class MediaStreamEvent extends Event {
+class MediaStreamEvent extends Event native "MediaStreamEvent" {
   // To suppress missing implicit constructor warnings.
   factory MediaStreamEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -18341,8 +18203,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack
-@Native("MediaStreamTrack")
-class MediaStreamTrack extends EventTarget {
+class MediaStreamTrack extends EventTarget native "MediaStreamTrack" {
   // To suppress missing implicit constructor warnings.
   factory MediaStreamTrack._() { throw new UnsupportedError("Not supported"); }
 
@@ -18443,8 +18304,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html
-@Native("MediaStreamTrackEvent")
-class MediaStreamTrackEvent extends Event {
+class MediaStreamTrackEvent extends Event native "MediaStreamTrackEvent" {
   // To suppress missing implicit constructor warnings.
   factory MediaStreamTrackEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -18473,8 +18333,7 @@
 @DocsEditable()
 @DomName('MemoryInfo')
 @Experimental() // nonstandard
-@Native("MemoryInfo")
-class MemoryInfo extends Interceptor {
+class MemoryInfo extends Interceptor native "MemoryInfo" {
   // To suppress missing implicit constructor warnings.
   factory MemoryInfo._() { throw new UnsupportedError("Not supported"); }
 
@@ -18507,8 +18366,7 @@
  *  * [Menu Element](http://www.w3.org/TR/html5/the-menu-element.html#the-menu-element) from the W3C.
  */
 @DomName('HTMLMenuElement')
-@Native("HTMLMenuElement")
-class MenuElement extends HtmlElement {
+class MenuElement extends HtmlElement native "HTMLMenuElement" {
   // To suppress missing implicit constructor warnings.
   factory MenuElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18530,8 +18388,7 @@
 @DocsEditable()
 @DomName('MessageChannel')
 @Unstable()
-@Native("MessageChannel")
-class MessageChannel extends Interceptor {
+class MessageChannel extends Interceptor native "MessageChannel" {
   // To suppress missing implicit constructor warnings.
   factory MessageChannel._() { throw new UnsupportedError("Not supported"); }
 
@@ -18551,8 +18408,7 @@
 
 
 @DomName('MessageEvent')
-@Native("MessageEvent")
-class MessageEvent extends Event {
+class MessageEvent extends Event native "MessageEvent" {
   factory MessageEvent(String type,
       {bool canBubble: false, bool cancelable: false, Object data,
       String origin, String lastEventId,
@@ -18617,8 +18473,7 @@
 @DocsEditable()
 @DomName('MessagePort')
 @Unstable()
-@Native("MessagePort")
-class MessagePort extends EventTarget {
+class MessagePort extends EventTarget native "MessagePort" {
   // To suppress missing implicit constructor warnings.
   factory MessagePort._() { throw new UnsupportedError("Not supported"); }
 
@@ -18673,8 +18528,7 @@
 
 @DocsEditable()
 @DomName('HTMLMetaElement')
-@Native("HTMLMetaElement")
-class MetaElement extends HtmlElement {
+class MetaElement extends HtmlElement native "HTMLMetaElement" {
   // To suppress missing implicit constructor warnings.
   factory MetaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18709,8 +18563,7 @@
 @DomName('Metadata')
 // http://www.w3.org/TR/file-system-api/#the-metadata-interface
 @Experimental()
-@Native("Metadata")
-class Metadata extends Interceptor {
+class Metadata extends Interceptor native "Metadata" {
   // To suppress missing implicit constructor warnings.
   factory Metadata._() { throw new UnsupportedError("Not supported"); }
 
@@ -18749,8 +18602,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("HTMLMeterElement")
-class MeterElement extends HtmlElement {
+class MeterElement extends HtmlElement native "HTMLMeterElement" {
   // To suppress missing implicit constructor warnings.
   factory MeterElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18807,8 +18659,7 @@
 @DomName('MIDIAccess')
 // http://webaudio.github.io/web-midi-api/#midiaccess-interface
 @Experimental()
-@Native("MIDIAccess")
-class MidiAccess extends EventTarget {
+class MidiAccess extends EventTarget native "MIDIAccess" {
   // To suppress missing implicit constructor warnings.
   factory MidiAccess._() { throw new UnsupportedError("Not supported"); }
 
@@ -18858,8 +18709,7 @@
 @DocsEditable()
 @DomName('MIDIAccessPromise')
 @Experimental() // untriaged
-@Native("MIDIAccessPromise")
-class MidiAccessPromise extends Interceptor {
+class MidiAccessPromise extends Interceptor native "MIDIAccessPromise" {
   // To suppress missing implicit constructor warnings.
   factory MidiAccessPromise._() { throw new UnsupportedError("Not supported"); }
 
@@ -18877,8 +18727,7 @@
 @DomName('MIDIConnectionEvent')
 // http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface
 @Experimental()
-@Native("MIDIConnectionEvent")
-class MidiConnectionEvent extends Event {
+class MidiConnectionEvent extends Event native "MIDIConnectionEvent" {
   // To suppress missing implicit constructor warnings.
   factory MidiConnectionEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -18895,8 +18744,7 @@
 @DomName('MIDIInput')
 // http://webaudio.github.io/web-midi-api/#idl-def-MIDIInput
 @Experimental()
-@Native("MIDIInput")
-class MidiInput extends MidiPort {
+class MidiInput extends MidiPort native "MIDIInput" {
   // To suppress missing implicit constructor warnings.
   factory MidiInput._() { throw new UnsupportedError("Not supported"); }
 
@@ -18924,8 +18772,7 @@
 @DomName('MIDIMessageEvent')
 // http://webaudio.github.io/web-midi-api/#midimessageevent-interface
 @Experimental()
-@Native("MIDIMessageEvent")
-class MidiMessageEvent extends Event {
+class MidiMessageEvent extends Event native "MIDIMessageEvent" {
   // To suppress missing implicit constructor warnings.
   factory MidiMessageEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -18946,8 +18793,7 @@
 @DomName('MIDIOutput')
 // http://webaudio.github.io/web-midi-api/#midioutput-interface
 @Experimental()
-@Native("MIDIOutput")
-class MidiOutput extends MidiPort {
+class MidiOutput extends MidiPort native "MIDIOutput" {
   // To suppress missing implicit constructor warnings.
   factory MidiOutput._() { throw new UnsupportedError("Not supported"); }
 
@@ -18964,8 +18810,7 @@
 @DomName('MIDIPort')
 // http://webaudio.github.io/web-midi-api/#idl-def-MIDIPort
 @Experimental()
-@Native("MIDIPort")
-class MidiPort extends EventTarget {
+class MidiPort extends EventTarget native "MIDIPort" {
   // To suppress missing implicit constructor warnings.
   factory MidiPort._() { throw new UnsupportedError("Not supported"); }
 
@@ -19012,8 +18857,7 @@
 @DocsEditable()
 @DomName('MimeType')
 @Experimental() // non-standard
-@Native("MimeType")
-class MimeType extends Interceptor {
+class MimeType extends Interceptor native "MimeType" {
   // To suppress missing implicit constructor warnings.
   factory MimeType._() { throw new UnsupportedError("Not supported"); }
 
@@ -19041,8 +18885,7 @@
 @DocsEditable()
 @DomName('MimeTypeArray')
 @Experimental() // non-standard
-@Native("MimeTypeArray")
-class MimeTypeArray extends Interceptor with ListMixin<MimeType>, ImmutableListMixin<MimeType> implements JavaScriptIndexingBehavior, List<MimeType> {
+class MimeTypeArray extends Interceptor with ListMixin<MimeType>, ImmutableListMixin<MimeType> implements JavaScriptIndexingBehavior, List<MimeType> native "MimeTypeArray" {
   // To suppress missing implicit constructor warnings.
   factory MimeTypeArray._() { throw new UnsupportedError("Not supported"); }
 
@@ -19114,8 +18957,7 @@
 @DocsEditable()
 @DomName('HTMLModElement')
 @Unstable()
-@Native("HTMLModElement")
-class ModElement extends HtmlElement {
+class ModElement extends HtmlElement native "HTMLModElement" {
   // To suppress missing implicit constructor warnings.
   factory ModElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -19139,8 +18981,7 @@
 
 
 @DomName('MouseEvent')
-@Native("MouseEvent,DragEvent,PointerEvent,MSPointerEvent")
-class MouseEvent extends UIEvent {
+class MouseEvent extends UIEvent native "MouseEvent,DragEvent,PointerEvent,MSPointerEvent" {
   factory MouseEvent(String type,
       {Window view, int detail: 0, int screenX: 0, int screenY: 0,
       int clientX: 0, int clientY: 0, int button: 0, bool canBubble: true,
@@ -19311,8 +19152,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
-@Native("MutationObserver,WebKitMutationObserver")
-class MutationObserver extends Interceptor {
+class MutationObserver extends Interceptor native "MutationObserver,WebKitMutationObserver" {
 
   @DomName('MutationObserver.disconnect')
   @DocsEditable()
@@ -19418,8 +19258,7 @@
 
 @DocsEditable()
 @DomName('MutationRecord')
-@Native("MutationRecord")
-class MutationRecord extends Interceptor {
+class MutationRecord extends Interceptor native "MutationRecord" {
   // To suppress missing implicit constructor warnings.
   factory MutationRecord._() { throw new UnsupportedError("Not supported"); }
 
@@ -19469,8 +19308,7 @@
 
 
 @DomName('Navigator')
-@Native("Navigator")
-class Navigator extends Interceptor implements NavigatorOnLine, NavigatorID {
+class Navigator extends Interceptor implements NavigatorOnLine, NavigatorID native "Navigator" {
 
   @DomName('Navigator.language')
   String get language => JS('String', '#.language || #.userLanguage', this,
@@ -19751,8 +19589,7 @@
 @DomName('NavigatorUserMediaError')
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-NavigatorUserMediaError
 @Experimental()
-@Native("NavigatorUserMediaError")
-class NavigatorUserMediaError extends Interceptor {
+class NavigatorUserMediaError extends Interceptor native "NavigatorUserMediaError" {
   // To suppress missing implicit constructor warnings.
   factory NavigatorUserMediaError._() { throw new UnsupportedError("Not supported"); }
 
@@ -19958,8 +19795,7 @@
 
 
 @DomName('Node')
-@Native("Node")
-class Node extends EventTarget {
+class Node extends EventTarget native "Node" {
 
   // Custom element created callback.
   Node._created() : super._created();
@@ -20384,8 +20220,7 @@
 @DocsEditable()
 @DomName('NodeFilter')
 @Unstable()
-@Native("NodeFilter")
-class NodeFilter extends Interceptor {
+class NodeFilter extends Interceptor native "NodeFilter" {
   // To suppress missing implicit constructor warnings.
   factory NodeFilter._() { throw new UnsupportedError("Not supported"); }
 
@@ -20440,8 +20275,7 @@
 
 @DomName('NodeIterator')
 @Unstable()
-@Native("NodeIterator")
-class NodeIterator extends Interceptor {
+class NodeIterator extends Interceptor native "NodeIterator" {
   factory NodeIterator(Node root, int whatToShow) {
     return document._createNodeIterator(root, whatToShow, null);
   }
@@ -20484,8 +20318,7 @@
 
 @DocsEditable()
 @DomName('NodeList')
-@Native("NodeList,RadioNodeList")
-class NodeList extends Interceptor with ListMixin<Node>, ImmutableListMixin<Node> implements JavaScriptIndexingBehavior, List<Node> {
+class NodeList extends Interceptor with ListMixin<Node>, ImmutableListMixin<Node> implements JavaScriptIndexingBehavior, List<Node> native "NodeList,RadioNodeList" {
   // To suppress missing implicit constructor warnings.
   factory NodeList._() { throw new UnsupportedError("Not supported"); }
 
@@ -20550,8 +20383,7 @@
 @DomName('Notification')
 // http://www.w3.org/TR/notifications/#notification
 @Experimental() // experimental
-@Native("Notification")
-class Notification extends EventTarget {
+class Notification extends EventTarget native "Notification" {
 
   factory Notification(String title, {String titleDir: null, String body: null,
       String bodyDir: null, String tag: null, String iconUrl: null}) {
@@ -20711,8 +20543,7 @@
 
 @DocsEditable()
 @DomName('HTMLOListElement')
-@Native("HTMLOListElement")
-class OListElement extends HtmlElement {
+class OListElement extends HtmlElement native "HTMLOListElement" {
   // To suppress missing implicit constructor warnings.
   factory OListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20749,8 +20580,7 @@
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("HTMLObjectElement")
-class ObjectElement extends HtmlElement {
+class ObjectElement extends HtmlElement native "HTMLObjectElement" {
   // To suppress missing implicit constructor warnings.
   factory ObjectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20830,8 +20660,7 @@
 
 @DocsEditable()
 @DomName('HTMLOptGroupElement')
-@Native("HTMLOptGroupElement")
-class OptGroupElement extends HtmlElement {
+class OptGroupElement extends HtmlElement native "HTMLOptGroupElement" {
   // To suppress missing implicit constructor warnings.
   factory OptGroupElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20859,8 +20688,7 @@
 
 
 @DomName('HTMLOptionElement')
-@Native("HTMLOptionElement")
-class OptionElement extends HtmlElement {
+class OptionElement extends HtmlElement native "HTMLOptionElement" {
   factory OptionElement({String data: '', String value : '', bool selected: false}) {
     return new OptionElement._(data, value, null, selected);
   }
@@ -20933,8 +20761,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Native("HTMLOutputElement")
-class OutputElement extends HtmlElement {
+class OutputElement extends HtmlElement native "HTMLOutputElement" {
   // To suppress missing implicit constructor warnings.
   factory OutputElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21010,8 +20837,7 @@
 @DocsEditable()
 @DomName('OverflowEvent')
 @Experimental() // nonstandard
-@Native("OverflowEvent")
-class OverflowEvent extends Event {
+class OverflowEvent extends Event native "OverflowEvent" {
   // To suppress missing implicit constructor warnings.
   factory OverflowEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -21048,8 +20874,7 @@
 @DomName('PageTransitionEvent')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#pagetransitionevent
 @Experimental()
-@Native("PageTransitionEvent")
-class PageTransitionEvent extends Event {
+class PageTransitionEvent extends Event native "PageTransitionEvent" {
   // To suppress missing implicit constructor warnings.
   factory PageTransitionEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -21064,8 +20889,7 @@
 
 @DocsEditable()
 @DomName('HTMLParagraphElement')
-@Native("HTMLParagraphElement")
-class ParagraphElement extends HtmlElement {
+class ParagraphElement extends HtmlElement native "HTMLParagraphElement" {
   // To suppress missing implicit constructor warnings.
   factory ParagraphElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21087,8 +20911,7 @@
 @DocsEditable()
 @DomName('HTMLParamElement')
 @Unstable()
-@Native("HTMLParamElement")
-class ParamElement extends HtmlElement {
+class ParamElement extends HtmlElement native "HTMLParamElement" {
   // To suppress missing implicit constructor warnings.
   factory ParamElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21139,8 +20962,7 @@
 @DomName('Path')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects
 @Experimental()
-@Native("Path")
-class Path extends Interceptor {
+class Path extends Interceptor native "Path" {
   // To suppress missing implicit constructor warnings.
   factory Path._() { throw new UnsupportedError("Not supported"); }
 
@@ -21204,8 +21026,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE)
-@Native("Performance")
-class Performance extends EventTarget {
+class Performance extends EventTarget native "Performance" {
   // To suppress missing implicit constructor warnings.
   factory Performance._() { throw new UnsupportedError("Not supported"); }
 
@@ -21319,8 +21140,7 @@
 @DomName('PerformanceEntry')
 // http://www.w3.org/TR/performance-timeline/#sec-PerformanceEntry-interface
 @Experimental()
-@Native("PerformanceEntry")
-class PerformanceEntry extends Interceptor {
+class PerformanceEntry extends Interceptor native "PerformanceEntry" {
   // To suppress missing implicit constructor warnings.
   factory PerformanceEntry._() { throw new UnsupportedError("Not supported"); }
 
@@ -21349,8 +21169,7 @@
 @DomName('PerformanceMark')
 // http://www.w3.org/TR/user-timing/#performancemark
 @Experimental()
-@Native("PerformanceMark")
-class PerformanceMark extends PerformanceEntry {
+class PerformanceMark extends PerformanceEntry native "PerformanceMark" {
   // To suppress missing implicit constructor warnings.
   factory PerformanceMark._() { throw new UnsupportedError("Not supported"); }
 }
@@ -21363,8 +21182,7 @@
 @DomName('PerformanceMeasure')
 // http://www.w3.org/TR/user-timing/#performancemeasure
 @Experimental()
-@Native("PerformanceMeasure")
-class PerformanceMeasure extends PerformanceEntry {
+class PerformanceMeasure extends PerformanceEntry native "PerformanceMeasure" {
   // To suppress missing implicit constructor warnings.
   factory PerformanceMeasure._() { throw new UnsupportedError("Not supported"); }
 }
@@ -21376,8 +21194,7 @@
 @DocsEditable()
 @DomName('PerformanceNavigation')
 @Unstable()
-@Native("PerformanceNavigation")
-class PerformanceNavigation extends Interceptor {
+class PerformanceNavigation extends Interceptor native "PerformanceNavigation" {
   // To suppress missing implicit constructor warnings.
   factory PerformanceNavigation._() { throw new UnsupportedError("Not supported"); }
 
@@ -21414,8 +21231,7 @@
 @DomName('PerformanceResourceTiming')
 // http://www.w3c-test.org/webperf/specs/ResourceTiming/#performanceresourcetiming
 @Experimental()
-@Native("PerformanceResourceTiming")
-class PerformanceResourceTiming extends PerformanceEntry {
+class PerformanceResourceTiming extends PerformanceEntry native "PerformanceResourceTiming" {
   // To suppress missing implicit constructor warnings.
   factory PerformanceResourceTiming._() { throw new UnsupportedError("Not supported"); }
 
@@ -21478,8 +21294,7 @@
 @DocsEditable()
 @DomName('PerformanceTiming')
 @Unstable()
-@Native("PerformanceTiming")
-class PerformanceTiming extends Interceptor {
+class PerformanceTiming extends Interceptor native "PerformanceTiming" {
   // To suppress missing implicit constructor warnings.
   factory PerformanceTiming._() { throw new UnsupportedError("Not supported"); }
 
@@ -21575,8 +21390,7 @@
 @DocsEditable()
 @DomName('Player')
 @Experimental() // untriaged
-@Native("Player")
-class Player extends Interceptor {
+class Player extends Interceptor native "Player" {
   // To suppress missing implicit constructor warnings.
   factory Player._() { throw new UnsupportedError("Not supported"); }
 
@@ -21648,8 +21462,7 @@
 @DocsEditable()
 @DomName('Plugin')
 @Experimental() // non-standard
-@Native("Plugin")
-class Plugin extends Interceptor {
+class Plugin extends Interceptor native "Plugin" {
   // To suppress missing implicit constructor warnings.
   factory Plugin._() { throw new UnsupportedError("Not supported"); }
 
@@ -21689,8 +21502,7 @@
 @DocsEditable()
 @DomName('PluginArray')
 @Experimental() // non-standard
-@Native("PluginArray")
-class PluginArray extends Interceptor with ListMixin<Plugin>, ImmutableListMixin<Plugin> implements JavaScriptIndexingBehavior, List<Plugin> {
+class PluginArray extends Interceptor with ListMixin<Plugin>, ImmutableListMixin<Plugin> implements JavaScriptIndexingBehavior, List<Plugin> native "PluginArray" {
   // To suppress missing implicit constructor warnings.
   factory PluginArray._() { throw new UnsupportedError("Not supported"); }
 
@@ -21769,8 +21581,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Native("PopStateEvent")
-class PopStateEvent extends Event {
+class PopStateEvent extends Event native "PopStateEvent" {
   // To suppress missing implicit constructor warnings.
   factory PopStateEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -21802,8 +21613,7 @@
 @DocsEditable()
 @DomName('PositionError')
 @Unstable()
-@Native("PositionError")
-class PositionError extends Interceptor {
+class PositionError extends Interceptor native "PositionError" {
   // To suppress missing implicit constructor warnings.
   factory PositionError._() { throw new UnsupportedError("Not supported"); }
 
@@ -21844,8 +21654,7 @@
 
 @DocsEditable()
 @DomName('HTMLPreElement')
-@Native("HTMLPreElement")
-class PreElement extends HtmlElement {
+class PreElement extends HtmlElement native "HTMLPreElement" {
   // To suppress missing implicit constructor warnings.
   factory PreElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21867,8 +21676,7 @@
 @DocsEditable()
 @DomName('ProcessingInstruction')
 @Unstable()
-@Native("ProcessingInstruction")
-class ProcessingInstruction extends CharacterData {
+class ProcessingInstruction extends CharacterData native "ProcessingInstruction" {
   // To suppress missing implicit constructor warnings.
   factory ProcessingInstruction._() { throw new UnsupportedError("Not supported"); }
 
@@ -21892,8 +21700,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Native("HTMLProgressElement")
-class ProgressElement extends HtmlElement {
+class ProgressElement extends HtmlElement native "HTMLProgressElement" {
   // To suppress missing implicit constructor warnings.
   factory ProgressElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21936,8 +21743,7 @@
 
 @DocsEditable()
 @DomName('ProgressEvent')
-@Native("ProgressEvent")
-class ProgressEvent extends Event {
+class ProgressEvent extends Event native "ProgressEvent" {
   // To suppress missing implicit constructor warnings.
   factory ProgressEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -21960,8 +21766,7 @@
 
 @DocsEditable()
 @DomName('HTMLQuoteElement')
-@Native("HTMLQuoteElement")
-class QuoteElement extends HtmlElement {
+class QuoteElement extends HtmlElement native "HTMLQuoteElement" {
   // To suppress missing implicit constructor warnings.
   factory QuoteElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22021,8 +21826,7 @@
 
 @DomName('Range')
 @Unstable()
-@Native("Range")
-class Range extends Interceptor {
+class Range extends Interceptor native "Range" {
   factory Range() => document.createRange();
 
   factory Range.fromPoint(Point point) =>
@@ -22214,8 +22018,7 @@
 @DomName('ResourceProgressEvent')
 // https://chromiumcodereview.appspot.com/14773025/
 @deprecated // experimental
-@Native("ResourceProgressEvent")
-class ResourceProgressEvent extends ProgressEvent {
+class ResourceProgressEvent extends ProgressEvent native "ResourceProgressEvent" {
   // To suppress missing implicit constructor warnings.
   factory ResourceProgressEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -22232,8 +22035,7 @@
 @DomName('RTCDataChannel')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannel
 @Experimental()
-@Native("RTCDataChannel,DataChannel")
-class RtcDataChannel extends EventTarget {
+class RtcDataChannel extends EventTarget native "RTCDataChannel,DataChannel" {
   // To suppress missing implicit constructor warnings.
   factory RtcDataChannel._() { throw new UnsupportedError("Not supported"); }
 
@@ -22384,8 +22186,7 @@
 @DomName('RTCDataChannelEvent')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcdatachannelevent
 @Experimental()
-@Native("RTCDataChannelEvent")
-class RtcDataChannelEvent extends Event {
+class RtcDataChannelEvent extends Event native "RTCDataChannelEvent" {
   // To suppress missing implicit constructor warnings.
   factory RtcDataChannelEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -22402,8 +22203,7 @@
 @DomName('RTCDTMFSender')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDTMFSender
 @Experimental()
-@Native("RTCDTMFSender")
-class RtcDtmfSender extends EventTarget {
+class RtcDtmfSender extends EventTarget native "RTCDTMFSender" {
   // To suppress missing implicit constructor warnings.
   factory RtcDtmfSender._() { throw new UnsupportedError("Not supported"); }
 
@@ -22457,8 +22257,7 @@
 @DomName('RTCDTMFToneChangeEvent')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDTMFToneChangeEvent
 @Experimental()
-@Native("RTCDTMFToneChangeEvent")
-class RtcDtmfToneChangeEvent extends Event {
+class RtcDtmfToneChangeEvent extends Event native "RTCDTMFToneChangeEvent" {
   // To suppress missing implicit constructor warnings.
   factory RtcDtmfToneChangeEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -22475,8 +22274,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceCandidate
-@Native("RTCIceCandidate,mozRTCIceCandidate")
-class RtcIceCandidate extends Interceptor {
+class RtcIceCandidate extends Interceptor native "RTCIceCandidate,mozRTCIceCandidate" {
   factory RtcIceCandidate(Map dictionary) {
     // TODO(efortuna): Remove this check if when you can actually construct with
     // the unprefixed RTCIceCandidate in Firefox (currently both are defined,
@@ -22512,8 +22310,7 @@
 @DomName('RTCIceCandidateEvent')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcicecandidate-type
 @Experimental()
-@Native("RTCIceCandidateEvent")
-class RtcIceCandidateEvent extends Event {
+class RtcIceCandidateEvent extends Event native "RTCIceCandidateEvent" {
   // To suppress missing implicit constructor warnings.
   factory RtcIceCandidateEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -22530,8 +22327,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCPeerConnection
-@Native("RTCPeerConnection,mozRTCPeerConnection")
-class RtcPeerConnection extends EventTarget {
+class RtcPeerConnection extends EventTarget native "RTCPeerConnection,mozRTCPeerConnection" {
   factory RtcPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
     var constructorName = JS('RtcPeerConnection', 'window[#]',
         '${Device.propertyPrefix}RTCPeerConnection');
@@ -22895,8 +22691,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSessionDescription
-@Native("RTCSessionDescription,mozRTCSessionDescription")
-class RtcSessionDescription extends Interceptor {
+class RtcSessionDescription extends Interceptor native "RTCSessionDescription,mozRTCSessionDescription" {
   factory RtcSessionDescription(Map dictionary) {
     // TODO(efortuna): Remove this check if when you can actually construct with
     // the unprefixed RTCIceCandidate in Firefox (currently both are defined,
@@ -22929,8 +22724,7 @@
 @DomName('RTCStatsReport')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCStatsReport
 @Experimental()
-@Native("RTCStatsReport")
-class RtcStatsReport extends Interceptor {
+class RtcStatsReport extends Interceptor native "RTCStatsReport" {
   // To suppress missing implicit constructor warnings.
   factory RtcStatsReport._() { throw new UnsupportedError("Not supported"); }
 
@@ -22976,8 +22770,7 @@
 @DomName('RTCStatsResponse')
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#widl-RTCStatsReport-RTCStats-getter-DOMString-id
 @Experimental()
-@Native("RTCStatsResponse")
-class RtcStatsResponse extends Interceptor {
+class RtcStatsResponse extends Interceptor native "RTCStatsResponse" {
   // To suppress missing implicit constructor warnings.
   factory RtcStatsResponse._() { throw new UnsupportedError("Not supported"); }
 
@@ -23000,8 +22793,7 @@
 
 @DocsEditable()
 @DomName('Screen')
-@Native("Screen")
-class Screen extends EventTarget {
+class Screen extends EventTarget native "Screen" {
 
   @DomName('Screen.availHeight')
   @DomName('Screen.availLeft')
@@ -23072,8 +22864,7 @@
 
 @DocsEditable()
 @DomName('HTMLScriptElement')
-@Native("HTMLScriptElement")
-class ScriptElement extends HtmlElement {
+class ScriptElement extends HtmlElement native "HTMLScriptElement" {
   // To suppress missing implicit constructor warnings.
   factory ScriptElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23128,8 +22919,7 @@
 @DomName('SecurityPolicyViolationEvent')
 // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#securitypolicyviolationevent-events
 @Experimental()
-@Native("SecurityPolicyViolationEvent")
-class SecurityPolicyViolationEvent extends Event {
+class SecurityPolicyViolationEvent extends Event native "SecurityPolicyViolationEvent" {
   // To suppress missing implicit constructor warnings.
   factory SecurityPolicyViolationEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -23182,8 +22972,7 @@
 
 
 @DomName('HTMLSelectElement')
-@Native("HTMLSelectElement")
-class SelectElement extends HtmlElement {
+class SelectElement extends HtmlElement native "HTMLSelectElement" {
   // To suppress missing implicit constructor warnings.
   factory SelectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23306,8 +23095,7 @@
 
 @DocsEditable()
 @DomName('Selection')
-@Native("Selection")
-class Selection extends Interceptor {
+class Selection extends Interceptor native "Selection" {
   // To suppress missing implicit constructor warnings.
   factory Selection._() { throw new UnsupportedError("Not supported"); }
 
@@ -23433,8 +23221,7 @@
 @DocsEditable()
 @DomName('ServiceWorkerContainer')
 @Experimental() // untriaged
-@Native("ServiceWorkerContainer")
-class ServiceWorkerContainer extends Interceptor {
+class ServiceWorkerContainer extends Interceptor native "ServiceWorkerContainer" {
   // To suppress missing implicit constructor warnings.
   factory ServiceWorkerContainer._() { throw new UnsupportedError("Not supported"); }
 }
@@ -23446,8 +23233,7 @@
 @DocsEditable()
 @DomName('ServiceWorkerGlobalScope')
 @Experimental() // untriaged
-@Native("ServiceWorkerGlobalScope")
-class ServiceWorkerGlobalScope extends WorkerGlobalScope {
+class ServiceWorkerGlobalScope extends WorkerGlobalScope native "ServiceWorkerGlobalScope" {
   // To suppress missing implicit constructor warnings.
   factory ServiceWorkerGlobalScope._() { throw new UnsupportedError("Not supported"); }
 }
@@ -23461,8 +23247,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#shadow-element
-@Native("HTMLShadowElement")
-class ShadowElement extends HtmlElement {
+class ShadowElement extends HtmlElement native "HTMLShadowElement" {
   // To suppress missing implicit constructor warnings.
   factory ShadowElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23501,8 +23286,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-root
-@Native("ShadowRoot")
-class ShadowRoot extends DocumentFragment {
+class ShadowRoot extends DocumentFragment native "ShadowRoot" {
   // To suppress missing implicit constructor warnings.
   factory ShadowRoot._() { throw new UnsupportedError("Not supported"); }
 
@@ -23614,8 +23398,7 @@
 @DomName('SharedWorker')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#shared-workers-and-the-sharedworker-interface
 @Experimental()
-@Native("SharedWorker")
-class SharedWorker extends EventTarget implements AbstractWorker {
+class SharedWorker extends EventTarget implements AbstractWorker native "SharedWorker" {
   // To suppress missing implicit constructor warnings.
   factory SharedWorker._() { throw new UnsupportedError("Not supported"); }
 
@@ -23657,8 +23440,7 @@
 @DocsEditable()
 @DomName('SharedWorkerGlobalScope')
 @Experimental() // untriaged
-@Native("SharedWorkerGlobalScope")
-class SharedWorkerGlobalScope extends WorkerGlobalScope {
+class SharedWorkerGlobalScope extends WorkerGlobalScope native "SharedWorkerGlobalScope" {
   // To suppress missing implicit constructor warnings.
   factory SharedWorkerGlobalScope._() { throw new UnsupportedError("Not supported"); }
 
@@ -23693,8 +23475,7 @@
 @DomName('SourceBuffer')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer
 @Experimental()
-@Native("SourceBuffer")
-class SourceBuffer extends EventTarget {
+class SourceBuffer extends EventTarget native "SourceBuffer" {
   // To suppress missing implicit constructor warnings.
   factory SourceBuffer._() { throw new UnsupportedError("Not supported"); }
 
@@ -23760,8 +23541,7 @@
 @DomName('SourceBufferList')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebufferlist
 @Experimental()
-@Native("SourceBufferList")
-class SourceBufferList extends EventTarget with ListMixin<SourceBuffer>, ImmutableListMixin<SourceBuffer> implements JavaScriptIndexingBehavior, List<SourceBuffer> {
+class SourceBufferList extends EventTarget with ListMixin<SourceBuffer>, ImmutableListMixin<SourceBuffer> implements JavaScriptIndexingBehavior, List<SourceBuffer> native "SourceBufferList" {
   // To suppress missing implicit constructor warnings.
   factory SourceBufferList._() { throw new UnsupportedError("Not supported"); }
 
@@ -23824,8 +23604,7 @@
 
 @DocsEditable()
 @DomName('HTMLSourceElement')
-@Native("HTMLSourceElement")
-class SourceElement extends HtmlElement {
+class SourceElement extends HtmlElement native "HTMLSourceElement" {
   // To suppress missing implicit constructor warnings.
   factory SourceElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23859,8 +23638,7 @@
 @DocsEditable()
 @DomName('SourceInfo')
 @Experimental() // untriaged
-@Native("SourceInfo")
-class SourceInfo extends Interceptor {
+class SourceInfo extends Interceptor native "SourceInfo" {
   // To suppress missing implicit constructor warnings.
   factory SourceInfo._() { throw new UnsupportedError("Not supported"); }
 
@@ -23891,8 +23669,7 @@
 
 @DocsEditable()
 @DomName('HTMLSpanElement')
-@Native("HTMLSpanElement")
-class SpanElement extends HtmlElement {
+class SpanElement extends HtmlElement native "HTMLSpanElement" {
   // To suppress missing implicit constructor warnings.
   factory SpanElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23915,8 +23692,7 @@
 @DomName('SpeechGrammar')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#dfn-speechgrammar
 @Experimental()
-@Native("SpeechGrammar")
-class SpeechGrammar extends Interceptor {
+class SpeechGrammar extends Interceptor native "SpeechGrammar" {
   // To suppress missing implicit constructor warnings.
   factory SpeechGrammar._() { throw new UnsupportedError("Not supported"); }
 
@@ -23944,8 +23720,7 @@
 @DomName('SpeechGrammarList')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#dfn-speechgrammarlist
 @Experimental()
-@Native("SpeechGrammarList")
-class SpeechGrammarList extends Interceptor with ListMixin<SpeechGrammar>, ImmutableListMixin<SpeechGrammar> implements JavaScriptIndexingBehavior, List<SpeechGrammar> {
+class SpeechGrammarList extends Interceptor with ListMixin<SpeechGrammar>, ImmutableListMixin<SpeechGrammar> implements JavaScriptIndexingBehavior, List<SpeechGrammar> native "SpeechGrammarList" {
   // To suppress missing implicit constructor warnings.
   factory SpeechGrammarList._() { throw new UnsupportedError("Not supported"); }
 
@@ -24025,8 +23800,7 @@
 @DomName('SpeechInputEvent')
 // http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html#speech_input_event_interface
 @Experimental()
-@Native("SpeechInputEvent")
-class SpeechInputEvent extends Event {
+class SpeechInputEvent extends Event native "SpeechInputEvent" {
   // To suppress missing implicit constructor warnings.
   factory SpeechInputEvent._() { throw new UnsupportedError("Not supported"); }
 }
@@ -24039,8 +23813,7 @@
 @DomName('SpeechInputResult')
 // http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html#speech_input_result_interface
 @Experimental()
-@Native("SpeechInputResult")
-class SpeechInputResult extends Interceptor {
+class SpeechInputResult extends Interceptor native "SpeechInputResult" {
   // To suppress missing implicit constructor warnings.
   factory SpeechInputResult._() { throw new UnsupportedError("Not supported"); }
 }
@@ -24053,8 +23826,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-section
-@Native("SpeechRecognition")
-class SpeechRecognition extends EventTarget {
+class SpeechRecognition extends EventTarget native "SpeechRecognition" {
   // To suppress missing implicit constructor warnings.
   factory SpeechRecognition._() { throw new UnsupportedError("Not supported"); }
 
@@ -24273,8 +24045,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechrecognitionalternative
-@Native("SpeechRecognitionAlternative")
-class SpeechRecognitionAlternative extends Interceptor {
+class SpeechRecognitionAlternative extends Interceptor native "SpeechRecognitionAlternative" {
   // To suppress missing implicit constructor warnings.
   factory SpeechRecognitionAlternative._() { throw new UnsupportedError("Not supported"); }
 
@@ -24296,8 +24067,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-error
-@Native("SpeechRecognitionError")
-class SpeechRecognitionError extends Event {
+class SpeechRecognitionError extends Event native "SpeechRecognitionError" {
   // To suppress missing implicit constructor warnings.
   factory SpeechRecognitionError._() { throw new UnsupportedError("Not supported"); }
 
@@ -24319,8 +24089,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-event
-@Native("SpeechRecognitionEvent")
-class SpeechRecognitionEvent extends Event {
+class SpeechRecognitionEvent extends Event native "SpeechRecognitionEvent" {
   // To suppress missing implicit constructor warnings.
   factory SpeechRecognitionEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -24352,8 +24121,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
 @Experimental()
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechrecognitionresult
-@Native("SpeechRecognitionResult")
-class SpeechRecognitionResult extends Interceptor {
+class SpeechRecognitionResult extends Interceptor native "SpeechRecognitionResult" {
   // To suppress missing implicit constructor warnings.
   factory SpeechRecognitionResult._() { throw new UnsupportedError("Not supported"); }
 
@@ -24378,8 +24146,7 @@
 @DomName('SpeechSynthesis')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
 @Experimental()
-@Native("SpeechSynthesis")
-class SpeechSynthesis extends EventTarget {
+class SpeechSynthesis extends EventTarget native "SpeechSynthesis" {
   // To suppress missing implicit constructor warnings.
   factory SpeechSynthesis._() { throw new UnsupportedError("Not supported"); }
 
@@ -24424,8 +24191,7 @@
 @DomName('SpeechSynthesisEvent')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
 @Experimental()
-@Native("SpeechSynthesisEvent")
-class SpeechSynthesisEvent extends Event {
+class SpeechSynthesisEvent extends Event native "SpeechSynthesisEvent" {
   // To suppress missing implicit constructor warnings.
   factory SpeechSynthesisEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -24450,8 +24216,7 @@
 @DomName('SpeechSynthesisUtterance')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
 @Experimental()
-@Native("SpeechSynthesisUtterance")
-class SpeechSynthesisUtterance extends EventTarget {
+class SpeechSynthesisUtterance extends EventTarget native "SpeechSynthesisUtterance" {
   // To suppress missing implicit constructor warnings.
   factory SpeechSynthesisUtterance._() { throw new UnsupportedError("Not supported"); }
 
@@ -24604,8 +24369,7 @@
 @DomName('SpeechSynthesisVoice')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
 @Experimental()
-@Native("SpeechSynthesisVoice")
-class SpeechSynthesisVoice extends Interceptor {
+class SpeechSynthesisVoice extends Interceptor native "SpeechSynthesisVoice" {
   // To suppress missing implicit constructor warnings.
   factory SpeechSynthesisVoice._() { throw new UnsupportedError("Not supported"); }
 
@@ -24663,9 +24427,8 @@
  */
 @DomName('Storage')
 @Unstable()
-@Native("Storage")
 class Storage extends Interceptor
-    implements Map<String, String> {
+    implements Map<String, String>  native "Storage" {
 
   void addAll(Map<String, String> other) {
     other.forEach((k, v) { this[k] = v; });
@@ -24785,8 +24548,7 @@
 
 @DomName('StorageEvent')
 @Unstable()
-@Native("StorageEvent")
-class StorageEvent extends Event {
+class StorageEvent extends Event native "StorageEvent" {
   factory StorageEvent(String type,
     {bool canBubble: false, bool cancelable: false, String key, String oldValue,
     String newValue, String url, Storage storageArea}) {
@@ -24834,8 +24596,7 @@
 @DomName('StorageInfo')
 // http://www.w3.org/TR/file-system-api/
 @Experimental()
-@Native("StorageInfo")
-class StorageInfo extends Interceptor {
+class StorageInfo extends Interceptor native "StorageInfo" {
   // To suppress missing implicit constructor warnings.
   factory StorageInfo._() { throw new UnsupportedError("Not supported"); }
 
@@ -24858,8 +24619,7 @@
 @DomName('StorageQuota')
 // http://www.w3.org/TR/quota-api/#idl-def-StorageQuota
 @Experimental()
-@Native("StorageQuota")
-class StorageQuota extends Interceptor {
+class StorageQuota extends Interceptor native "StorageQuota" {
   // To suppress missing implicit constructor warnings.
   factory StorageQuota._() { throw new UnsupportedError("Not supported"); }
 
@@ -24908,8 +24668,7 @@
 
 @DocsEditable()
 @DomName('HTMLStyleElement')
-@Native("HTMLStyleElement")
-class StyleElement extends HtmlElement {
+class StyleElement extends HtmlElement native "HTMLStyleElement" {
   // To suppress missing implicit constructor warnings.
   factory StyleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -24952,8 +24711,7 @@
 @DomName('StyleMedia')
 // http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html
 @Experimental() // nonstandard
-@Native("StyleMedia")
-class StyleMedia extends Interceptor {
+class StyleMedia extends Interceptor native "StyleMedia" {
   // To suppress missing implicit constructor warnings.
   factory StyleMedia._() { throw new UnsupportedError("Not supported"); }
 
@@ -24972,8 +24730,7 @@
 
 @DocsEditable()
 @DomName('StyleSheet')
-@Native("StyleSheet")
-class StyleSheet extends Interceptor {
+class StyleSheet extends Interceptor native "StyleSheet" {
   // To suppress missing implicit constructor warnings.
   factory StyleSheet._() { throw new UnsupportedError("Not supported"); }
 
@@ -25012,8 +24769,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableCaptionElement')
-@Native("HTMLTableCaptionElement")
-class TableCaptionElement extends HtmlElement {
+class TableCaptionElement extends HtmlElement native "HTMLTableCaptionElement" {
   // To suppress missing implicit constructor warnings.
   factory TableCaptionElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25034,8 +24790,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableCellElement')
-@Native("HTMLTableCellElement,HTMLTableDataCellElement,HTMLTableHeaderCellElement")
-class TableCellElement extends HtmlElement {
+class TableCellElement extends HtmlElement native "HTMLTableCellElement,HTMLTableDataCellElement,HTMLTableHeaderCellElement" {
   // To suppress missing implicit constructor warnings.
   factory TableCellElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25072,8 +24827,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableColElement')
-@Native("HTMLTableColElement")
-class TableColElement extends HtmlElement {
+class TableColElement extends HtmlElement native "HTMLTableColElement" {
   // To suppress missing implicit constructor warnings.
   factory TableColElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25098,8 +24852,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableElement')
-@Native("HTMLTableElement")
-class TableElement extends HtmlElement {
+class TableElement extends HtmlElement native "HTMLTableElement" {
 
   @DomName('HTMLTableElement.tBodies')
   List<TableSectionElement> get tBodies =>
@@ -25229,8 +24982,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableRowElement')
-@Native("HTMLTableRowElement")
-class TableRowElement extends HtmlElement {
+class TableRowElement extends HtmlElement native "HTMLTableRowElement" {
 
   @DomName('HTMLTableRowElement.cells')
   List<TableCellElement> get cells =>
@@ -25301,8 +25053,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableSectionElement')
-@Native("HTMLTableSectionElement")
-class TableSectionElement extends HtmlElement {
+class TableSectionElement extends HtmlElement native "HTMLTableSectionElement" {
 
   @DomName('HTMLTableSectionElement.rows')
   List<TableRowElement> get rows =>
@@ -25365,8 +25116,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#template-element
-@Native("HTMLTemplateElement")
-class TemplateElement extends HtmlElement {
+class TemplateElement extends HtmlElement native "HTMLTemplateElement" {
   // To suppress missing implicit constructor warnings.
   factory TemplateElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25412,8 +25162,7 @@
 
 
 @DomName('Text')
-@Native("Text")
-class Text extends CharacterData {
+class Text extends CharacterData native "Text" {
   factory Text(String data) => document._createTextNode(data);
   // To suppress missing implicit constructor warnings.
   factory Text._() { throw new UnsupportedError("Not supported"); }
@@ -25441,8 +25190,7 @@
 
 @DocsEditable()
 @DomName('HTMLTextAreaElement')
-@Native("HTMLTextAreaElement")
-class TextAreaElement extends HtmlElement {
+class TextAreaElement extends HtmlElement native "HTMLTextAreaElement" {
   // To suppress missing implicit constructor warnings.
   factory TextAreaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25589,8 +25337,7 @@
 
 @DomName('TextEvent')
 @Unstable()
-@Native("TextEvent")
-class TextEvent extends UIEvent {
+class TextEvent extends UIEvent native "TextEvent" {
   factory TextEvent(String type,
     {bool canBubble: false, bool cancelable: false, Window view, String data}) {
     if (view == null) {
@@ -25620,8 +25367,7 @@
 
 @DocsEditable()
 @DomName('TextMetrics')
-@Native("TextMetrics")
-class TextMetrics extends Interceptor {
+class TextMetrics extends Interceptor native "TextMetrics" {
   // To suppress missing implicit constructor warnings.
   factory TextMetrics._() { throw new UnsupportedError("Not supported"); }
 
@@ -25638,8 +25384,7 @@
 @DomName('TextTrack')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack
 @Experimental()
-@Native("TextTrack")
-class TextTrack extends EventTarget {
+class TextTrack extends EventTarget native "TextTrack" {
   // To suppress missing implicit constructor warnings.
   factory TextTrack._() { throw new UnsupportedError("Not supported"); }
 
@@ -25719,8 +25464,7 @@
 @DomName('TextTrackCue')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue
 @Experimental()
-@Native("TextTrackCue")
-class TextTrackCue extends EventTarget {
+class TextTrackCue extends EventTarget native "TextTrackCue" {
   // To suppress missing implicit constructor warnings.
   factory TextTrackCue._() { throw new UnsupportedError("Not supported"); }
 
@@ -25783,8 +25527,7 @@
 @DomName('TextTrackCueList')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist
 @Experimental()
-@Native("TextTrackCueList")
-class TextTrackCueList extends Interceptor with ListMixin<TextTrackCue>, ImmutableListMixin<TextTrackCue> implements List<TextTrackCue>, JavaScriptIndexingBehavior {
+class TextTrackCueList extends Interceptor with ListMixin<TextTrackCue>, ImmutableListMixin<TextTrackCue> implements List<TextTrackCue>, JavaScriptIndexingBehavior native "TextTrackCueList" {
   // To suppress missing implicit constructor warnings.
   factory TextTrackCueList._() { throw new UnsupportedError("Not supported"); }
 
@@ -25853,8 +25596,7 @@
 @DomName('TextTrackList')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist
 @Experimental()
-@Native("TextTrackList")
-class TextTrackList extends EventTarget with ListMixin<TextTrack>, ImmutableListMixin<TextTrack> implements JavaScriptIndexingBehavior, List<TextTrack> {
+class TextTrackList extends EventTarget with ListMixin<TextTrack>, ImmutableListMixin<TextTrack> implements JavaScriptIndexingBehavior, List<TextTrack> native "TextTrackList" {
   // To suppress missing implicit constructor warnings.
   factory TextTrackList._() { throw new UnsupportedError("Not supported"); }
 
@@ -25948,8 +25690,7 @@
 @DocsEditable()
 @DomName('TimeRanges')
 @Unstable()
-@Native("TimeRanges")
-class TimeRanges extends Interceptor {
+class TimeRanges extends Interceptor native "TimeRanges" {
   // To suppress missing implicit constructor warnings.
   factory TimeRanges._() { throw new UnsupportedError("Not supported"); }
 
@@ -25973,8 +25714,7 @@
 @DocsEditable()
 @DomName('TimedItem')
 @Experimental() // untriaged
-@Native("TimedItem")
-class TimedItem extends Interceptor {
+class TimedItem extends Interceptor native "TimedItem" {
   // To suppress missing implicit constructor warnings.
   factory TimedItem._() { throw new UnsupportedError("Not supported"); }
 
@@ -26021,8 +25761,7 @@
 @DocsEditable()
 @DomName('Timeline')
 @Experimental() // untriaged
-@Native("Timeline")
-class Timeline extends Interceptor {
+class Timeline extends Interceptor native "Timeline" {
   // To suppress missing implicit constructor warnings.
   factory Timeline._() { throw new UnsupportedError("Not supported"); }
 
@@ -26048,8 +25787,7 @@
 @DocsEditable()
 @DomName('Timing')
 @Experimental() // untriaged
-@Native("Timing")
-class Timing extends Interceptor {
+class Timing extends Interceptor native "Timing" {
   // To suppress missing implicit constructor warnings.
   factory Timing._() { throw new UnsupportedError("Not supported"); }
 
@@ -26105,8 +25843,7 @@
 
 @DocsEditable()
 @DomName('HTMLTitleElement')
-@Native("HTMLTitleElement")
-class TitleElement extends HtmlElement {
+class TitleElement extends HtmlElement native "HTMLTitleElement" {
   // To suppress missing implicit constructor warnings.
   factory TitleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -26129,8 +25866,7 @@
 @DomName('Touch')
 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
 @Experimental()
-@Native("Touch")
-class Touch extends Interceptor {
+class Touch extends Interceptor native "Touch" {
   // To suppress missing implicit constructor warnings.
   factory Touch._() { throw new UnsupportedError("Not supported"); }
 
@@ -26233,8 +25969,7 @@
 @DomName('TouchEvent')
 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
 @Experimental()
-@Native("TouchEvent")
-class TouchEvent extends UIEvent {
+class TouchEvent extends UIEvent native "TouchEvent" {
   factory TouchEvent(TouchList touches, TouchList targetTouches,
       TouchList changedTouches, String type,
       {Window view, int screenX: 0, int screenY: 0, int clientX: 0,
@@ -26303,8 +26038,7 @@
 @DomName('TouchList')
 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
 @Experimental()
-@Native("TouchList")
-class TouchList extends Interceptor with ListMixin<Touch>, ImmutableListMixin<Touch> implements JavaScriptIndexingBehavior, List<Touch> {
+class TouchList extends Interceptor with ListMixin<Touch>, ImmutableListMixin<Touch> implements JavaScriptIndexingBehavior, List<Touch> native "TouchList" {
   /// NB: This constructor likely does not work as you might expect it to! This
   /// constructor will simply fail (returning null) if you are not on a device
   /// with touch enabled. See dartbug.com/8314.
@@ -26381,8 +26115,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#the-track-element
 @Experimental()
-@Native("HTMLTrackElement")
-class TrackElement extends HtmlElement {
+class TrackElement extends HtmlElement native "HTMLTrackElement" {
   // To suppress missing implicit constructor warnings.
   factory TrackElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -26452,8 +26185,7 @@
 @DocsEditable()
 @DomName('TrackEvent')
 @Unstable()
-@Native("TrackEvent")
-class TrackEvent extends Event {
+class TrackEvent extends Event native "TrackEvent" {
   // To suppress missing implicit constructor warnings.
   factory TrackEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -26469,8 +26201,7 @@
 
 @DocsEditable()
 @DomName('TransitionEvent')
-@Native("TransitionEvent,WebKitTransitionEvent")
-class TransitionEvent extends Event {
+class TransitionEvent extends Event native "TransitionEvent,WebKitTransitionEvent" {
   // To suppress missing implicit constructor warnings.
   factory TransitionEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -26493,8 +26224,7 @@
 
 @DomName('TreeWalker')
 @Unstable()
-@Native("TreeWalker")
-class TreeWalker extends Interceptor {
+class TreeWalker extends Interceptor native "TreeWalker" {
   factory TreeWalker(Node root, int whatToShow) {
     return document._createTreeWalker(root, whatToShow, null);
   }
@@ -26554,8 +26284,7 @@
 
 
 @DomName('UIEvent')
-@Native("UIEvent")
-class UIEvent extends Event {
+class UIEvent extends Event native "UIEvent" {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
   // default to false (since that's Boolean(undefined)).
@@ -26655,8 +26384,7 @@
 
 @DocsEditable()
 @DomName('HTMLUListElement')
-@Native("HTMLUListElement")
-class UListElement extends HtmlElement {
+class UListElement extends HtmlElement native "HTMLUListElement" {
   // To suppress missing implicit constructor warnings.
   factory UListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -26677,8 +26405,7 @@
 
 @DocsEditable()
 @DomName('HTMLUnknownElement')
-@Native("HTMLUnknownElement")
-class UnknownElement extends HtmlElement {
+class UnknownElement extends HtmlElement native "HTMLUnknownElement" {
   // To suppress missing implicit constructor warnings.
   factory UnknownElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -26694,8 +26421,7 @@
 
 
 @DomName('URL')
-@Native("URL")
-class Url extends Interceptor implements UrlUtils {
+class Url extends Interceptor implements UrlUtils native "URL" {
 
   static String createObjectUrl(blob_OR_source_OR_stream) =>
       JS('String',
@@ -26848,8 +26574,7 @@
 
 @DocsEditable()
 @DomName('ValidityState')
-@Native("ValidityState")
-class ValidityState extends Interceptor {
+class ValidityState extends Interceptor native "ValidityState" {
   // To suppress missing implicit constructor warnings.
   factory ValidityState._() { throw new UnsupportedError("Not supported"); }
 
@@ -26899,8 +26624,7 @@
 
 
 @DomName('HTMLVideoElement')
-@Native("HTMLVideoElement")
-class VideoElement extends MediaElement implements CanvasImageSource {
+class VideoElement extends MediaElement implements CanvasImageSource native "HTMLVideoElement" {
   // To suppress missing implicit constructor warnings.
   factory VideoElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -26982,8 +26706,7 @@
 @DocsEditable()
 @DomName('VideoPlaybackQuality')
 @Experimental() // untriaged
-@Native("VideoPlaybackQuality")
-class VideoPlaybackQuality extends Interceptor {
+class VideoPlaybackQuality extends Interceptor native "VideoPlaybackQuality" {
   // To suppress missing implicit constructor warnings.
   factory VideoPlaybackQuality._() { throw new UnsupportedError("Not supported"); }
 
@@ -27026,8 +26749,7 @@
 @DocsEditable()
 @DomName('VTTCue')
 @Experimental() // untriaged
-@Native("VTTCue")
-class VttCue extends TextTrackCue {
+class VttCue extends TextTrackCue native "VTTCue" {
   // To suppress missing implicit constructor warnings.
   factory VttCue._() { throw new UnsupportedError("Not supported"); }
 
@@ -27092,8 +26814,7 @@
 @DocsEditable()
 @DomName('VTTRegion')
 @Experimental() // untriaged
-@Native("VTTRegion")
-class VttRegion extends Interceptor {
+class VttRegion extends Interceptor native "VTTRegion" {
   // To suppress missing implicit constructor warnings.
   factory VttRegion._() { throw new UnsupportedError("Not supported"); }
 
@@ -27157,8 +26878,7 @@
 @DocsEditable()
 @DomName('VTTRegionList')
 @Experimental() // untriaged
-@Native("VTTRegionList")
-class VttRegionList extends Interceptor {
+class VttRegionList extends Interceptor native "VTTRegionList" {
   // To suppress missing implicit constructor warnings.
   factory VttRegionList._() { throw new UnsupportedError("Not supported"); }
 
@@ -27223,8 +26943,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("WebSocket")
-class WebSocket extends EventTarget {
+class WebSocket extends EventTarget native "WebSocket" {
   // To suppress missing implicit constructor warnings.
   factory WebSocket._() { throw new UnsupportedError("Not supported"); }
 
@@ -27418,8 +27137,7 @@
 
 
 @DomName('WheelEvent')
-@Native("WheelEvent,MouseWheelEvent,MouseScrollEvent")
-class WheelEvent extends MouseEvent {
+class WheelEvent extends MouseEvent native "WheelEvent,MouseWheelEvent,MouseScrollEvent" {
 
   factory WheelEvent(String type,
       {Window view, int deltaX: 0, int deltaY: 0,
@@ -27710,8 +27428,7 @@
  * * [Window](http://www.w3.org/TR/Window/) from the W3C.
  */
 @DomName('Window')
-@Native("Window,DOMWindow")
-class Window extends EventTarget implements WindowEventHandlers, WindowBase, GlobalEventHandlers, _WindowTimers, WindowBase64 {
+class Window extends EventTarget implements WindowEventHandlers, WindowBase, GlobalEventHandlers, _WindowTimers, WindowBase64 native "Window,DOMWindow" {
 
   /**
    * Returns a Future that completes just before the window is about to
@@ -29652,8 +29369,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#worker
 @Experimental() // stable
-@Native("Worker")
-class Worker extends EventTarget implements AbstractWorker {
+class Worker extends EventTarget implements AbstractWorker native "Worker" {
   // To suppress missing implicit constructor warnings.
   factory Worker._() { throw new UnsupportedError("Not supported"); }
 
@@ -29715,8 +29431,7 @@
 @DocsEditable()
 @DomName('WorkerConsole')
 @Experimental() // untriaged
-@Native("WorkerConsole")
-class WorkerConsole extends ConsoleBase {
+class WorkerConsole extends ConsoleBase native "WorkerConsole" {
   // To suppress missing implicit constructor warnings.
   factory WorkerConsole._() { throw new UnsupportedError("Not supported"); }
 }
@@ -29728,8 +29443,7 @@
 @DocsEditable()
 @DomName('WorkerCrypto')
 @Experimental() // untriaged
-@Native("WorkerCrypto")
-class WorkerCrypto extends Interceptor {
+class WorkerCrypto extends Interceptor native "WorkerCrypto" {
   // To suppress missing implicit constructor warnings.
   factory WorkerCrypto._() { throw new UnsupportedError("Not supported"); }
 }
@@ -29741,8 +29455,7 @@
 @DocsEditable()
 @DomName('WorkerGlobalScope')
 @Experimental() // untriaged
-@Native("WorkerGlobalScope")
-class WorkerGlobalScope extends EventTarget implements _WindowTimers, WindowBase64 {
+class WorkerGlobalScope extends EventTarget implements _WindowTimers, WindowBase64 native "WorkerGlobalScope" {
   // To suppress missing implicit constructor warnings.
   factory WorkerGlobalScope._() { throw new UnsupportedError("Not supported"); }
 
@@ -29923,8 +29636,7 @@
 @DocsEditable()
 @DomName('WorkerPerformance')
 @Experimental() // untriaged
-@Native("WorkerPerformance")
-class WorkerPerformance extends Interceptor {
+class WorkerPerformance extends Interceptor native "WorkerPerformance" {
   // To suppress missing implicit constructor warnings.
   factory WorkerPerformance._() { throw new UnsupportedError("Not supported"); }
 
@@ -29942,8 +29654,7 @@
 @DomName('XPathEvaluator')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
 @deprecated // experimental
-@Native("XPathEvaluator")
-class XPathEvaluator extends Interceptor {
+class XPathEvaluator extends Interceptor native "XPathEvaluator" {
   // To suppress missing implicit constructor warnings.
   factory XPathEvaluator._() { throw new UnsupportedError("Not supported"); }
 
@@ -29975,8 +29686,7 @@
 @DomName('XPathExpression')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
 @deprecated // experimental
-@Native("XPathExpression")
-class XPathExpression extends Interceptor {
+class XPathExpression extends Interceptor native "XPathExpression" {
   // To suppress missing implicit constructor warnings.
   factory XPathExpression._() { throw new UnsupportedError("Not supported"); }
 
@@ -29993,8 +29703,7 @@
 @DomName('XPathNSResolver')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver
 @deprecated // experimental
-@Native("XPathNSResolver")
-class XPathNSResolver extends Interceptor {
+class XPathNSResolver extends Interceptor native "XPathNSResolver" {
   // To suppress missing implicit constructor warnings.
   factory XPathNSResolver._() { throw new UnsupportedError("Not supported"); }
 
@@ -30012,8 +29721,7 @@
 @DomName('XPathResult')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult
 @deprecated // experimental
-@Native("XPathResult")
-class XPathResult extends Interceptor {
+class XPathResult extends Interceptor native "XPathResult" {
   // To suppress missing implicit constructor warnings.
   factory XPathResult._() { throw new UnsupportedError("Not supported"); }
 
@@ -30101,8 +29809,7 @@
 @DocsEditable()
 @DomName('XMLDocument')
 @Experimental() // untriaged
-@Native("XMLDocument")
-class XmlDocument extends Document {
+class XmlDocument extends Document native "XMLDocument" {
   // To suppress missing implicit constructor warnings.
   factory XmlDocument._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30115,8 +29822,7 @@
 @DomName('XMLSerializer')
 // http://domparsing.spec.whatwg.org/#the-xmlserializer-interface
 @deprecated // stable
-@Native("XMLSerializer")
-class XmlSerializer extends Interceptor {
+class XmlSerializer extends Interceptor native "XMLSerializer" {
   // To suppress missing implicit constructor warnings.
   factory XmlSerializer._() { throw new UnsupportedError("Not supported"); }
 
@@ -30142,8 +29848,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @deprecated // nonstandard
-@Native("XSLTProcessor")
-class XsltProcessor extends Interceptor {
+class XsltProcessor extends Interceptor native "XSLTProcessor" {
   // To suppress missing implicit constructor warnings.
   factory XsltProcessor._() { throw new UnsupportedError("Not supported"); }
 
@@ -30196,8 +29901,7 @@
 
 @DocsEditable()
 @DomName('Attr')
-@Native("Attr")
-class _Attr extends Node {
+class _Attr extends Node native "Attr" {
   // To suppress missing implicit constructor warnings.
   factory _Attr._() { throw new UnsupportedError("Not supported"); }
 
@@ -30224,8 +29928,7 @@
 @DomName('CSSPrimitiveValue')
 // http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface
 @deprecated // deprecated
-@Native("CSSPrimitiveValue")
-abstract class _CSSPrimitiveValue extends _CSSValue {
+abstract class _CSSPrimitiveValue extends _CSSValue native "CSSPrimitiveValue" {
   // To suppress missing implicit constructor warnings.
   factory _CSSPrimitiveValue._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30238,8 +29941,7 @@
 @DomName('CSSUnknownRule')
 // http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface
 @deprecated // deprecated
-@Native("CSSUnknownRule")
-abstract class _CSSUnknownRule extends CssRule {
+abstract class _CSSUnknownRule extends CssRule native "CSSUnknownRule" {
   // To suppress missing implicit constructor warnings.
   factory _CSSUnknownRule._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30252,8 +29954,7 @@
 @DomName('CSSValue')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("CSSValue")
-abstract class _CSSValue extends Interceptor {
+abstract class _CSSValue extends Interceptor native "CSSValue" {
   // To suppress missing implicit constructor warnings.
   factory _CSSValue._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30264,8 +29965,7 @@
 
 @DocsEditable()
 @DomName('ClientRect')
-@Native("ClientRect,DOMRect")
-class _ClientRect extends Interceptor implements Rectangle {
+class _ClientRect extends Interceptor implements Rectangle native "ClientRect,DOMRect" {
 
   // NOTE! All code below should be common with RectangleBase.
    String toString() {
@@ -30427,8 +30127,7 @@
 
 @DocsEditable()
 @DomName('ClientRectList')
-@Native("ClientRectList,DOMRectList")
-class _ClientRectList extends Interceptor with ListMixin<Rectangle>, ImmutableListMixin<Rectangle> implements List<Rectangle>, JavaScriptIndexingBehavior {
+class _ClientRectList extends Interceptor with ListMixin<Rectangle>, ImmutableListMixin<Rectangle> implements List<Rectangle>, JavaScriptIndexingBehavior native "ClientRectList,DOMRectList" {
   // To suppress missing implicit constructor warnings.
   factory _ClientRectList._() { throw new UnsupportedError("Not supported"); }
 
@@ -30493,8 +30192,7 @@
 @DomName('Counter')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("Counter")
-abstract class _Counter extends Interceptor {
+abstract class _Counter extends Interceptor native "Counter" {
   // To suppress missing implicit constructor warnings.
   factory _Counter._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30505,8 +30203,7 @@
 
 @DocsEditable()
 @DomName('CSSRuleList')
-@Native("CSSRuleList")
-class _CssRuleList extends Interceptor with ListMixin<CssRule>, ImmutableListMixin<CssRule> implements JavaScriptIndexingBehavior, List<CssRule> {
+class _CssRuleList extends Interceptor with ListMixin<CssRule>, ImmutableListMixin<CssRule> implements JavaScriptIndexingBehavior, List<CssRule> native "CSSRuleList" {
   // To suppress missing implicit constructor warnings.
   factory _CssRuleList._() { throw new UnsupportedError("Not supported"); }
 
@@ -30571,8 +30268,7 @@
 @DomName('CSSValueList')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("CSSValueList")
-class _CssValueList extends _CSSValue with ListMixin<_CSSValue>, ImmutableListMixin<_CSSValue> implements JavaScriptIndexingBehavior, List<_CSSValue> {
+class _CssValueList extends _CSSValue with ListMixin<_CSSValue>, ImmutableListMixin<_CSSValue> implements JavaScriptIndexingBehavior, List<_CSSValue> native "CSSValueList" {
   // To suppress missing implicit constructor warnings.
   factory _CssValueList._() { throw new UnsupportedError("Not supported"); }
 
@@ -30638,8 +30334,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // http://www.w3.org/TR/file-system-api/#the-filesystemsync-interface
-@Native("DOMFileSystemSync")
-abstract class _DOMFileSystemSync extends Interceptor {
+abstract class _DOMFileSystemSync extends Interceptor native "DOMFileSystemSync" {
   // To suppress missing implicit constructor warnings.
   factory _DOMFileSystemSync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30655,8 +30350,7 @@
 @Experimental()
 // http://www.w3.org/TR/webdatabase/#databasesync
 @deprecated // deprecated
-@Native("DatabaseSync")
-abstract class _DatabaseSync extends Interceptor {
+abstract class _DatabaseSync extends Interceptor native "DatabaseSync" {
   // To suppress missing implicit constructor warnings.
   factory _DatabaseSync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30669,8 +30363,7 @@
 @DomName('DirectoryEntrySync')
 // http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface
 @Experimental()
-@Native("DirectoryEntrySync")
-abstract class _DirectoryEntrySync extends _EntrySync {
+abstract class _DirectoryEntrySync extends _EntrySync native "DirectoryEntrySync" {
   // To suppress missing implicit constructor warnings.
   factory _DirectoryEntrySync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30683,8 +30376,7 @@
 @DomName('DirectoryReaderSync')
 // http://www.w3.org/TR/file-system-api/#idl-def-DirectoryReaderSync
 @Experimental()
-@Native("DirectoryReaderSync")
-abstract class _DirectoryReaderSync extends Interceptor {
+abstract class _DirectoryReaderSync extends Interceptor native "DirectoryReaderSync" {
   // To suppress missing implicit constructor warnings.
   factory _DirectoryReaderSync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30697,8 +30389,7 @@
 @DomName('DocumentType')
 // http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-412266927
 @deprecated // stable
-@Native("DocumentType")
-abstract class _DocumentType extends Node implements ChildNode {
+abstract class _DocumentType extends Node implements ChildNode native "DocumentType" {
   // To suppress missing implicit constructor warnings.
   factory _DocumentType._() { throw new UnsupportedError("Not supported"); }
 
@@ -30716,8 +30407,7 @@
 @Experimental()
 // http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
 @Experimental() // non-standard
-@Native("WebKitPoint")
-class _DomPoint extends Interceptor {
+class _DomPoint extends Interceptor native "WebKitPoint" {
   // To suppress missing implicit constructor warnings.
   factory _DomPoint._() { throw new UnsupportedError("Not supported"); }
 
@@ -30748,8 +30438,7 @@
 @DomName('EntrySync')
 // http://www.w3.org/TR/file-system-api/#idl-def-EntrySync
 @Experimental()
-@Native("EntrySync")
-abstract class _EntrySync extends Interceptor {
+abstract class _EntrySync extends Interceptor native "EntrySync" {
   // To suppress missing implicit constructor warnings.
   factory _EntrySync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30762,8 +30451,7 @@
 @DomName('FileEntrySync')
 // http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface
 @Experimental()
-@Native("FileEntrySync")
-abstract class _FileEntrySync extends _EntrySync {
+abstract class _FileEntrySync extends _EntrySync native "FileEntrySync" {
   // To suppress missing implicit constructor warnings.
   factory _FileEntrySync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30776,8 +30464,7 @@
 @DomName('FileReaderSync')
 // http://www.w3.org/TR/FileAPI/#FileReaderSync
 @Experimental()
-@Native("FileReaderSync")
-abstract class _FileReaderSync extends Interceptor {
+abstract class _FileReaderSync extends Interceptor native "FileReaderSync" {
   // To suppress missing implicit constructor warnings.
   factory _FileReaderSync._() { throw new UnsupportedError("Not supported"); }
 
@@ -30797,8 +30484,7 @@
 @DomName('FileWriterSync')
 // http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync
 @Experimental()
-@Native("FileWriterSync")
-abstract class _FileWriterSync extends Interceptor {
+abstract class _FileWriterSync extends Interceptor native "FileWriterSync" {
   // To suppress missing implicit constructor warnings.
   factory _FileWriterSync._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30811,8 +30497,7 @@
 @DomName('GamepadList')
 // https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html
 @Experimental()
-@Native("GamepadList")
-class _GamepadList extends Interceptor with ListMixin<Gamepad>, ImmutableListMixin<Gamepad> implements JavaScriptIndexingBehavior, List<Gamepad> {
+class _GamepadList extends Interceptor with ListMixin<Gamepad>, ImmutableListMixin<Gamepad> implements JavaScriptIndexingBehavior, List<Gamepad> native "GamepadList" {
   // To suppress missing implicit constructor warnings.
   factory _GamepadList._() { throw new UnsupportedError("Not supported"); }
 
@@ -30877,8 +30562,7 @@
 @DomName('HTMLAllCollection')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dom-document-all
 @deprecated // deprecated
-@Native("HTMLAllCollection")
-abstract class _HTMLAllCollection extends Interceptor {
+abstract class _HTMLAllCollection extends Interceptor native "HTMLAllCollection" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLAllCollection._() { throw new UnsupportedError("Not supported"); }
 
@@ -30896,8 +30580,7 @@
 @DomName('HTMLAppletElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-applet-element
 @deprecated // deprecated
-@Native("HTMLAppletElement")
-abstract class _HTMLAppletElement extends HtmlElement {
+abstract class _HTMLAppletElement extends HtmlElement native "HTMLAppletElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLAppletElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -30916,8 +30599,7 @@
 @DomName('HTMLDirectoryElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dir
 @deprecated // deprecated
-@Native("HTMLDirectoryElement")
-abstract class _HTMLDirectoryElement extends HtmlElement {
+abstract class _HTMLDirectoryElement extends HtmlElement native "HTMLDirectoryElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLDirectoryElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -30936,8 +30618,7 @@
 @DomName('HTMLFontElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlfontelement
 @deprecated // deprecated
-@Native("HTMLFontElement")
-abstract class _HTMLFontElement extends HtmlElement {
+abstract class _HTMLFontElement extends HtmlElement native "HTMLFontElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFontElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -30956,8 +30637,7 @@
 @DomName('HTMLFrameElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlframeelement
 @deprecated // deprecated
-@Native("HTMLFrameElement")
-abstract class _HTMLFrameElement extends HtmlElement {
+abstract class _HTMLFrameElement extends HtmlElement native "HTMLFrameElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFrameElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -30976,8 +30656,7 @@
 @DomName('HTMLFrameSetElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#frameset
 @deprecated // deprecated
-@Native("HTMLFrameSetElement")
-abstract class _HTMLFrameSetElement extends HtmlElement implements WindowEventHandlers {
+abstract class _HTMLFrameSetElement extends HtmlElement implements WindowEventHandlers native "HTMLFrameSetElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFrameSetElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -30996,8 +30675,7 @@
 @DomName('HTMLMarqueeElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-marquee-element
 @deprecated // deprecated
-@Native("HTMLMarqueeElement")
-abstract class _HTMLMarqueeElement extends HtmlElement {
+abstract class _HTMLMarqueeElement extends HtmlElement native "HTMLMarqueeElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLMarqueeElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -31015,8 +30693,7 @@
 @DomName('MutationEvent')
 // http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents
 @deprecated
-@Native("MutationEvent")
-abstract class _MutationEvent extends Event {
+abstract class _MutationEvent extends Event native "MutationEvent" {
   factory _MutationEvent(String type,
       {bool canBubble: false, bool cancelable: false, Node relatedNode,
       String prevValue, String newValue, String attrName, int attrChange: 0}) {
@@ -31030,6 +30707,9 @@
   factory _MutationEvent._() { throw new UnsupportedError("Not supported"); }
 
 }
+
+
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -31039,8 +30719,7 @@
 @DomName('NamedNodeMap')
 // http://dom.spec.whatwg.org/#namednodemap
 @deprecated // deprecated
-@Native("NamedNodeMap,MozNamedAttrMap")
-class _NamedNodeMap extends Interceptor with ListMixin<Node>, ImmutableListMixin<Node> implements JavaScriptIndexingBehavior, List<Node> {
+class _NamedNodeMap extends Interceptor with ListMixin<Node>, ImmutableListMixin<Node> implements JavaScriptIndexingBehavior, List<Node> native "NamedNodeMap,MozNamedAttrMap" {
   // To suppress missing implicit constructor warnings.
   factory _NamedNodeMap._() { throw new UnsupportedError("Not supported"); }
 
@@ -31133,8 +30812,7 @@
 @DomName('Notation')
 // http://dom.spec.whatwg.org/#notation
 @deprecated // deprecated
-@Native("Notation")
-abstract class _Notation extends Node {
+abstract class _Notation extends Node native "Notation" {
   // To suppress missing implicit constructor warnings.
   factory _Notation._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31150,8 +30828,7 @@
 @Experimental()
 // http://www.w3.org/TR/notifications/#showing-a-notification
 @deprecated // deprecated
-@Native("NotificationCenter")
-abstract class _NotificationCenter extends Interceptor {
+abstract class _NotificationCenter extends Interceptor native "NotificationCenter" {
   // To suppress missing implicit constructor warnings.
   factory _NotificationCenter._() { throw new UnsupportedError("Not supported"); }
 
@@ -31166,8 +30843,7 @@
 @DocsEditable()
 @DomName('PagePopupController')
 @deprecated // nonstandard
-@Native("PagePopupController")
-abstract class _PagePopupController extends Interceptor {
+abstract class _PagePopupController extends Interceptor native "PagePopupController" {
   // To suppress missing implicit constructor warnings.
   factory _PagePopupController._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31180,8 +30856,7 @@
 @DomName('RGBColor')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("RGBColor")
-abstract class _RGBColor extends Interceptor {
+abstract class _RGBColor extends Interceptor native "RGBColor" {
   // To suppress missing implicit constructor warnings.
   factory _RGBColor._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31203,8 +30878,7 @@
 @DomName('Rect')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("Rect")
-abstract class _Rect extends Interceptor {
+abstract class _Rect extends Interceptor native "Rect" {
   // To suppress missing implicit constructor warnings.
   factory _Rect._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31216,8 +30890,7 @@
 @DocsEditable()
 @DomName('ServiceWorker')
 @Experimental() // untriaged
-@Native("ServiceWorker")
-abstract class _ServiceWorker extends Interceptor {
+abstract class _ServiceWorker extends Interceptor native "ServiceWorker" {
   // To suppress missing implicit constructor warnings.
   factory _ServiceWorker._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31230,8 +30903,7 @@
 @DomName('SpeechInputResultList')
 // http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html#speech_input_result_list_interface
 @Experimental()
-@Native("SpeechInputResultList")
-class _SpeechInputResultList extends Interceptor with ListMixin<SpeechInputResult>, ImmutableListMixin<SpeechInputResult> implements JavaScriptIndexingBehavior, List<SpeechInputResult> {
+class _SpeechInputResultList extends Interceptor with ListMixin<SpeechInputResult>, ImmutableListMixin<SpeechInputResult> implements JavaScriptIndexingBehavior, List<SpeechInputResult> native "SpeechInputResultList" {
   // To suppress missing implicit constructor warnings.
   factory _SpeechInputResultList._() { throw new UnsupportedError("Not supported"); }
 
@@ -31296,8 +30968,7 @@
 @DomName('SpeechRecognitionResultList')
 // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechrecognitionresultlist
 @Experimental()
-@Native("SpeechRecognitionResultList")
-class _SpeechRecognitionResultList extends Interceptor with ListMixin<SpeechRecognitionResult>, ImmutableListMixin<SpeechRecognitionResult> implements JavaScriptIndexingBehavior, List<SpeechRecognitionResult> {
+class _SpeechRecognitionResultList extends Interceptor with ListMixin<SpeechRecognitionResult>, ImmutableListMixin<SpeechRecognitionResult> implements JavaScriptIndexingBehavior, List<SpeechRecognitionResult> native "SpeechRecognitionResultList" {
   // To suppress missing implicit constructor warnings.
   factory _SpeechRecognitionResultList._() { throw new UnsupportedError("Not supported"); }
 
@@ -31360,8 +31031,7 @@
 
 @DocsEditable()
 @DomName('StyleSheetList')
-@Native("StyleSheetList")
-class _StyleSheetList extends Interceptor with ListMixin<StyleSheet>, ImmutableListMixin<StyleSheet> implements JavaScriptIndexingBehavior, List<StyleSheet> {
+class _StyleSheetList extends Interceptor with ListMixin<StyleSheet>, ImmutableListMixin<StyleSheet> implements JavaScriptIndexingBehavior, List<StyleSheet> native "StyleSheetList" {
   // To suppress missing implicit constructor warnings.
   factory _StyleSheetList._() { throw new UnsupportedError("Not supported"); }
 
@@ -31429,8 +31099,7 @@
 @DocsEditable()
 @DomName('SubtleCrypto')
 @Experimental() // untriaged
-@Native("SubtleCrypto")
-abstract class _SubtleCrypto extends Interceptor {
+abstract class _SubtleCrypto extends Interceptor native "SubtleCrypto" {
   // To suppress missing implicit constructor warnings.
   factory _SubtleCrypto._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31443,8 +31112,7 @@
 @DomName('WebKitCSSFilterValue')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("WebKitCSSFilterValue")
-abstract class _WebKitCSSFilterValue extends _CssValueList {
+abstract class _WebKitCSSFilterValue extends _CssValueList native "WebKitCSSFilterValue" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitCSSFilterValue._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31460,8 +31128,7 @@
 @Experimental()
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("WebKitCSSMatrix")
-abstract class _WebKitCSSMatrix extends Interceptor {
+abstract class _WebKitCSSMatrix extends Interceptor native "WebKitCSSMatrix" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitCSSMatrix._() { throw new UnsupportedError("Not supported"); }
 
@@ -31485,8 +31152,7 @@
 @DomName('WebKitCSSTransformValue')
 // http://dev.w3.org/csswg/cssom/
 @deprecated // deprecated
-@Native("WebKitCSSTransformValue")
-abstract class _WebKitCSSTransformValue extends _CssValueList {
+abstract class _WebKitCSSTransformValue extends _CssValueList native "WebKitCSSTransformValue" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitCSSTransformValue._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31498,8 +31164,7 @@
 @DocsEditable()
 @DomName('WebKitMediaSource')
 @Experimental() // untriaged
-@Native("WebKitMediaSource")
-abstract class _WebKitMediaSource extends EventTarget {
+abstract class _WebKitMediaSource extends EventTarget native "WebKitMediaSource" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitMediaSource._() { throw new UnsupportedError("Not supported"); }
 
@@ -31518,8 +31183,7 @@
 @DocsEditable()
 @DomName('WebKitNotification')
 @Experimental() // untriaged
-@Native("WebKitNotification")
-abstract class _WebKitNotification extends EventTarget {
+abstract class _WebKitNotification extends EventTarget native "WebKitNotification" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitNotification._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31531,8 +31195,7 @@
 @DocsEditable()
 @DomName('WebKitSourceBuffer')
 @Experimental() // untriaged
-@Native("WebKitSourceBuffer")
-abstract class _WebKitSourceBuffer extends Interceptor {
+abstract class _WebKitSourceBuffer extends Interceptor native "WebKitSourceBuffer" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitSourceBuffer._() { throw new UnsupportedError("Not supported"); }
 }
@@ -31544,8 +31207,7 @@
 @DocsEditable()
 @DomName('WebKitSourceBufferList')
 @Experimental() // untriaged
-@Native("WebKitSourceBufferList")
-abstract class _WebKitSourceBufferList extends EventTarget {
+abstract class _WebKitSourceBufferList extends EventTarget native "WebKitSourceBufferList" {
   // To suppress missing implicit constructor warnings.
   factory _WebKitSourceBufferList._() { throw new UnsupportedError("Not supported"); }
 
@@ -31584,8 +31246,7 @@
 @DomName('WorkerLocation')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workerlocation
 @Experimental()
-@Native("WorkerLocation")
-abstract class _WorkerLocation extends Interceptor implements UrlUtilsReadOnly {
+abstract class _WorkerLocation extends Interceptor implements UrlUtilsReadOnly native "WorkerLocation" {
   // To suppress missing implicit constructor warnings.
   factory _WorkerLocation._() { throw new UnsupportedError("Not supported"); }
 
@@ -31600,8 +31261,7 @@
 @DomName('WorkerNavigator')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workernavigator
 @Experimental()
-@Native("WorkerNavigator")
-abstract class _WorkerNavigator extends Interceptor implements NavigatorOnLine, NavigatorID {
+abstract class _WorkerNavigator extends Interceptor implements NavigatorOnLine, NavigatorID native "WorkerNavigator" {
   // To suppress missing implicit constructor warnings.
   factory _WorkerNavigator._() { throw new UnsupportedError("Not supported"); }
 
@@ -31617,8 +31277,7 @@
 @DocsEditable()
 @DomName('XMLHttpRequestProgressEvent')
 @Experimental() // nonstandard
-@Native("XMLHttpRequestProgressEvent")
-abstract class _XMLHttpRequestProgressEvent extends ProgressEvent {
+abstract class _XMLHttpRequestProgressEvent extends ProgressEvent native "XMLHttpRequestProgressEvent" {
   // To suppress missing implicit constructor warnings.
   factory _XMLHttpRequestProgressEvent._() { throw new UnsupportedError("Not supported"); }
 }
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 6f14303..89febfd 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -1277,6 +1277,7 @@
   Blob slice([int start, int end, String contentType]) => _blink.BlinkBlob.$slice(this, start, end, contentType);
 
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -2518,6 +2519,7 @@
   @deprecated
   double get backingStorePixelRatio => 1.0;
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -7445,6 +7447,7 @@
   }
 
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -7535,7 +7538,7 @@
  * [Target 2: Connect Dart & HTML](http://www.dartlang.org/docs/tutorials/connect-dart-html/).
  */
 @DomName('Document')
-class Document extends Node
+class Document extends Node 
 {
 
   // To suppress missing implicit constructor warnings.
@@ -13796,6 +13799,8 @@
   int _watchPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Object options]) => _blink.BlinkGeolocation.$watchPosition_Callback(this, successCallback, errorCallback, options);
 }
 
+
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -16554,7 +16559,8 @@
     SubmitButtonInputElement,
     ImageButtonInputElement,
     ResetButtonInputElement,
-    ButtonInputElement {
+    ButtonInputElement
+     {
 
   factory InputElement({String type}) {
     var e = document.createElement("input");
@@ -17539,6 +17545,7 @@
 abstract class ButtonInputElement implements InputElementBase {
   factory ButtonInputElement() => new InputElement(type: 'button');
 }
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -26006,7 +26013,7 @@
 @DomName('Storage')
 @Unstable()
 class Storage extends NativeFieldWrapperClass2
-    implements Map<String, String> {
+    implements Map<String, String>  {
 
   void addAll(Map<String, String> other) {
     other.forEach((k, v) { this[k] = v; });
@@ -32296,6 +32303,9 @@
   factory _MutationEvent._() { throw new UnsupportedError("Not supported"); }
 
 }
+
+
+
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index 229ad4e..b344977 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -77,7 +77,7 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, Returns, JSName, Native, Null;
+import 'dart:_js_helper' show Creates, Returns, JSName, Null;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor, JSExtendableArray;
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -213,8 +213,7 @@
 
 @DomName('IDBCursor')
 @Unstable()
-@Native("IDBCursor")
-class Cursor extends Interceptor {
+class Cursor extends Interceptor native "IDBCursor" {
   @DomName('IDBCursor.delete')
   Future delete() {
    try {
@@ -301,8 +300,7 @@
 @DocsEditable()
 @DomName('IDBCursorWithValue')
 @Unstable()
-@Native("IDBCursorWithValue")
-class CursorWithValue extends Cursor {
+class CursorWithValue extends Cursor native "IDBCursorWithValue" {
   // To suppress missing implicit constructor warnings.
   factory CursorWithValue._() { throw new UnsupportedError("Not supported"); }
 
@@ -332,8 +330,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @Experimental()
 @Unstable()
-@Native("IDBDatabase")
-class Database extends EventTarget {
+class Database extends EventTarget native "IDBDatabase" {
   @DomName('IDBDatabase.createObjectStore')
   @DocsEditable()
   ObjectStore createObjectStore(String name,
@@ -511,8 +508,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @Experimental()
 @Unstable()
-@Native("IDBFactory")
-class IdbFactory extends Interceptor {
+class IdbFactory extends Interceptor native "IDBFactory" {
   /**
    * Checks to see if Indexed DB is supported on the current platform.
    */
@@ -647,8 +643,7 @@
 
 @DomName('IDBIndex')
 @Unstable()
-@Native("IDBIndex")
-class Index extends Interceptor {
+class Index extends Interceptor native "IDBIndex" {
   @DomName('IDBIndex.count')
   Future<int> count([key_OR_range]) {
    try {
@@ -805,8 +800,7 @@
 
 @DomName('IDBKeyRange')
 @Unstable()
-@Native("IDBKeyRange")
-class KeyRange extends Interceptor {
+class KeyRange extends Interceptor native "IDBKeyRange" {
   @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.createKeyRange_only(value);
@@ -874,8 +868,7 @@
 
 @DomName('IDBObjectStore')
 @Unstable()
-@Native("IDBObjectStore")
-class ObjectStore extends Interceptor {
+class ObjectStore extends Interceptor native "IDBObjectStore" {
 
   @DomName('IDBObjectStore.add')
   Future add(value, [key]) {
@@ -1205,8 +1198,7 @@
 @DocsEditable()
 @DomName('IDBOpenDBRequest')
 @Unstable()
-@Native("IDBOpenDBRequest,IDBVersionChangeRequest")
-class OpenDBRequest extends Request {
+class OpenDBRequest extends Request native "IDBOpenDBRequest,IDBVersionChangeRequest" {
   // To suppress missing implicit constructor warnings.
   factory OpenDBRequest._() { throw new UnsupportedError("Not supported"); }
 
@@ -1248,8 +1240,7 @@
 @DocsEditable()
 @DomName('IDBRequest')
 @Unstable()
-@Native("IDBRequest")
-class Request extends EventTarget {
+class Request extends EventTarget native "IDBRequest" {
   // To suppress missing implicit constructor warnings.
   factory Request._() { throw new UnsupportedError("Not supported"); }
 
@@ -1316,8 +1307,7 @@
 
 @DomName('IDBTransaction')
 @Unstable()
-@Native("IDBTransaction")
-class Transaction extends EventTarget {
+class Transaction extends EventTarget native "IDBTransaction" {
 
   /**
    * Provides a Future which will be completed once the transaction has
@@ -1424,8 +1414,7 @@
 @DocsEditable()
 @DomName('IDBVersionChangeEvent')
 @Unstable()
-@Native("IDBVersionChangeEvent")
-class VersionChangeEvent extends Event {
+class VersionChangeEvent extends Event native "IDBVersionChangeEvent" {
   // To suppress missing implicit constructor warnings.
   factory VersionChangeEvent._() { throw new UnsupportedError("Not supported"); }
 
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index c7c799a..c3ddd80 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -13,7 +13,7 @@
 import 'dart:_internal' hide deprecated;
 import 'dart:html';
 import 'dart:html_common';
-import 'dart:_js_helper' show Creates, Returns, JSName, Native;
+import 'dart:_js_helper' show Creates, Returns, JSName;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 // DO NOT EDIT - unless you are editing documentation as per:
@@ -44,8 +44,7 @@
 @DocsEditable()
 @DomName('SVGAElement')
 @Unstable()
-@Native("SVGAElement")
-class AElement extends GraphicsElement implements UriReference {
+class AElement extends GraphicsElement implements UriReference native "SVGAElement" {
   // To suppress missing implicit constructor warnings.
   factory AElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -80,8 +79,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGAltGlyphElement")
-class AltGlyphElement extends TextPositioningElement implements UriReference {
+class AltGlyphElement extends TextPositioningElement implements UriReference native "SVGAltGlyphElement" {
   // To suppress missing implicit constructor warnings.
   factory AltGlyphElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -120,8 +118,7 @@
 @DocsEditable()
 @DomName('SVGAngle')
 @Unstable()
-@Native("SVGAngle")
-class Angle extends Interceptor {
+class Angle extends Interceptor native "SVGAngle" {
   // To suppress missing implicit constructor warnings.
   factory Angle._() { throw new UnsupportedError("Not supported"); }
 
@@ -180,8 +177,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGAnimateElement")
-class AnimateElement extends AnimationElement {
+class AnimateElement extends AnimationElement native "SVGAnimateElement" {
   // To suppress missing implicit constructor warnings.
   factory AnimateElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -209,8 +205,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGAnimateMotionElement")
-class AnimateMotionElement extends AnimationElement {
+class AnimateMotionElement extends AnimationElement native "SVGAnimateMotionElement" {
   // To suppress missing implicit constructor warnings.
   factory AnimateMotionElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -238,8 +233,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGAnimateTransformElement")
-class AnimateTransformElement extends AnimationElement {
+class AnimateTransformElement extends AnimationElement native "SVGAnimateTransformElement" {
   // To suppress missing implicit constructor warnings.
   factory AnimateTransformElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -264,8 +258,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedAngle')
 @Unstable()
-@Native("SVGAnimatedAngle")
-class AnimatedAngle extends Interceptor {
+class AnimatedAngle extends Interceptor native "SVGAnimatedAngle" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedAngle._() { throw new UnsupportedError("Not supported"); }
 
@@ -285,8 +278,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedBoolean')
 @Unstable()
-@Native("SVGAnimatedBoolean")
-class AnimatedBoolean extends Interceptor {
+class AnimatedBoolean extends Interceptor native "SVGAnimatedBoolean" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedBoolean._() { throw new UnsupportedError("Not supported"); }
 
@@ -306,8 +298,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedEnumeration')
 @Unstable()
-@Native("SVGAnimatedEnumeration")
-class AnimatedEnumeration extends Interceptor {
+class AnimatedEnumeration extends Interceptor native "SVGAnimatedEnumeration" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedEnumeration._() { throw new UnsupportedError("Not supported"); }
 
@@ -327,8 +318,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedInteger')
 @Unstable()
-@Native("SVGAnimatedInteger")
-class AnimatedInteger extends Interceptor {
+class AnimatedInteger extends Interceptor native "SVGAnimatedInteger" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedInteger._() { throw new UnsupportedError("Not supported"); }
 
@@ -348,8 +338,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedLength')
 @Unstable()
-@Native("SVGAnimatedLength")
-class AnimatedLength extends Interceptor {
+class AnimatedLength extends Interceptor native "SVGAnimatedLength" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedLength._() { throw new UnsupportedError("Not supported"); }
 
@@ -369,8 +358,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedLengthList')
 @Unstable()
-@Native("SVGAnimatedLengthList")
-class AnimatedLengthList extends Interceptor {
+class AnimatedLengthList extends Interceptor native "SVGAnimatedLengthList" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedLengthList._() { throw new UnsupportedError("Not supported"); }
 
@@ -390,8 +378,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedNumber')
 @Unstable()
-@Native("SVGAnimatedNumber")
-class AnimatedNumber extends Interceptor {
+class AnimatedNumber extends Interceptor native "SVGAnimatedNumber" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedNumber._() { throw new UnsupportedError("Not supported"); }
 
@@ -411,8 +398,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedNumberList')
 @Unstable()
-@Native("SVGAnimatedNumberList")
-class AnimatedNumberList extends Interceptor {
+class AnimatedNumberList extends Interceptor native "SVGAnimatedNumberList" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedNumberList._() { throw new UnsupportedError("Not supported"); }
 
@@ -432,8 +418,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedPreserveAspectRatio')
 @Unstable()
-@Native("SVGAnimatedPreserveAspectRatio")
-class AnimatedPreserveAspectRatio extends Interceptor {
+class AnimatedPreserveAspectRatio extends Interceptor native "SVGAnimatedPreserveAspectRatio" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedPreserveAspectRatio._() { throw new UnsupportedError("Not supported"); }
 
@@ -453,8 +438,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedRect')
 @Unstable()
-@Native("SVGAnimatedRect")
-class AnimatedRect extends Interceptor {
+class AnimatedRect extends Interceptor native "SVGAnimatedRect" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedRect._() { throw new UnsupportedError("Not supported"); }
 
@@ -474,8 +458,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedString')
 @Unstable()
-@Native("SVGAnimatedString")
-class AnimatedString extends Interceptor {
+class AnimatedString extends Interceptor native "SVGAnimatedString" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedString._() { throw new UnsupportedError("Not supported"); }
 
@@ -495,8 +478,7 @@
 @DocsEditable()
 @DomName('SVGAnimatedTransformList')
 @Unstable()
-@Native("SVGAnimatedTransformList")
-class AnimatedTransformList extends Interceptor {
+class AnimatedTransformList extends Interceptor native "SVGAnimatedTransformList" {
   // To suppress missing implicit constructor warnings.
   factory AnimatedTransformList._() { throw new UnsupportedError("Not supported"); }
 
@@ -516,8 +498,7 @@
 @DocsEditable()
 @DomName('SVGAnimationElement')
 @Unstable()
-@Native("SVGAnimationElement")
-class AnimationElement extends SvgElement implements Tests {
+class AnimationElement extends SvgElement implements Tests native "SVGAnimationElement" {
   // To suppress missing implicit constructor warnings.
   factory AnimationElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -589,8 +570,7 @@
 @DocsEditable()
 @DomName('SVGCircleElement')
 @Unstable()
-@Native("SVGCircleElement")
-class CircleElement extends GeometryElement {
+class CircleElement extends GeometryElement native "SVGCircleElement" {
   // To suppress missing implicit constructor warnings.
   factory CircleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -624,8 +604,7 @@
 @DocsEditable()
 @DomName('SVGClipPathElement')
 @Unstable()
-@Native("SVGClipPathElement")
-class ClipPathElement extends GraphicsElement {
+class ClipPathElement extends GraphicsElement native "SVGClipPathElement" {
   // To suppress missing implicit constructor warnings.
   factory ClipPathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -651,8 +630,7 @@
 @DocsEditable()
 @DomName('SVGDefsElement')
 @Unstable()
-@Native("SVGDefsElement")
-class DefsElement extends GraphicsElement {
+class DefsElement extends GraphicsElement native "SVGDefsElement" {
   // To suppress missing implicit constructor warnings.
   factory DefsElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -674,8 +652,7 @@
 @DocsEditable()
 @DomName('SVGDescElement')
 @Unstable()
-@Native("SVGDescElement")
-class DescElement extends SvgElement {
+class DescElement extends SvgElement native "SVGDescElement" {
   // To suppress missing implicit constructor warnings.
   factory DescElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -697,8 +674,7 @@
 @DocsEditable()
 @DomName('SVGDiscardElement')
 @Experimental() // untriaged
-@Native("SVGDiscardElement")
-class DiscardElement extends SvgElement {
+class DiscardElement extends SvgElement native "SVGDiscardElement" {
   // To suppress missing implicit constructor warnings.
   factory DiscardElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -716,8 +692,7 @@
 @DocsEditable()
 @DomName('SVGElementInstance')
 @Unstable()
-@Native("SVGElementInstance")
-class ElementInstance extends EventTarget {
+class ElementInstance extends EventTarget native "SVGElementInstance" {
   // To suppress missing implicit constructor warnings.
   factory ElementInstance._() { throw new UnsupportedError("Not supported"); }
 
@@ -1395,8 +1370,7 @@
 @DocsEditable()
 @DomName('SVGEllipseElement')
 @Unstable()
-@Native("SVGEllipseElement")
-class EllipseElement extends GeometryElement {
+class EllipseElement extends GeometryElement native "SVGEllipseElement" {
   // To suppress missing implicit constructor warnings.
   factory EllipseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1438,8 +1412,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEBlendElement")
-class FEBlendElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEBlendElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEBlendElement" {
   // To suppress missing implicit constructor warnings.
   factory FEBlendElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1526,8 +1499,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEColorMatrixElement")
-class FEColorMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEColorMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEColorMatrixElement" {
   // To suppress missing implicit constructor warnings.
   factory FEColorMatrixElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1610,8 +1582,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEComponentTransferElement")
-class FEComponentTransferElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEComponentTransferElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEComponentTransferElement" {
   // To suppress missing implicit constructor warnings.
   factory FEComponentTransferElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1662,8 +1633,7 @@
 @DocsEditable()
 @DomName('SVGFECompositeElement')
 @Unstable()
-@Native("SVGFECompositeElement")
-class FECompositeElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FECompositeElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFECompositeElement" {
   // To suppress missing implicit constructor warnings.
   factory FECompositeElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -1763,8 +1733,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEConvolveMatrixElement")
-class FEConvolveMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEConvolveMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEConvolveMatrixElement" {
   // To suppress missing implicit constructor warnings.
   factory FEConvolveMatrixElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1879,8 +1848,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEDiffuseLightingElement")
-class FEDiffuseLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEDiffuseLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEDiffuseLightingElement" {
   // To suppress missing implicit constructor warnings.
   factory FEDiffuseLightingElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1951,8 +1919,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEDisplacementMapElement")
-class FEDisplacementMapElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEDisplacementMapElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEDisplacementMapElement" {
   // To suppress missing implicit constructor warnings.
   factory FEDisplacementMapElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2043,8 +2010,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEDistantLightElement")
-class FEDistantLightElement extends SvgElement {
+class FEDistantLightElement extends SvgElement native "SVGFEDistantLightElement" {
   // To suppress missing implicit constructor warnings.
   factory FEDistantLightElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2081,8 +2047,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEFloodElement")
-class FEFloodElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEFloodElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEFloodElement" {
   // To suppress missing implicit constructor warnings.
   factory FEFloodElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2133,8 +2098,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEFuncAElement")
-class FEFuncAElement extends _SVGComponentTransferFunctionElement {
+class FEFuncAElement extends _SVGComponentTransferFunctionElement native "SVGFEFuncAElement" {
   // To suppress missing implicit constructor warnings.
   factory FEFuncAElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2163,8 +2127,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEFuncBElement")
-class FEFuncBElement extends _SVGComponentTransferFunctionElement {
+class FEFuncBElement extends _SVGComponentTransferFunctionElement native "SVGFEFuncBElement" {
   // To suppress missing implicit constructor warnings.
   factory FEFuncBElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2193,8 +2156,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEFuncGElement")
-class FEFuncGElement extends _SVGComponentTransferFunctionElement {
+class FEFuncGElement extends _SVGComponentTransferFunctionElement native "SVGFEFuncGElement" {
   // To suppress missing implicit constructor warnings.
   factory FEFuncGElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2223,8 +2185,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEFuncRElement")
-class FEFuncRElement extends _SVGComponentTransferFunctionElement {
+class FEFuncRElement extends _SVGComponentTransferFunctionElement native "SVGFEFuncRElement" {
   // To suppress missing implicit constructor warnings.
   factory FEFuncRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2253,8 +2214,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEGaussianBlurElement")
-class FEGaussianBlurElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEGaussianBlurElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEGaussianBlurElement" {
   // To suppress missing implicit constructor warnings.
   factory FEGaussianBlurElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2321,8 +2281,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEImageElement")
-class FEImageElement extends SvgElement implements FilterPrimitiveStandardAttributes, UriReference {
+class FEImageElement extends SvgElement implements FilterPrimitiveStandardAttributes, UriReference native "SVGFEImageElement" {
   // To suppress missing implicit constructor warnings.
   factory FEImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2383,8 +2342,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEMergeElement")
-class FEMergeElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEMergeElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEMergeElement" {
   // To suppress missing implicit constructor warnings.
   factory FEMergeElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2435,8 +2393,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEMergeNodeElement")
-class FEMergeNodeElement extends SvgElement {
+class FEMergeNodeElement extends SvgElement native "SVGFEMergeNodeElement" {
   // To suppress missing implicit constructor warnings.
   factory FEMergeNodeElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2469,8 +2426,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEMorphologyElement")
-class FEMorphologyElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEMorphologyElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEMorphologyElement" {
   // To suppress missing implicit constructor warnings.
   factory FEMorphologyElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -2546,8 +2502,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEOffsetElement")
-class FEOffsetElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FEOffsetElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEOffsetElement" {
   // To suppress missing implicit constructor warnings.
   factory FEOffsetElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2610,8 +2565,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFEPointLightElement")
-class FEPointLightElement extends SvgElement {
+class FEPointLightElement extends SvgElement native "SVGFEPointLightElement" {
   // To suppress missing implicit constructor warnings.
   factory FEPointLightElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2652,8 +2606,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFESpecularLightingElement")
-class FESpecularLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FESpecularLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFESpecularLightingElement" {
   // To suppress missing implicit constructor warnings.
   factory FESpecularLightingElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2720,8 +2673,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFESpotLightElement")
-class FESpotLightElement extends SvgElement {
+class FESpotLightElement extends SvgElement native "SVGFESpotLightElement" {
   // To suppress missing implicit constructor warnings.
   factory FESpotLightElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2782,8 +2734,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFETileElement")
-class FETileElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FETileElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFETileElement" {
   // To suppress missing implicit constructor warnings.
   factory FETileElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2838,8 +2789,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFETurbulenceElement")
-class FETurbulenceElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+class FETurbulenceElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFETurbulenceElement" {
   // To suppress missing implicit constructor warnings.
   factory FETurbulenceElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2938,8 +2888,7 @@
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGFilterElement")
-class FilterElement extends SvgElement implements UriReference {
+class FilterElement extends SvgElement implements UriReference native "SVGFilterElement" {
   // To suppress missing implicit constructor warnings.
   factory FilterElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3047,8 +2996,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGForeignObjectElement")
-class ForeignObjectElement extends GraphicsElement {
+class ForeignObjectElement extends GraphicsElement native "SVGForeignObjectElement" {
   // To suppress missing implicit constructor warnings.
   factory ForeignObjectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3089,8 +3037,7 @@
 @DocsEditable()
 @DomName('SVGGElement')
 @Unstable()
-@Native("SVGGElement")
-class GElement extends GraphicsElement {
+class GElement extends GraphicsElement native "SVGGElement" {
   // To suppress missing implicit constructor warnings.
   factory GElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3112,8 +3059,7 @@
 @DocsEditable()
 @DomName('SVGGeometryElement')
 @Experimental() // untriaged
-@Native("SVGGeometryElement")
-class GeometryElement extends GraphicsElement {
+class GeometryElement extends GraphicsElement native "SVGGeometryElement" {
   // To suppress missing implicit constructor warnings.
   factory GeometryElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -3141,8 +3087,7 @@
 @DocsEditable()
 @DomName('SVGGraphicsElement')
 @Experimental() // untriaged
-@Native("SVGGraphicsElement")
-class GraphicsElement extends SvgElement implements Tests {
+class GraphicsElement extends SvgElement implements Tests native "SVGGraphicsElement" {
   // To suppress missing implicit constructor warnings.
   factory GraphicsElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -3219,8 +3164,7 @@
 @DocsEditable()
 @DomName('SVGImageElement')
 @Unstable()
-@Native("SVGImageElement")
-class ImageElement extends GraphicsElement implements UriReference {
+class ImageElement extends GraphicsElement implements UriReference native "SVGImageElement" {
   // To suppress missing implicit constructor warnings.
   factory ImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3268,8 +3212,7 @@
 @DocsEditable()
 @DomName('SVGLength')
 @Unstable()
-@Native("SVGLength")
-class Length extends Interceptor {
+class Length extends Interceptor native "SVGLength" {
   // To suppress missing implicit constructor warnings.
   factory Length._() { throw new UnsupportedError("Not supported"); }
 
@@ -3349,8 +3292,7 @@
 @DocsEditable()
 @DomName('SVGLengthList')
 @Unstable()
-@Native("SVGLengthList")
-class LengthList extends Interceptor with ListMixin<Length>, ImmutableListMixin<Length> implements List<Length> {
+class LengthList extends Interceptor with ListMixin<Length>, ImmutableListMixin<Length> implements List<Length> native "SVGLengthList" {
   // To suppress missing implicit constructor warnings.
   factory LengthList._() { throw new UnsupportedError("Not supported"); }
 
@@ -3440,8 +3382,7 @@
 @DocsEditable()
 @DomName('SVGLineElement')
 @Unstable()
-@Native("SVGLineElement")
-class LineElement extends GeometryElement {
+class LineElement extends GeometryElement native "SVGLineElement" {
   // To suppress missing implicit constructor warnings.
   factory LineElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3479,8 +3420,7 @@
 @DocsEditable()
 @DomName('SVGLinearGradientElement')
 @Unstable()
-@Native("SVGLinearGradientElement")
-class LinearGradientElement extends _GradientElement {
+class LinearGradientElement extends _GradientElement native "SVGLinearGradientElement" {
   // To suppress missing implicit constructor warnings.
   factory LinearGradientElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3518,8 +3458,7 @@
 @DocsEditable()
 @DomName('SVGMarkerElement')
 @Unstable()
-@Native("SVGMarkerElement")
-class MarkerElement extends SvgElement implements FitToViewBox {
+class MarkerElement extends SvgElement implements FitToViewBox native "SVGMarkerElement" {
   // To suppress missing implicit constructor warnings.
   factory MarkerElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3611,8 +3550,7 @@
 @DocsEditable()
 @DomName('SVGMaskElement')
 @Unstable()
-@Native("SVGMaskElement")
-class MaskElement extends SvgElement implements Tests {
+class MaskElement extends SvgElement implements Tests native "SVGMaskElement" {
   // To suppress missing implicit constructor warnings.
   factory MaskElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3676,8 +3614,7 @@
 @DocsEditable()
 @DomName('SVGMatrix')
 @Unstable()
-@Native("SVGMatrix")
-class Matrix extends Interceptor {
+class Matrix extends Interceptor native "SVGMatrix" {
   // To suppress missing implicit constructor warnings.
   factory Matrix._() { throw new UnsupportedError("Not supported"); }
 
@@ -3757,8 +3694,7 @@
 @DocsEditable()
 @DomName('SVGMetadataElement')
 @Unstable()
-@Native("SVGMetadataElement")
-class MetadataElement extends SvgElement {
+class MetadataElement extends SvgElement native "SVGMetadataElement" {
   // To suppress missing implicit constructor warnings.
   factory MetadataElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -3776,8 +3712,7 @@
 @DocsEditable()
 @DomName('SVGNumber')
 @Unstable()
-@Native("SVGNumber")
-class Number extends Interceptor {
+class Number extends Interceptor native "SVGNumber" {
   // To suppress missing implicit constructor warnings.
   factory Number._() { throw new UnsupportedError("Not supported"); }
 
@@ -3793,8 +3728,7 @@
 @DocsEditable()
 @DomName('SVGNumberList')
 @Unstable()
-@Native("SVGNumberList")
-class NumberList extends Interceptor with ListMixin<Number>, ImmutableListMixin<Number> implements List<Number> {
+class NumberList extends Interceptor with ListMixin<Number>, ImmutableListMixin<Number> implements List<Number> native "SVGNumberList" {
   // To suppress missing implicit constructor warnings.
   factory NumberList._() { throw new UnsupportedError("Not supported"); }
 
@@ -3884,8 +3818,7 @@
 @DocsEditable()
 @DomName('SVGPathElement')
 @Unstable()
-@Native("SVGPathElement")
-class PathElement extends GeometryElement {
+class PathElement extends GeometryElement native "SVGPathElement" {
   // To suppress missing implicit constructor warnings.
   factory PathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4034,8 +3967,7 @@
 @DocsEditable()
 @DomName('SVGPathSeg')
 @Unstable()
-@Native("SVGPathSeg")
-class PathSeg extends Interceptor {
+class PathSeg extends Interceptor native "SVGPathSeg" {
   // To suppress missing implicit constructor warnings.
   factory PathSeg._() { throw new UnsupportedError("Not supported"); }
 
@@ -4135,8 +4067,7 @@
 @DocsEditable()
 @DomName('SVGPathSegArcAbs')
 @Unstable()
-@Native("SVGPathSegArcAbs")
-class PathSegArcAbs extends PathSeg {
+class PathSegArcAbs extends PathSeg native "SVGPathSegArcAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegArcAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4176,8 +4107,7 @@
 @DocsEditable()
 @DomName('SVGPathSegArcRel')
 @Unstable()
-@Native("SVGPathSegArcRel")
-class PathSegArcRel extends PathSeg {
+class PathSegArcRel extends PathSeg native "SVGPathSegArcRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegArcRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4217,8 +4147,7 @@
 @DocsEditable()
 @DomName('SVGPathSegClosePath')
 @Unstable()
-@Native("SVGPathSegClosePath")
-class PathSegClosePath extends PathSeg {
+class PathSegClosePath extends PathSeg native "SVGPathSegClosePath" {
   // To suppress missing implicit constructor warnings.
   factory PathSegClosePath._() { throw new UnsupportedError("Not supported"); }
 }
@@ -4230,8 +4159,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoCubicAbs')
 @Unstable()
-@Native("SVGPathSegCurvetoCubicAbs")
-class PathSegCurvetoCubicAbs extends PathSeg {
+class PathSegCurvetoCubicAbs extends PathSeg native "SVGPathSegCurvetoCubicAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoCubicAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4267,8 +4195,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoCubicRel')
 @Unstable()
-@Native("SVGPathSegCurvetoCubicRel")
-class PathSegCurvetoCubicRel extends PathSeg {
+class PathSegCurvetoCubicRel extends PathSeg native "SVGPathSegCurvetoCubicRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoCubicRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4304,8 +4231,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoCubicSmoothAbs')
 @Unstable()
-@Native("SVGPathSegCurvetoCubicSmoothAbs")
-class PathSegCurvetoCubicSmoothAbs extends PathSeg {
+class PathSegCurvetoCubicSmoothAbs extends PathSeg native "SVGPathSegCurvetoCubicSmoothAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoCubicSmoothAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4333,8 +4259,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoCubicSmoothRel')
 @Unstable()
-@Native("SVGPathSegCurvetoCubicSmoothRel")
-class PathSegCurvetoCubicSmoothRel extends PathSeg {
+class PathSegCurvetoCubicSmoothRel extends PathSeg native "SVGPathSegCurvetoCubicSmoothRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoCubicSmoothRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4362,8 +4287,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoQuadraticAbs')
 @Unstable()
-@Native("SVGPathSegCurvetoQuadraticAbs")
-class PathSegCurvetoQuadraticAbs extends PathSeg {
+class PathSegCurvetoQuadraticAbs extends PathSeg native "SVGPathSegCurvetoQuadraticAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoQuadraticAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4391,8 +4315,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoQuadraticRel')
 @Unstable()
-@Native("SVGPathSegCurvetoQuadraticRel")
-class PathSegCurvetoQuadraticRel extends PathSeg {
+class PathSegCurvetoQuadraticRel extends PathSeg native "SVGPathSegCurvetoQuadraticRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoQuadraticRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4420,8 +4343,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoQuadraticSmoothAbs')
 @Unstable()
-@Native("SVGPathSegCurvetoQuadraticSmoothAbs")
-class PathSegCurvetoQuadraticSmoothAbs extends PathSeg {
+class PathSegCurvetoQuadraticSmoothAbs extends PathSeg native "SVGPathSegCurvetoQuadraticSmoothAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoQuadraticSmoothAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4441,8 +4363,7 @@
 @DocsEditable()
 @DomName('SVGPathSegCurvetoQuadraticSmoothRel')
 @Unstable()
-@Native("SVGPathSegCurvetoQuadraticSmoothRel")
-class PathSegCurvetoQuadraticSmoothRel extends PathSeg {
+class PathSegCurvetoQuadraticSmoothRel extends PathSeg native "SVGPathSegCurvetoQuadraticSmoothRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegCurvetoQuadraticSmoothRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4462,8 +4383,7 @@
 @DocsEditable()
 @DomName('SVGPathSegLinetoAbs')
 @Unstable()
-@Native("SVGPathSegLinetoAbs")
-class PathSegLinetoAbs extends PathSeg {
+class PathSegLinetoAbs extends PathSeg native "SVGPathSegLinetoAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegLinetoAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4483,8 +4403,7 @@
 @DocsEditable()
 @DomName('SVGPathSegLinetoHorizontalAbs')
 @Unstable()
-@Native("SVGPathSegLinetoHorizontalAbs")
-class PathSegLinetoHorizontalAbs extends PathSeg {
+class PathSegLinetoHorizontalAbs extends PathSeg native "SVGPathSegLinetoHorizontalAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegLinetoHorizontalAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4500,8 +4419,7 @@
 @DocsEditable()
 @DomName('SVGPathSegLinetoHorizontalRel')
 @Unstable()
-@Native("SVGPathSegLinetoHorizontalRel")
-class PathSegLinetoHorizontalRel extends PathSeg {
+class PathSegLinetoHorizontalRel extends PathSeg native "SVGPathSegLinetoHorizontalRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegLinetoHorizontalRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4517,8 +4435,7 @@
 @DocsEditable()
 @DomName('SVGPathSegLinetoRel')
 @Unstable()
-@Native("SVGPathSegLinetoRel")
-class PathSegLinetoRel extends PathSeg {
+class PathSegLinetoRel extends PathSeg native "SVGPathSegLinetoRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegLinetoRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4538,8 +4455,7 @@
 @DocsEditable()
 @DomName('SVGPathSegLinetoVerticalAbs')
 @Unstable()
-@Native("SVGPathSegLinetoVerticalAbs")
-class PathSegLinetoVerticalAbs extends PathSeg {
+class PathSegLinetoVerticalAbs extends PathSeg native "SVGPathSegLinetoVerticalAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegLinetoVerticalAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4555,8 +4471,7 @@
 @DocsEditable()
 @DomName('SVGPathSegLinetoVerticalRel')
 @Unstable()
-@Native("SVGPathSegLinetoVerticalRel")
-class PathSegLinetoVerticalRel extends PathSeg {
+class PathSegLinetoVerticalRel extends PathSeg native "SVGPathSegLinetoVerticalRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegLinetoVerticalRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4572,8 +4487,7 @@
 @DocsEditable()
 @DomName('SVGPathSegList')
 @Unstable()
-@Native("SVGPathSegList")
-class PathSegList extends Interceptor with ListMixin<PathSeg>, ImmutableListMixin<PathSeg> implements List<PathSeg> {
+class PathSegList extends Interceptor with ListMixin<PathSeg>, ImmutableListMixin<PathSeg> implements List<PathSeg> native "SVGPathSegList" {
   // To suppress missing implicit constructor warnings.
   factory PathSegList._() { throw new UnsupportedError("Not supported"); }
 
@@ -4663,8 +4577,7 @@
 @DocsEditable()
 @DomName('SVGPathSegMovetoAbs')
 @Unstable()
-@Native("SVGPathSegMovetoAbs")
-class PathSegMovetoAbs extends PathSeg {
+class PathSegMovetoAbs extends PathSeg native "SVGPathSegMovetoAbs" {
   // To suppress missing implicit constructor warnings.
   factory PathSegMovetoAbs._() { throw new UnsupportedError("Not supported"); }
 
@@ -4684,8 +4597,7 @@
 @DocsEditable()
 @DomName('SVGPathSegMovetoRel')
 @Unstable()
-@Native("SVGPathSegMovetoRel")
-class PathSegMovetoRel extends PathSeg {
+class PathSegMovetoRel extends PathSeg native "SVGPathSegMovetoRel" {
   // To suppress missing implicit constructor warnings.
   factory PathSegMovetoRel._() { throw new UnsupportedError("Not supported"); }
 
@@ -4705,8 +4617,7 @@
 @DocsEditable()
 @DomName('SVGPatternElement')
 @Unstable()
-@Native("SVGPatternElement")
-class PatternElement extends SvgElement implements FitToViewBox, UriReference, Tests {
+class PatternElement extends SvgElement implements FitToViewBox, UriReference, Tests native "SVGPatternElement" {
   // To suppress missing implicit constructor warnings.
   factory PatternElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4790,8 +4701,7 @@
 @DocsEditable()
 @DomName('SVGPoint')
 @Unstable()
-@Native("SVGPoint")
-class Point extends Interceptor {
+class Point extends Interceptor native "SVGPoint" {
   // To suppress missing implicit constructor warnings.
   factory Point._() { throw new UnsupportedError("Not supported"); }
 
@@ -4815,8 +4725,7 @@
 @DocsEditable()
 @DomName('SVGPointList')
 @Unstable()
-@Native("SVGPointList")
-class PointList extends Interceptor {
+class PointList extends Interceptor native "SVGPointList" {
   // To suppress missing implicit constructor warnings.
   factory PointList._() { throw new UnsupportedError("Not supported"); }
 
@@ -4860,8 +4769,7 @@
 @DocsEditable()
 @DomName('SVGPolygonElement')
 @Unstable()
-@Native("SVGPolygonElement")
-class PolygonElement extends GeometryElement {
+class PolygonElement extends GeometryElement native "SVGPolygonElement" {
   // To suppress missing implicit constructor warnings.
   factory PolygonElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4891,8 +4799,7 @@
 @DocsEditable()
 @DomName('SVGPolylineElement')
 @Unstable()
-@Native("SVGPolylineElement")
-class PolylineElement extends GeometryElement {
+class PolylineElement extends GeometryElement native "SVGPolylineElement" {
   // To suppress missing implicit constructor warnings.
   factory PolylineElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4922,8 +4829,7 @@
 @DocsEditable()
 @DomName('SVGPreserveAspectRatio')
 @Unstable()
-@Native("SVGPreserveAspectRatio")
-class PreserveAspectRatio extends Interceptor {
+class PreserveAspectRatio extends Interceptor native "SVGPreserveAspectRatio" {
   // To suppress missing implicit constructor warnings.
   factory PreserveAspectRatio._() { throw new UnsupportedError("Not supported"); }
 
@@ -4999,8 +4905,7 @@
 @DocsEditable()
 @DomName('SVGRadialGradientElement')
 @Unstable()
-@Native("SVGRadialGradientElement")
-class RadialGradientElement extends _GradientElement {
+class RadialGradientElement extends _GradientElement native "SVGRadialGradientElement" {
   // To suppress missing implicit constructor warnings.
   factory RadialGradientElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5046,8 +4951,7 @@
 @DocsEditable()
 @DomName('SVGRect')
 @Unstable()
-@Native("SVGRect")
-class Rect extends Interceptor {
+class Rect extends Interceptor native "SVGRect" {
   // To suppress missing implicit constructor warnings.
   factory Rect._() { throw new UnsupportedError("Not supported"); }
 
@@ -5075,8 +4979,7 @@
 @DocsEditable()
 @DomName('SVGRectElement')
 @Unstable()
-@Native("SVGRectElement")
-class RectElement extends GeometryElement {
+class RectElement extends GeometryElement native "SVGRectElement" {
   // To suppress missing implicit constructor warnings.
   factory RectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5122,8 +5025,7 @@
 @DocsEditable()
 @DomName('SVGRenderingIntent')
 @Unstable()
-@Native("SVGRenderingIntent")
-class RenderingIntent extends Interceptor {
+class RenderingIntent extends Interceptor native "SVGRenderingIntent" {
   // To suppress missing implicit constructor warnings.
   factory RenderingIntent._() { throw new UnsupportedError("Not supported"); }
 
@@ -5159,8 +5061,7 @@
 @DocsEditable()
 @DomName('SVGScriptElement')
 @Unstable()
-@Native("SVGScriptElement")
-class ScriptElement extends SvgElement implements UriReference {
+class ScriptElement extends SvgElement implements UriReference native "SVGScriptElement" {
   // To suppress missing implicit constructor warnings.
   factory ScriptElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5195,8 +5096,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-@Native("SVGSetElement")
-class SetElement extends AnimationElement {
+class SetElement extends AnimationElement native "SVGSetElement" {
   // To suppress missing implicit constructor warnings.
   factory SetElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5221,8 +5121,7 @@
 @DocsEditable()
 @DomName('SVGStopElement')
 @Unstable()
-@Native("SVGStopElement")
-class StopElement extends SvgElement {
+class StopElement extends SvgElement native "SVGStopElement" {
   // To suppress missing implicit constructor warnings.
   factory StopElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5249,8 +5148,7 @@
 @DocsEditable()
 @DomName('SVGStringList')
 @Unstable()
-@Native("SVGStringList")
-class StringList extends Interceptor with ListMixin<String>, ImmutableListMixin<String> implements List<String> {
+class StringList extends Interceptor with ListMixin<String>, ImmutableListMixin<String> implements List<String> native "SVGStringList" {
   // To suppress missing implicit constructor warnings.
   factory StringList._() { throw new UnsupportedError("Not supported"); }
 
@@ -5341,8 +5239,7 @@
 @DomName('SVGStyleElement')
 // http://www.w3.org/TR/SVG/types.html#InterfaceSVGStylable
 @Experimental() // nonstandard
-@Native("SVGStyleElement")
-class StyleElement extends SvgElement {
+class StyleElement extends SvgElement native "SVGStyleElement" {
   // To suppress missing implicit constructor warnings.
   factory StyleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5408,8 +5305,7 @@
 
 @DomName('SVGElement')
 @Unstable()
-@Native("SVGElement")
-class SvgElement extends Element implements GlobalEventHandlers {
+class SvgElement extends Element implements GlobalEventHandlers native "SVGElement" {
   static final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 
   factory SvgElement.tag(String tag) =>
@@ -6093,8 +5989,7 @@
 
 @DomName('SVGSVGElement')
 @Unstable()
-@Native("SVGSVGElement")
-class SvgSvgElement extends GraphicsElement implements FitToViewBox, ZoomAndPan {
+class SvgSvgElement extends GraphicsElement implements FitToViewBox, ZoomAndPan native "SVGSVGElement" {
   factory SvgSvgElement() {
     final el = new SvgElement.tag("svg");
     // The SVG spec requires the version attribute to match the spec version
@@ -6292,8 +6187,7 @@
 @DocsEditable()
 @DomName('SVGSwitchElement')
 @Unstable()
-@Native("SVGSwitchElement")
-class SwitchElement extends GraphicsElement {
+class SwitchElement extends GraphicsElement native "SVGSwitchElement" {
   // To suppress missing implicit constructor warnings.
   factory SwitchElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6315,8 +6209,7 @@
 @DocsEditable()
 @DomName('SVGSymbolElement')
 @Unstable()
-@Native("SVGSymbolElement")
-class SymbolElement extends SvgElement implements FitToViewBox {
+class SymbolElement extends SvgElement implements FitToViewBox native "SVGSymbolElement" {
   // To suppress missing implicit constructor warnings.
   factory SymbolElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6348,8 +6241,7 @@
 @DocsEditable()
 @DomName('SVGTSpanElement')
 @Unstable()
-@Native("SVGTSpanElement")
-class TSpanElement extends TextPositioningElement {
+class TSpanElement extends TextPositioningElement native "SVGTSpanElement" {
   // To suppress missing implicit constructor warnings.
   factory TSpanElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6391,8 +6283,7 @@
 @DocsEditable()
 @DomName('SVGTextContentElement')
 @Unstable()
-@Native("SVGTextContentElement")
-class TextContentElement extends GraphicsElement {
+class TextContentElement extends GraphicsElement native "SVGTextContentElement" {
   // To suppress missing implicit constructor warnings.
   factory TextContentElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -6466,8 +6357,7 @@
 @DocsEditable()
 @DomName('SVGTextElement')
 @Unstable()
-@Native("SVGTextElement")
-class TextElement extends TextPositioningElement {
+class TextElement extends TextPositioningElement native "SVGTextElement" {
   // To suppress missing implicit constructor warnings.
   factory TextElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6489,8 +6379,7 @@
 @DocsEditable()
 @DomName('SVGTextPathElement')
 @Unstable()
-@Native("SVGTextPathElement")
-class TextPathElement extends TextContentElement implements UriReference {
+class TextPathElement extends TextContentElement implements UriReference native "SVGTextPathElement" {
   // To suppress missing implicit constructor warnings.
   factory TextPathElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -6550,8 +6439,7 @@
 @DocsEditable()
 @DomName('SVGTextPositioningElement')
 @Unstable()
-@Native("SVGTextPositioningElement")
-class TextPositioningElement extends TextContentElement {
+class TextPositioningElement extends TextContentElement native "SVGTextPositioningElement" {
   // To suppress missing implicit constructor warnings.
   factory TextPositioningElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -6589,8 +6477,7 @@
 @DocsEditable()
 @DomName('SVGTitleElement')
 @Unstable()
-@Native("SVGTitleElement")
-class TitleElement extends SvgElement {
+class TitleElement extends SvgElement native "SVGTitleElement" {
   // To suppress missing implicit constructor warnings.
   factory TitleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6612,8 +6499,7 @@
 @DocsEditable()
 @DomName('SVGTransform')
 @Unstable()
-@Native("SVGTransform")
-class Transform extends Interceptor {
+class Transform extends Interceptor native "SVGTransform" {
   // To suppress missing implicit constructor warnings.
   factory Transform._() { throw new UnsupportedError("Not supported"); }
 
@@ -6689,8 +6575,7 @@
 @DocsEditable()
 @DomName('SVGTransformList')
 @Unstable()
-@Native("SVGTransformList")
-class TransformList extends Interceptor with ListMixin<Transform>, ImmutableListMixin<Transform> implements List<Transform> {
+class TransformList extends Interceptor with ListMixin<Transform>, ImmutableListMixin<Transform> implements List<Transform> native "SVGTransformList" {
   // To suppress missing implicit constructor warnings.
   factory TransformList._() { throw new UnsupportedError("Not supported"); }
 
@@ -6789,8 +6674,7 @@
 @DocsEditable()
 @DomName('SVGUnitTypes')
 @Unstable()
-@Native("SVGUnitTypes")
-class UnitTypes extends Interceptor {
+class UnitTypes extends Interceptor native "SVGUnitTypes" {
   // To suppress missing implicit constructor warnings.
   factory UnitTypes._() { throw new UnsupportedError("Not supported"); }
 
@@ -6828,8 +6712,7 @@
 @DocsEditable()
 @DomName('SVGUseElement')
 @Unstable()
-@Native("SVGUseElement")
-class UseElement extends GraphicsElement implements UriReference, Tests {
+class UseElement extends GraphicsElement implements UriReference, Tests native "SVGUseElement" {
   // To suppress missing implicit constructor warnings.
   factory UseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6899,8 +6782,7 @@
 @DocsEditable()
 @DomName('SVGViewElement')
 @Unstable()
-@Native("SVGViewElement")
-class ViewElement extends SvgElement implements FitToViewBox, ZoomAndPan {
+class ViewElement extends SvgElement implements FitToViewBox, ZoomAndPan native "SVGViewElement" {
   // To suppress missing implicit constructor warnings.
   factory ViewElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6942,8 +6824,7 @@
 @DocsEditable()
 @DomName('SVGViewSpec')
 @Unstable()
-@Native("SVGViewSpec")
-class ViewSpec extends Interceptor implements FitToViewBox, ZoomAndPan {
+class ViewSpec extends Interceptor implements FitToViewBox, ZoomAndPan native "SVGViewSpec" {
   // To suppress missing implicit constructor warnings.
   factory ViewSpec._() { throw new UnsupportedError("Not supported"); }
 
@@ -7024,8 +6905,7 @@
 @DocsEditable()
 @DomName('SVGZoomEvent')
 @Unstable()
-@Native("SVGZoomEvent")
-class ZoomEvent extends UIEvent {
+class ZoomEvent extends UIEvent native "SVGZoomEvent" {
   // To suppress missing implicit constructor warnings.
   factory ZoomEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -7057,8 +6937,7 @@
 @DocsEditable()
 @DomName('SVGElementInstanceList')
 @Unstable()
-@Native("SVGElementInstanceList")
-class _ElementInstanceList extends Interceptor with ListMixin<ElementInstance>, ImmutableListMixin<ElementInstance> implements List<ElementInstance> {
+class _ElementInstanceList extends Interceptor with ListMixin<ElementInstance>, ImmutableListMixin<ElementInstance> implements List<ElementInstance> native "SVGElementInstanceList" {
   // To suppress missing implicit constructor warnings.
   factory _ElementInstanceList._() { throw new UnsupportedError("Not supported"); }
 
@@ -7122,8 +7001,7 @@
 @DocsEditable()
 @DomName('SVGGradientElement')
 @Unstable()
-@Native("SVGGradientElement")
-class _GradientElement extends SvgElement implements UriReference {
+class _GradientElement extends SvgElement implements UriReference native "SVGGradientElement" {
   // To suppress missing implicit constructor warnings.
   factory _GradientElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7175,8 +7053,7 @@
 @DocsEditable()
 @DomName('SVGAltGlyphDefElement')
 @Unstable()
-@Native("SVGAltGlyphDefElement")
-abstract class _SVGAltGlyphDefElement extends SvgElement {
+abstract class _SVGAltGlyphDefElement extends SvgElement native "SVGAltGlyphDefElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGAltGlyphDefElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7194,8 +7071,7 @@
 @DocsEditable()
 @DomName('SVGAltGlyphItemElement')
 @Unstable()
-@Native("SVGAltGlyphItemElement")
-abstract class _SVGAltGlyphItemElement extends SvgElement {
+abstract class _SVGAltGlyphItemElement extends SvgElement native "SVGAltGlyphItemElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGAltGlyphItemElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7213,8 +7089,7 @@
 @DocsEditable()
 @DomName('SVGComponentTransferFunctionElement')
 @Unstable()
-@Native("SVGComponentTransferFunctionElement")
-abstract class _SVGComponentTransferFunctionElement extends SvgElement {
+abstract class _SVGComponentTransferFunctionElement extends SvgElement native "SVGComponentTransferFunctionElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGComponentTransferFunctionElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7232,8 +7107,7 @@
 @DocsEditable()
 @DomName('SVGCursorElement')
 @Unstable()
-@Native("SVGCursorElement")
-abstract class _SVGCursorElement extends SvgElement implements UriReference, Tests {
+abstract class _SVGCursorElement extends SvgElement implements UriReference, Tests native "SVGCursorElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGCursorElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7262,8 +7136,7 @@
 @DocsEditable()
 @DomName('SVGFEDropShadowElement')
 @Experimental() // nonstandard
-@Native("SVGFEDropShadowElement")
-abstract class _SVGFEDropShadowElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+abstract class _SVGFEDropShadowElement extends SvgElement implements FilterPrimitiveStandardAttributes native "SVGFEDropShadowElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFEDropShadowElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7283,8 +7156,7 @@
 @DocsEditable()
 @DomName('SVGFontElement')
 @Unstable()
-@Native("SVGFontElement")
-abstract class _SVGFontElement extends SvgElement {
+abstract class _SVGFontElement extends SvgElement native "SVGFontElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFontElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7302,8 +7174,7 @@
 @DocsEditable()
 @DomName('SVGFontFaceElement')
 @Unstable()
-@Native("SVGFontFaceElement")
-abstract class _SVGFontFaceElement extends SvgElement {
+abstract class _SVGFontFaceElement extends SvgElement native "SVGFontFaceElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFontFaceElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7321,8 +7192,7 @@
 @DocsEditable()
 @DomName('SVGFontFaceFormatElement')
 @Unstable()
-@Native("SVGFontFaceFormatElement")
-abstract class _SVGFontFaceFormatElement extends SvgElement {
+abstract class _SVGFontFaceFormatElement extends SvgElement native "SVGFontFaceFormatElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFontFaceFormatElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7340,8 +7210,7 @@
 @DocsEditable()
 @DomName('SVGFontFaceNameElement')
 @Unstable()
-@Native("SVGFontFaceNameElement")
-abstract class _SVGFontFaceNameElement extends SvgElement {
+abstract class _SVGFontFaceNameElement extends SvgElement native "SVGFontFaceNameElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFontFaceNameElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7359,8 +7228,7 @@
 @DocsEditable()
 @DomName('SVGFontFaceSrcElement')
 @Unstable()
-@Native("SVGFontFaceSrcElement")
-abstract class _SVGFontFaceSrcElement extends SvgElement {
+abstract class _SVGFontFaceSrcElement extends SvgElement native "SVGFontFaceSrcElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFontFaceSrcElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7378,8 +7246,7 @@
 @DocsEditable()
 @DomName('SVGFontFaceUriElement')
 @Unstable()
-@Native("SVGFontFaceUriElement")
-abstract class _SVGFontFaceUriElement extends SvgElement {
+abstract class _SVGFontFaceUriElement extends SvgElement native "SVGFontFaceUriElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGFontFaceUriElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7397,8 +7264,7 @@
 @DocsEditable()
 @DomName('SVGGlyphElement')
 @Unstable()
-@Native("SVGGlyphElement")
-abstract class _SVGGlyphElement extends SvgElement {
+abstract class _SVGGlyphElement extends SvgElement native "SVGGlyphElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGGlyphElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7420,8 +7286,7 @@
 @DocsEditable()
 @DomName('SVGGlyphRefElement')
 @Unstable()
-@Native("SVGGlyphRefElement")
-abstract class _SVGGlyphRefElement extends SvgElement implements UriReference {
+abstract class _SVGGlyphRefElement extends SvgElement implements UriReference native "SVGGlyphRefElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGGlyphRefElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7441,8 +7306,7 @@
 @DocsEditable()
 @DomName('SVGHKernElement')
 @Unstable()
-@Native("SVGHKernElement")
-abstract class _SVGHKernElement extends SvgElement {
+abstract class _SVGHKernElement extends SvgElement native "SVGHKernElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGHKernElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7463,8 +7327,7 @@
 
 @DocsEditable()
 @DomName('SVGMPathElement')
-@Native("SVGMPathElement")
-abstract class _SVGMPathElement extends SvgElement implements UriReference {
+abstract class _SVGMPathElement extends SvgElement implements UriReference native "SVGMPathElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGMPathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7488,8 +7351,7 @@
 @DocsEditable()
 @DomName('SVGMissingGlyphElement')
 @Unstable()
-@Native("SVGMissingGlyphElement")
-abstract class _SVGMissingGlyphElement extends SvgElement {
+abstract class _SVGMissingGlyphElement extends SvgElement native "SVGMissingGlyphElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGMissingGlyphElement._() { throw new UnsupportedError("Not supported"); }
   /**
@@ -7507,8 +7369,7 @@
 @DocsEditable()
 @DomName('SVGVKernElement')
 @Unstable()
-@Native("SVGVKernElement")
-abstract class _SVGVKernElement extends SvgElement {
+abstract class _SVGVKernElement extends SvgElement native "SVGVKernElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGVKernElement._() { throw new UnsupportedError("Not supported"); }
 
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index 3638497..5fdb510 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -10,7 +10,7 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, JSName, Native, Returns, convertDartClosureToJS;
+import 'dart:_js_helper' show Creates, JSName, Returns, convertDartClosureToJS;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 // DO NOT EDIT - unless you are editing documentation as per:
@@ -29,8 +29,7 @@
 @DomName('AnalyserNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AnalyserNode
 @Experimental()
-@Native("AnalyserNode,RealtimeAnalyserNode")
-class AnalyserNode extends AudioNode {
+class AnalyserNode extends AudioNode native "AnalyserNode,RealtimeAnalyserNode" {
   // To suppress missing implicit constructor warnings.
   factory AnalyserNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -75,8 +74,7 @@
 @DomName('AudioBuffer')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBuffer-section
 @Experimental()
-@Native("AudioBuffer")
-class AudioBuffer extends Interceptor {
+class AudioBuffer extends Interceptor native "AudioBuffer" {
   // To suppress missing implicit constructor warnings.
   factory AudioBuffer._() { throw new UnsupportedError("Not supported"); }
 
@@ -121,8 +119,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @Experimental()
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBufferSourceNode-section
-@Native("AudioBufferSourceNode")
-class AudioBufferSourceNode extends AudioSourceNode {
+class AudioBufferSourceNode extends AudioSourceNode native "AudioBufferSourceNode" {
 
   // TODO(efortuna): Remove these methods when Chrome stable also uses start
   // instead of noteOn.
@@ -232,8 +229,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @Experimental()
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioContext-section
-@Native("AudioContext,webkitAudioContext")
-class AudioContext extends EventTarget {
+class AudioContext extends EventTarget native "AudioContext,webkitAudioContext" {
   // To suppress missing implicit constructor warnings.
   factory AudioContext._() { throw new UnsupportedError("Not supported"); }
 
@@ -395,8 +391,7 @@
 @DomName('AudioDestinationNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioDestinationNode-section
 @Experimental()
-@Native("AudioDestinationNode")
-class AudioDestinationNode extends AudioNode {
+class AudioDestinationNode extends AudioNode native "AudioDestinationNode" {
   // To suppress missing implicit constructor warnings.
   factory AudioDestinationNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -413,8 +408,7 @@
 @DomName('AudioListener')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioListener-section
 @Experimental()
-@Native("AudioListener")
-class AudioListener extends Interceptor {
+class AudioListener extends Interceptor native "AudioListener" {
   // To suppress missing implicit constructor warnings.
   factory AudioListener._() { throw new UnsupportedError("Not supported"); }
 
@@ -446,8 +440,7 @@
 @DomName('AudioNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioNode-section
 @Experimental()
-@Native("AudioNode")
-class AudioNode extends EventTarget {
+class AudioNode extends EventTarget native "AudioNode" {
   // To suppress missing implicit constructor warnings.
   factory AudioNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -501,8 +494,7 @@
 @DomName('AudioParam')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioParam
 @Experimental()
-@Native("AudioParam")
-class AudioParam extends Interceptor {
+class AudioParam extends Interceptor native "AudioParam" {
   // To suppress missing implicit constructor warnings.
   factory AudioParam._() { throw new UnsupportedError("Not supported"); }
 
@@ -563,8 +555,7 @@
 @DomName('AudioProcessingEvent')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioProcessingEvent-section
 @Experimental()
-@Native("AudioProcessingEvent")
-class AudioProcessingEvent extends Event {
+class AudioProcessingEvent extends Event native "AudioProcessingEvent" {
   // To suppress missing implicit constructor warnings.
   factory AudioProcessingEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -585,8 +576,7 @@
 @DomName('AudioSourceNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
 @Experimental()
-@Native("AudioSourceNode")
-class AudioSourceNode extends AudioNode {
+class AudioSourceNode extends AudioNode native "AudioSourceNode" {
   // To suppress missing implicit constructor warnings.
   factory AudioSourceNode._() { throw new UnsupportedError("Not supported"); }
 }
@@ -599,8 +589,7 @@
 @DomName('BiquadFilterNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#BiquadFilterNode-section
 @Experimental()
-@Native("BiquadFilterNode")
-class BiquadFilterNode extends AudioNode {
+class BiquadFilterNode extends AudioNode native "BiquadFilterNode" {
   // To suppress missing implicit constructor warnings.
   factory BiquadFilterNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -669,8 +658,7 @@
 @DomName('ChannelMergerNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ChannelMergerNode-section
 @Experimental()
-@Native("ChannelMergerNode,AudioChannelMerger")
-class ChannelMergerNode extends AudioNode {
+class ChannelMergerNode extends AudioNode native "ChannelMergerNode,AudioChannelMerger" {
   // To suppress missing implicit constructor warnings.
   factory ChannelMergerNode._() { throw new UnsupportedError("Not supported"); }
 }
@@ -683,8 +671,7 @@
 @DomName('ChannelSplitterNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ChannelSplitterNode-section
 @Experimental()
-@Native("ChannelSplitterNode,AudioChannelSplitter")
-class ChannelSplitterNode extends AudioNode {
+class ChannelSplitterNode extends AudioNode native "ChannelSplitterNode,AudioChannelSplitter" {
   // To suppress missing implicit constructor warnings.
   factory ChannelSplitterNode._() { throw new UnsupportedError("Not supported"); }
 }
@@ -697,8 +684,7 @@
 @DomName('ConvolverNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ConvolverNode
 @Experimental()
-@Native("ConvolverNode")
-class ConvolverNode extends AudioNode {
+class ConvolverNode extends AudioNode native "ConvolverNode" {
   // To suppress missing implicit constructor warnings.
   factory ConvolverNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -719,8 +705,7 @@
 @DomName('DelayNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DelayNode
 @Experimental()
-@Native("DelayNode")
-class DelayNode extends AudioNode {
+class DelayNode extends AudioNode native "DelayNode" {
   // To suppress missing implicit constructor warnings.
   factory DelayNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -737,8 +722,7 @@
 @DomName('DynamicsCompressorNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DynamicsCompressorNode
 @Experimental()
-@Native("DynamicsCompressorNode")
-class DynamicsCompressorNode extends AudioNode {
+class DynamicsCompressorNode extends AudioNode native "DynamicsCompressorNode" {
   // To suppress missing implicit constructor warnings.
   factory DynamicsCompressorNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -775,8 +759,7 @@
 @DomName('GainNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#GainNode
 @Experimental()
-@Native("GainNode,AudioGainNode")
-class GainNode extends AudioNode {
+class GainNode extends AudioNode native "GainNode,AudioGainNode" {
   // To suppress missing implicit constructor warnings.
   factory GainNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -793,8 +776,7 @@
 @DomName('MediaElementAudioSourceNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaElementAudioSourceNode
 @Experimental()
-@Native("MediaElementAudioSourceNode")
-class MediaElementAudioSourceNode extends AudioSourceNode {
+class MediaElementAudioSourceNode extends AudioSourceNode native "MediaElementAudioSourceNode" {
   // To suppress missing implicit constructor warnings.
   factory MediaElementAudioSourceNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -812,8 +794,7 @@
 @DomName('MediaStreamAudioDestinationNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioDestinationNode
 @Experimental()
-@Native("MediaStreamAudioDestinationNode")
-class MediaStreamAudioDestinationNode extends AudioNode {
+class MediaStreamAudioDestinationNode extends AudioNode native "MediaStreamAudioDestinationNode" {
   // To suppress missing implicit constructor warnings.
   factory MediaStreamAudioDestinationNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -830,8 +811,7 @@
 @DomName('MediaStreamAudioSourceNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioSourceNode
 @Experimental()
-@Native("MediaStreamAudioSourceNode")
-class MediaStreamAudioSourceNode extends AudioSourceNode {
+class MediaStreamAudioSourceNode extends AudioSourceNode native "MediaStreamAudioSourceNode" {
   // To suppress missing implicit constructor warnings.
   factory MediaStreamAudioSourceNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -848,8 +828,7 @@
 @DomName('OfflineAudioCompletionEvent')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#OfflineAudioCompletionEvent-section
 @Experimental()
-@Native("OfflineAudioCompletionEvent")
-class OfflineAudioCompletionEvent extends Event {
+class OfflineAudioCompletionEvent extends Event native "OfflineAudioCompletionEvent" {
   // To suppress missing implicit constructor warnings.
   factory OfflineAudioCompletionEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -866,8 +845,7 @@
 @DomName('OfflineAudioContext')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#OfflineAudioContext-section
 @Experimental()
-@Native("OfflineAudioContext")
-class OfflineAudioContext extends AudioContext {
+class OfflineAudioContext extends AudioContext native "OfflineAudioContext" {
   // To suppress missing implicit constructor warnings.
   factory OfflineAudioContext._() { throw new UnsupportedError("Not supported"); }
 
@@ -887,8 +865,7 @@
 @DomName('OscillatorNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-OscillatorNode
 @Experimental()
-@Native("OscillatorNode,Oscillator")
-class OscillatorNode extends AudioSourceNode {
+class OscillatorNode extends AudioSourceNode native "OscillatorNode,Oscillator" {
   // To suppress missing implicit constructor warnings.
   factory OscillatorNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -967,8 +944,7 @@
 @DomName('PannerNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#PannerNode
 @Experimental()
-@Native("PannerNode,AudioPannerNode")
-class PannerNode extends AudioNode {
+class PannerNode extends AudioNode native "PannerNode,AudioPannerNode" {
   // To suppress missing implicit constructor warnings.
   factory PannerNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -1024,8 +1000,7 @@
 @DocsEditable()
 @DomName('PeriodicWave')
 @Experimental() // untriaged
-@Native("PeriodicWave")
-class PeriodicWave extends Interceptor {
+class PeriodicWave extends Interceptor native "PeriodicWave" {
   // To suppress missing implicit constructor warnings.
   factory PeriodicWave._() { throw new UnsupportedError("Not supported"); }
 }
@@ -1038,8 +1013,7 @@
 @DomName('ScriptProcessorNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ScriptProcessorNode
 @Experimental()
-@Native("ScriptProcessorNode,JavaScriptAudioNode")
-class ScriptProcessorNode extends AudioNode {
+class ScriptProcessorNode extends AudioNode native "ScriptProcessorNode,JavaScriptAudioNode" {
   // To suppress missing implicit constructor warnings.
   factory ScriptProcessorNode._() { throw new UnsupportedError("Not supported"); }
 
@@ -1080,8 +1054,7 @@
 @DomName('WaveShaperNode')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-WaveShaperNode
 @Experimental()
-@Native("WaveShaperNode")
-class WaveShaperNode extends AudioNode {
+class WaveShaperNode extends AudioNode native "WaveShaperNode" {
   // To suppress missing implicit constructor warnings.
   factory WaveShaperNode._() { throw new UnsupportedError("Not supported"); }
 
diff --git a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
index 111ef77..a94c162 100644
--- a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -9,7 +9,7 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, JSName, Native, Null, Returns, convertDartClosureToJS;
+import 'dart:_js_helper' show Creates, JSName, Null, Returns, convertDartClosureToJS;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor, JSExtendableArray;
 // DO NOT EDIT - unless you are editing documentation as per:
@@ -329,8 +329,7 @@
 @DocsEditable()
 @DomName('WebGLActiveInfo')
 @Unstable()
-@Native("WebGLActiveInfo")
-class ActiveInfo extends Interceptor {
+class ActiveInfo extends Interceptor native "WebGLActiveInfo" {
   // To suppress missing implicit constructor warnings.
   factory ActiveInfo._() { throw new UnsupportedError("Not supported"); }
 
@@ -354,8 +353,7 @@
 @DocsEditable()
 @DomName('ANGLEInstancedArrays')
 @Experimental() // untriaged
-@Native("ANGLEInstancedArrays")
-class AngleInstancedArrays extends Interceptor {
+class AngleInstancedArrays extends Interceptor native "ANGLEInstancedArrays" {
   // To suppress missing implicit constructor warnings.
   factory AngleInstancedArrays._() { throw new UnsupportedError("Not supported"); }
 
@@ -390,8 +388,7 @@
 @DocsEditable()
 @DomName('WebGLBuffer')
 @Unstable()
-@Native("WebGLBuffer")
-class Buffer extends Interceptor {
+class Buffer extends Interceptor native "WebGLBuffer" {
   // To suppress missing implicit constructor warnings.
   factory Buffer._() { throw new UnsupportedError("Not supported"); }
 }
@@ -404,8 +401,7 @@
 @DomName('WebGLCompressedTextureATC')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_atc/
 @Experimental()
-@Native("WebGLCompressedTextureATC")
-class CompressedTextureAtc extends Interceptor {
+class CompressedTextureAtc extends Interceptor native "WebGLCompressedTextureATC" {
   // To suppress missing implicit constructor warnings.
   factory CompressedTextureAtc._() { throw new UnsupportedError("Not supported"); }
 
@@ -430,8 +426,7 @@
 @DomName('WebGLCompressedTexturePVRTC')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/
 @Experimental() // experimental
-@Native("WebGLCompressedTexturePVRTC")
-class CompressedTexturePvrtc extends Interceptor {
+class CompressedTexturePvrtc extends Interceptor native "WebGLCompressedTexturePVRTC" {
   // To suppress missing implicit constructor warnings.
   factory CompressedTexturePvrtc._() { throw new UnsupportedError("Not supported"); }
 
@@ -460,8 +455,7 @@
 @DomName('WebGLCompressedTextureS3TC')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/
 @Experimental() // experimental
-@Native("WebGLCompressedTextureS3TC")
-class CompressedTextureS3TC extends Interceptor {
+class CompressedTextureS3TC extends Interceptor native "WebGLCompressedTextureS3TC" {
   // To suppress missing implicit constructor warnings.
   factory CompressedTextureS3TC._() { throw new UnsupportedError("Not supported"); }
 
@@ -511,8 +505,7 @@
  */
 @DomName('WebGLContextAttributes')
 @Unstable()
-@Native("WebGLContextAttributes")
-class ContextAttributes extends Interceptor {
+class ContextAttributes extends Interceptor native "WebGLContextAttributes" {
   // To suppress missing implicit constructor warnings.
   factory ContextAttributes._() { throw new UnsupportedError("Not supported"); }
 
@@ -553,8 +546,7 @@
 @DocsEditable()
 @DomName('WebGLContextEvent')
 @Unstable()
-@Native("WebGLContextEvent")
-class ContextEvent extends Event {
+class ContextEvent extends Event native "WebGLContextEvent" {
   // To suppress missing implicit constructor warnings.
   factory ContextEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -571,8 +563,7 @@
 @DomName('WebGLDebugRendererInfo')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
 @Experimental() // experimental
-@Native("WebGLDebugRendererInfo")
-class DebugRendererInfo extends Interceptor {
+class DebugRendererInfo extends Interceptor native "WebGLDebugRendererInfo" {
   // To suppress missing implicit constructor warnings.
   factory DebugRendererInfo._() { throw new UnsupportedError("Not supported"); }
 
@@ -593,8 +584,7 @@
 @DomName('WebGLDebugShaders')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/
 @Experimental() // experimental
-@Native("WebGLDebugShaders")
-class DebugShaders extends Interceptor {
+class DebugShaders extends Interceptor native "WebGLDebugShaders" {
   // To suppress missing implicit constructor warnings.
   factory DebugShaders._() { throw new UnsupportedError("Not supported"); }
 
@@ -611,8 +601,7 @@
 @DomName('WebGLDepthTexture')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/
 @Experimental() // experimental
-@Native("WebGLDepthTexture")
-class DepthTexture extends Interceptor {
+class DepthTexture extends Interceptor native "WebGLDepthTexture" {
   // To suppress missing implicit constructor warnings.
   factory DepthTexture._() { throw new UnsupportedError("Not supported"); }
 
@@ -629,8 +618,7 @@
 @DomName('WebGLDrawBuffers')
 // http://www.khronos.org/registry/webgl/specs/latest/
 @Experimental() // stable
-@Native("WebGLDrawBuffers")
-class DrawBuffers extends Interceptor {
+class DrawBuffers extends Interceptor native "WebGLDrawBuffers" {
   // To suppress missing implicit constructor warnings.
   factory DrawBuffers._() { throw new UnsupportedError("Not supported"); }
 
@@ -784,8 +772,7 @@
 @DomName('EXTFragDepth')
 // http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/
 @Experimental()
-@Native("EXTFragDepth")
-class ExtFragDepth extends Interceptor {
+class ExtFragDepth extends Interceptor native "EXTFragDepth" {
   // To suppress missing implicit constructor warnings.
   factory ExtFragDepth._() { throw new UnsupportedError("Not supported"); }
 }
@@ -798,8 +785,7 @@
 @DomName('EXTTextureFilterAnisotropic')
 // http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/
 @Experimental()
-@Native("EXTTextureFilterAnisotropic")
-class ExtTextureFilterAnisotropic extends Interceptor {
+class ExtTextureFilterAnisotropic extends Interceptor native "EXTTextureFilterAnisotropic" {
   // To suppress missing implicit constructor warnings.
   factory ExtTextureFilterAnisotropic._() { throw new UnsupportedError("Not supported"); }
 
@@ -819,8 +805,7 @@
 @DocsEditable()
 @DomName('WebGLFramebuffer')
 @Unstable()
-@Native("WebGLFramebuffer")
-class Framebuffer extends Interceptor {
+class Framebuffer extends Interceptor native "WebGLFramebuffer" {
   // To suppress missing implicit constructor warnings.
   factory Framebuffer._() { throw new UnsupportedError("Not supported"); }
 }
@@ -833,8 +818,7 @@
 @DomName('WebGLLoseContext')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/
 @Experimental()
-@Native("WebGLLoseContext,WebGLExtensionLoseContext")
-class LoseContext extends Interceptor {
+class LoseContext extends Interceptor native "WebGLLoseContext,WebGLExtensionLoseContext" {
   // To suppress missing implicit constructor warnings.
   factory LoseContext._() { throw new UnsupportedError("Not supported"); }
 
@@ -855,8 +839,7 @@
 @DomName('OESElementIndexUint')
 // http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/
 @Experimental() // experimental
-@Native("OESElementIndexUint")
-class OesElementIndexUint extends Interceptor {
+class OesElementIndexUint extends Interceptor native "OESElementIndexUint" {
   // To suppress missing implicit constructor warnings.
   factory OesElementIndexUint._() { throw new UnsupportedError("Not supported"); }
 }
@@ -869,8 +852,7 @@
 @DomName('OESStandardDerivatives')
 // http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/
 @Experimental() // experimental
-@Native("OESStandardDerivatives")
-class OesStandardDerivatives extends Interceptor {
+class OesStandardDerivatives extends Interceptor native "OESStandardDerivatives" {
   // To suppress missing implicit constructor warnings.
   factory OesStandardDerivatives._() { throw new UnsupportedError("Not supported"); }
 
@@ -887,8 +869,7 @@
 @DomName('OESTextureFloat')
 // http://www.khronos.org/registry/webgl/extensions/OES_texture_float/
 @Experimental() // experimental
-@Native("OESTextureFloat")
-class OesTextureFloat extends Interceptor {
+class OesTextureFloat extends Interceptor native "OESTextureFloat" {
   // To suppress missing implicit constructor warnings.
   factory OesTextureFloat._() { throw new UnsupportedError("Not supported"); }
 }
@@ -901,8 +882,7 @@
 @DomName('OESTextureFloatLinear')
 // http://www.khronos.org/registry/webgl/extensions/OES_texture_float_linear/
 @Experimental()
-@Native("OESTextureFloatLinear")
-class OesTextureFloatLinear extends Interceptor {
+class OesTextureFloatLinear extends Interceptor native "OESTextureFloatLinear" {
   // To suppress missing implicit constructor warnings.
   factory OesTextureFloatLinear._() { throw new UnsupportedError("Not supported"); }
 }
@@ -915,8 +895,7 @@
 @DomName('OESTextureHalfFloat')
 // http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/
 @Experimental() // experimental
-@Native("OESTextureHalfFloat")
-class OesTextureHalfFloat extends Interceptor {
+class OesTextureHalfFloat extends Interceptor native "OESTextureHalfFloat" {
   // To suppress missing implicit constructor warnings.
   factory OesTextureHalfFloat._() { throw new UnsupportedError("Not supported"); }
 
@@ -933,8 +912,7 @@
 @DomName('OESTextureHalfFloatLinear')
 // http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float_linear/
 @Experimental()
-@Native("OESTextureHalfFloatLinear")
-class OesTextureHalfFloatLinear extends Interceptor {
+class OesTextureHalfFloatLinear extends Interceptor native "OESTextureHalfFloatLinear" {
   // To suppress missing implicit constructor warnings.
   factory OesTextureHalfFloatLinear._() { throw new UnsupportedError("Not supported"); }
 }
@@ -947,8 +925,7 @@
 @DomName('OESVertexArrayObject')
 // http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/
 @Experimental() // experimental
-@Native("OESVertexArrayObject")
-class OesVertexArrayObject extends Interceptor {
+class OesVertexArrayObject extends Interceptor native "OESVertexArrayObject" {
   // To suppress missing implicit constructor warnings.
   factory OesVertexArrayObject._() { throw new UnsupportedError("Not supported"); }
 
@@ -984,8 +961,7 @@
 @DocsEditable()
 @DomName('WebGLProgram')
 @Unstable()
-@Native("WebGLProgram")
-class Program extends Interceptor {
+class Program extends Interceptor native "WebGLProgram" {
   // To suppress missing implicit constructor warnings.
   factory Program._() { throw new UnsupportedError("Not supported"); }
 }
@@ -997,8 +973,7 @@
 @DocsEditable()
 @DomName('WebGLRenderbuffer')
 @Unstable()
-@Native("WebGLRenderbuffer")
-class Renderbuffer extends Interceptor {
+class Renderbuffer extends Interceptor native "WebGLRenderbuffer" {
   // To suppress missing implicit constructor warnings.
   factory Renderbuffer._() { throw new UnsupportedError("Not supported"); }
 }
@@ -1012,8 +987,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @Experimental()
 @Unstable()
-@Native("WebGLRenderingContext")
-class RenderingContext extends CanvasRenderingContext {
+class RenderingContext extends CanvasRenderingContext native "WebGLRenderingContext" {
   // To suppress missing implicit constructor warnings.
   factory RenderingContext._() { throw new UnsupportedError("Not supported"); }
 
@@ -3206,8 +3180,7 @@
 
 @DocsEditable()
 @DomName('WebGLShader')
-@Native("WebGLShader")
-class Shader extends Interceptor {
+class Shader extends Interceptor native "WebGLShader" {
   // To suppress missing implicit constructor warnings.
   factory Shader._() { throw new UnsupportedError("Not supported"); }
 }
@@ -3218,8 +3191,7 @@
 
 @DocsEditable()
 @DomName('WebGLShaderPrecisionFormat')
-@Native("WebGLShaderPrecisionFormat")
-class ShaderPrecisionFormat extends Interceptor {
+class ShaderPrecisionFormat extends Interceptor native "WebGLShaderPrecisionFormat" {
   // To suppress missing implicit constructor warnings.
   factory ShaderPrecisionFormat._() { throw new UnsupportedError("Not supported"); }
 
@@ -3242,8 +3214,7 @@
 
 @DocsEditable()
 @DomName('WebGLTexture')
-@Native("WebGLTexture")
-class Texture extends Interceptor {
+class Texture extends Interceptor native "WebGLTexture" {
   // To suppress missing implicit constructor warnings.
   factory Texture._() { throw new UnsupportedError("Not supported"); }
 }
@@ -3254,8 +3225,7 @@
 
 @DocsEditable()
 @DomName('WebGLUniformLocation')
-@Native("WebGLUniformLocation")
-class UniformLocation extends Interceptor {
+class UniformLocation extends Interceptor native "WebGLUniformLocation" {
   // To suppress missing implicit constructor warnings.
   factory UniformLocation._() { throw new UnsupportedError("Not supported"); }
 }
@@ -3268,8 +3238,7 @@
 @DomName('WebGLVertexArrayObjectOES')
 // http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/
 @Experimental() // experimental
-@Native("WebGLVertexArrayObjectOES")
-class VertexArrayObject extends Interceptor {
+class VertexArrayObject extends Interceptor native "WebGLVertexArrayObjectOES" {
   // To suppress missing implicit constructor warnings.
   factory VertexArrayObject._() { throw new UnsupportedError("Not supported"); }
 }
diff --git a/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart b/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
index 163ad79..cdc5e17 100644
--- a/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
+++ b/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
@@ -15,7 +15,7 @@
 import 'dart:_internal' hide deprecated;
 import 'dart:html';
 import 'dart:html_common';
-import 'dart:_js_helper' show convertDartClosureToJS, Creates, JSName, Native;
+import 'dart:_js_helper' show convertDartClosureToJS, Creates, JSName;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 // DO NOT EDIT - unless you are editing documentation as per:
@@ -81,8 +81,7 @@
 @Experimental()
 // http://www.w3.org/TR/webdatabase/#asynchronous-database-api
 @Experimental() // deprecated
-@Native("Database")
-class SqlDatabase extends Interceptor {
+class SqlDatabase extends Interceptor native "Database" {
   // To suppress missing implicit constructor warnings.
   factory SqlDatabase._() { throw new UnsupportedError("Not supported"); }
 
@@ -126,8 +125,7 @@
 @DomName('SQLError')
 // http://www.w3.org/TR/webdatabase/#sqlerror
 @Experimental() // deprecated
-@Native("SQLError")
-class SqlError extends Interceptor {
+class SqlError extends Interceptor native "SQLError" {
   // To suppress missing implicit constructor warnings.
   factory SqlError._() { throw new UnsupportedError("Not supported"); }
 
@@ -180,8 +178,7 @@
 @DomName('SQLResultSet')
 // http://www.w3.org/TR/webdatabase/#sqlresultset
 @Experimental() // deprecated
-@Native("SQLResultSet")
-class SqlResultSet extends Interceptor {
+class SqlResultSet extends Interceptor native "SQLResultSet" {
   // To suppress missing implicit constructor warnings.
   factory SqlResultSet._() { throw new UnsupportedError("Not supported"); }
 
@@ -206,8 +203,7 @@
 @DomName('SQLResultSetRowList')
 // http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist
 @Experimental() // deprecated
-@Native("SQLResultSetRowList")
-class SqlResultSetRowList extends Interceptor with ListMixin<Map>, ImmutableListMixin<Map> implements List<Map> {
+class SqlResultSetRowList extends Interceptor with ListMixin<Map>, ImmutableListMixin<Map> implements List<Map> native "SQLResultSetRowList" {
   // To suppress missing implicit constructor warnings.
   factory SqlResultSetRowList._() { throw new UnsupportedError("Not supported"); }
 
@@ -283,8 +279,7 @@
 @Experimental()
 // http://www.w3.org/TR/webdatabase/#sqltransaction
 @deprecated // deprecated
-@Native("SQLTransaction")
-class SqlTransaction extends Interceptor {
+class SqlTransaction extends Interceptor native "SQLTransaction" {
   // To suppress missing implicit constructor warnings.
   factory SqlTransaction._() { throw new UnsupportedError("Not supported"); }
 
@@ -304,8 +299,7 @@
 @Experimental()
 // http://www.w3.org/TR/webdatabase/#sqltransactionsync
 @Experimental() // deprecated
-@Native("SQLTransactionSync")
-abstract class _SQLTransactionSync extends Interceptor {
+abstract class _SQLTransactionSync extends Interceptor native "SQLTransactionSync" {
   // To suppress missing implicit constructor warnings.
   factory _SQLTransactionSync._() { throw new UnsupportedError("Not supported"); }
 }
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 556c2d4..c5fb8a0 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -679,7 +679,7 @@
 
   def NativeSpec(self):
     native_spec = MakeNativeSpec(self._interface.javascript_binding_name)
-    return '@Native("%s")\n' % native_spec
+    return ' native "%s"' % native_spec
 
   def ImplementationTemplate(self):
     template_file = ('impl_%s.darttemplate' %
diff --git a/tools/dom/templates/dart2js_impl.darttemplate b/tools/dom/templates/dart2js_impl.darttemplate
index fb30e0b..938f2a9 100644
--- a/tools/dom/templates/dart2js_impl.darttemplate
+++ b/tools/dom/templates/dart2js_impl.darttemplate
@@ -5,5 +5,5 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index b1869f6..d5d4f86 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -51,7 +51,7 @@
 import 'dart:web_sql';
 import 'dart:_js_helper' show
     convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
-    JSName, Native, Null, Returns,
+    JSName, Null, Returns,
     findDispatchTagForInterceptorClass, setNativeSubclassDispatchRecord,
     makeLeafDispatchRecord;
 import 'dart:_interceptors' show
diff --git a/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate b/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
index 7773f8f..4ea4878 100644
--- a/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   // TODO(efortuna): Remove these methods when Chrome stable also uses start
   // instead of noteOn.
diff --git a/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate b/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
index c1c7292..2f1edac 100644
--- a/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
@@ -12,7 +12,7 @@
  *
  * * [KeyboardEvent](https://developer.mozilla.org/en/DOM/KeyboardEvent) at MDN.
  */
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /** 
    * Programmatically create a KeyboardEvent. 
diff --git a/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate b/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
index 80ecea1..28da4bb 100644
--- a/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {Window view, int detail: 0, int screenX: 0, int screenY: 0,
       int clientX: 0, int clientY: 0, int button: 0, bool canBubble: true,
diff --git a/tools/dom/templates/html/dart2js/impl_RTCIceCandidate.darttemplate b/tools/dom/templates/html/dart2js/impl_RTCIceCandidate.darttemplate
index 06b5456..b6a33d6 100644
--- a/tools/dom/templates/html/dart2js/impl_RTCIceCandidate.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_RTCIceCandidate.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(Map dictionary) {
     // TODO(efortuna): Remove this check if when you can actually construct with
     // the unprefixed RTCIceCandidate in Firefox (currently both are defined,
diff --git a/tools/dom/templates/html/dart2js/impl_RTCSessionDescription.darttemplate b/tools/dom/templates/html/dart2js/impl_RTCSessionDescription.darttemplate
index 9ca8ceb..9592eb5 100644
--- a/tools/dom/templates/html/dart2js/impl_RTCSessionDescription.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_RTCSessionDescription.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(Map dictionary) {
     // TODO(efortuna): Remove this check if when you can actually construct with
     // the unprefixed RTCIceCandidate in Firefox (currently both are defined,
diff --git a/tools/dom/templates/html/dart2js/impl_SpeechRecognition.darttemplate b/tools/dom/templates/html/dart2js/impl_SpeechRecognition.darttemplate
index 23e9af7..4ca8626 100644
--- a/tools/dom/templates/html/dart2js/impl_SpeechRecognition.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_SpeechRecognition.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
   factory SpeechRecognition() {
     return JS('SpeechRecognition',
diff --git a/tools/dom/templates/html/dart2js/impl_URL.darttemplate b/tools/dom/templates/html/dart2js/impl_URL.darttemplate
index d8c8a75..569da56 100644
--- a/tools/dom/templates/html/dart2js/impl_URL.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_URL.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   static String createObjectUrl(blob_OR_source_OR_stream) =>
       JS('String',
diff --git a/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate b/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
index 43a18e5..4b90d8b 100644
--- a/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
@@ -85,7 +85,7 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, Returns, JSName, Native, Null;
+import 'dart:_js_helper' show Creates, Returns, JSName, Null;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor, JSExtendableArray;
 
diff --git a/tools/dom/templates/html/dart2js/svg_dart2js.darttemplate b/tools/dom/templates/html/dart2js/svg_dart2js.darttemplate
index 7fc18ae..3e4e168 100644
--- a/tools/dom/templates/html/dart2js/svg_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/svg_dart2js.darttemplate
@@ -17,7 +17,7 @@
 import 'dart:_internal' hide deprecated;
 import 'dart:html';
 import 'dart:html_common';
-import 'dart:_js_helper' show Creates, Returns, JSName, Native;
+import 'dart:_js_helper' show Creates, Returns, JSName;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 
diff --git a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
index 5aef22c..3cc0897 100644
--- a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
@@ -14,7 +14,7 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, JSName, Native, Returns, convertDartClosureToJS;
+import 'dart:_js_helper' show Creates, JSName, Returns, convertDartClosureToJS;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 
diff --git a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
index 107c1f6..804f0bc 100644
--- a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
@@ -13,7 +13,7 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, JSName, Native, Null, Returns, convertDartClosureToJS;
+import 'dart:_js_helper' show Creates, JSName, Null, Returns, convertDartClosureToJS;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor, JSExtendableArray;
 
diff --git a/tools/dom/templates/html/dart2js/web_sql_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_sql_dart2js.darttemplate
index 4555e4d..c6c9bcf 100644
--- a/tools/dom/templates/html/dart2js/web_sql_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_sql_dart2js.darttemplate
@@ -19,7 +19,7 @@
 import 'dart:_internal' hide deprecated;
 import 'dart:html';
 import 'dart:html_common';
-import 'dart:_js_helper' show convertDartClosureToJS, Creates, JSName, Native;
+import 'dart:_js_helper' show convertDartClosureToJS, Creates, JSName;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 
diff --git a/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate b/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate
index a18fb29..6ab8501 100644
--- a/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate
+++ b/tools/dom/templates/html/dartium/impl_KeyboardEvent.darttemplate
@@ -4,7 +4,7 @@
 part of $LIBRARYNAME;
 
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   factory $CLASSNAME(String type,
       {Window view, bool canBubble: true, bool cancelable: true,
diff --git a/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate b/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate
index 02bc4fb..a1a3862 100644
--- a/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate
+++ b/tools/dom/templates/html/dartium/impl_MouseEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {Window view, int detail: 0, int screenX: 0, int screenY: 0,
       int clientX: 0, int clientY: 0, int button: 0, bool canBubble: true,
diff --git a/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate b/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate
index d019184..e23390d 100644
--- a/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate
@@ -5,5 +5,5 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)abstract class $CLASSNAME$EXTENDS$MIXINS implements EventTarget {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)abstract class $CLASSNAME$EXTENDS$MIXINS implements EventTarget$NATIVESPEC {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
index 603c643..1d0f91e 100644
--- a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
@@ -4,7 +4,7 @@
 
 part of web_audio;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 $if DART2JS
   factory AudioContext() => JS('AudioContext',
diff --git a/tools/dom/templates/html/impl/impl_AudioNode.darttemplate b/tools/dom/templates/html/impl/impl_AudioNode.darttemplate
index 43db4b3..e61a6f4 100644
--- a/tools/dom/templates/html/impl/impl_AudioNode.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioNode.darttemplate
@@ -4,7 +4,7 @@
 
 part of web_audio;
 
-$(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
   @DomName('AudioNode.connect')
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) =>
diff --git a/tools/dom/templates/html/impl/impl_Blob.darttemplate b/tools/dom/templates/html/impl/impl_Blob.darttemplate
index 3542811..c77cdb0 100644
--- a/tools/dom/templates/html/impl/impl_Blob.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Blob.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 $if DART2JS
   factory Blob(List blobParts, [String type, String endings]) {
@@ -27,3 +27,4 @@
   static _bag_set(bag, key, value) { JS('void', '#[#] = #', bag, key, value); }
 $endif
 }
+
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 046591b..c7d1075 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -4,8 +4,8 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS) class $CLASSNAME $EXTENDS with 
-    $(CLASSNAME)Base $IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS) class $CLASSNAME $EXTENDS with 
+    $(CLASSNAME)Base $IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => new CssStyleDeclaration.css('');
 
   factory $CLASSNAME.css(String css) {
diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index 1068fdc..a5964c0 100644
--- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   /**
@@ -355,3 +355,4 @@
   @deprecated
   double get backingStorePixelRatio => 1.0;
 }
+
diff --git a/tools/dom/templates/html/impl/impl_ClientRect.darttemplate b/tools/dom/templates/html/impl/impl_ClientRect.darttemplate
index 22f115e..0c31179 100644
--- a/tools/dom/templates/html/impl/impl_ClientRect.darttemplate
+++ b/tools/dom/templates/html/impl/impl_ClientRect.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements Rectangle$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements Rectangle$IMPLEMENTS$NATIVESPEC {
 
   // NOTE! All code below should be common with RectangleBase.
    String toString() {
diff --git a/tools/dom/templates/html/impl/impl_Comment.darttemplate b/tools/dom/templates/html/impl/impl_Comment.darttemplate
index dc6e574..df0d378 100644
--- a/tools/dom/templates/html/impl/impl_Comment.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Comment.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
 $if DART2JS
   factory Comment([String data]) {
     if (data != null) {
diff --git a/tools/dom/templates/html/impl/impl_CompositionEvent.darttemplate b/tools/dom/templates/html/impl/impl_CompositionEvent.darttemplate
index 5db4acd..a6f6e68 100644
--- a/tools/dom/templates/html/impl/impl_CompositionEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CompositionEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {bool canBubble: false, bool cancelable: false, Window view,
       String data}) {
diff --git a/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate b/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
index 29feca9..01197ca 100644
--- a/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   $if DART2JS
     @Creates('Null')  // Set from Dart code; does not instantiate a native type.
   $endif
diff --git a/tools/dom/templates/html/impl/impl_DOMException.darttemplate b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
index db97f86..ac6c8d4 100644
--- a/tools/dom/templates/html/impl/impl_DOMException.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   static const String INDEX_SIZE = 'IndexSizeError';
   static const String HIERARCHY_REQUEST = 'HierarchyRequestError';
diff --git a/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate b/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
index 54acce1..b43806f 100644
--- a/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   DataTransferItem operator[] (int index) {
diff --git a/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate b/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate
index 6f452c9..821c56f 100644
--- a/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate
@@ -5,7 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of $LIBRARYNAME;
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {bool canBubble: true, bool cancelable: true, num alpha: 0, num beta: 0,
       num gamma: 0, bool absolute: false}) {
diff --git a/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate b/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate
index a3649f7..9c18b2d 100644
--- a/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
    * Create a new directory with the specified `path`. If `exclusive` is true,
@@ -44,3 +44,4 @@
   }
 $!MEMBERS
 }
+
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index 6767115..d96f6c8 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME extends Node
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME extends Node $NATIVESPEC
 {
 
 $!MEMBERS
diff --git a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
index 42cc56f..86db4ea 100644
--- a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => document.createDocumentFragment();
 
   factory $CLASSNAME.html(String html,
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index f1cf507..a676fa0 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -316,7 +316,7 @@
 }
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)abstract class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)abstract class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
    * Creates an HTML element from a valid fragment of HTML.
diff --git a/tools/dom/templates/html/impl/impl_Event.darttemplate b/tools/dom/templates/html/impl/impl_Event.darttemplate
index e4c6e4e..2abce62 100644
--- a/tools/dom/templates/html/impl/impl_Event.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Event.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
   // default to false (since that's Boolean(undefined)).
diff --git a/tools/dom/templates/html/impl/impl_EventSource.darttemplate b/tools/dom/templates/html/impl/impl_EventSource.darttemplate
index ed29c88..996a883 100644
--- a/tools/dom/templates/html/impl/impl_EventSource.darttemplate
+++ b/tools/dom/templates/html/impl/impl_EventSource.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String title, {withCredentials: false}) {
     var parsedOptions = {
       'withCredentials': withCredentials,
diff --git a/tools/dom/templates/html/impl/impl_EventTarget.darttemplate b/tools/dom/templates/html/impl/impl_EventTarget.darttemplate
index d1a23cf..88ad1c1 100644
--- a/tools/dom/templates/html/impl/impl_EventTarget.darttemplate
+++ b/tools/dom/templates/html/impl/impl_EventTarget.darttemplate
@@ -90,7 +90,7 @@
  * Use the [on] property to add, and remove events
  * for compile-time type checks and a more concise API.
  */
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   // Custom element created callback.
   EventTarget._created();
diff --git a/tools/dom/templates/html/impl/impl_FileReader.darttemplate b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
index 0a6ddc9..182f1d8 100644
--- a/tools/dom/templates/html/impl/impl_FileReader.darttemplate
+++ b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('FileReader.result')
   @DocsEditable()
diff --git a/tools/dom/templates/html/impl/impl_Geolocation.darttemplate b/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
index 5518815..e15ffa0 100644
--- a/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('Geolocation.getCurrentPosition')
   Future<Geoposition> getCurrentPosition({bool enableHighAccuracy,
@@ -103,3 +103,5 @@
   int get timestamp => JS('int', '#.timestamp', _ptr);
 }
 $endif
+
+
diff --git a/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate b/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate
index d1b4f83..82862da 100644
--- a/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate
+++ b/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate
@@ -5,5 +5,5 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME extends EventTarget {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME extends EventTarget$NATIVESPEC {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
index 3d49d69..9e965e9 100644
--- a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasImageSource$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasImageSource$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
   /** An API for drawing on this canvas. */
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
index 70f50ce..1cfbdcb 100644
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_HTMLImageElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLImageElement.darttemplate
index 244ea4b..ecd9514 100644
--- a/tools/dom/templates/html/impl/impl_HTMLImageElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLImageElement.darttemplate
@@ -4,6 +4,6 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasImageSource$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasImageSource$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
index 4919649..fe9ae78 100644
--- a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements
     HiddenInputElement,
     SearchInputElement,
     TextInputElement,
@@ -25,7 +25,8 @@
     SubmitButtonInputElement,
     ImageButtonInputElement,
     ResetButtonInputElement,
-    ButtonInputElement {
+    ButtonInputElement
+    $NATIVESPEC {
 
   factory InputElement({String type}) {
     var e = document.createElement("input");
@@ -595,3 +596,4 @@
 abstract class ButtonInputElement implements InputElementBase {
   factory ButtonInputElement() => new InputElement(type: 'button');
 }
+
diff --git a/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate
index 437c70d..fb38c2c 100644
--- a/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
     /// Checks if HTML imports are supported on the current platform.
diff --git a/tools/dom/templates/html/impl/impl_HTMLOptionElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLOptionElement.darttemplate
index 99dc73c..8a19e25 100644
--- a/tools/dom/templates/html/impl/impl_HTMLOptionElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLOptionElement.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory OptionElement({String data: '', String value : '', bool selected: false}) {
     return new OptionElement._(data, value, null, selected);
   }
diff --git a/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
index 25510dc..b677b61 100644
--- a/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLSelectElement.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   // Override default options, since IE returns SelectElement itself and it
diff --git a/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate
index fabbbdf..c7c3212 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('HTMLTableElement.tBodies')
   List<TableSectionElement> get tBodies =>
diff --git a/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate
index d09f45f..d2dbc9e 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('HTMLTableRowElement.cells')
   List<TableCellElement> get cells =>
diff --git a/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate
index a0023e1..e15a540 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('HTMLTableSectionElement.rows')
   List<TableRowElement> get rows =>
diff --git a/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate
index 7d546fe..98c7199 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate
@@ -7,7 +7,7 @@
 part of $LIBRARYNAME;
 
 @Experimental()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_HTMLVideoElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLVideoElement.darttemplate
index 244ea4b..ecd9514 100644
--- a/tools/dom/templates/html/impl/impl_HTMLVideoElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLVideoElement.darttemplate
@@ -4,6 +4,6 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasImageSource$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasImageSource$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_HashChangeEvent.darttemplate b/tools/dom/templates/html/impl/impl_HashChangeEvent.darttemplate
index b9fd424..133ccd2 100644
--- a/tools/dom/templates/html/impl/impl_HashChangeEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HashChangeEvent.darttemplate
@@ -5,7 +5,7 @@
 // WARNING: Do not edit - generated code.
 
 part of $LIBRARYNAME;
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {bool canBubble: true, bool cancelable: true, String oldUrl,
       String newUrl}) {
diff --git a/tools/dom/templates/html/impl/impl_History.darttemplate b/tools/dom/templates/html/impl/impl_History.darttemplate
index a548b00..5a6b2d5 100644
--- a/tools/dom/templates/html/impl/impl_History.darttemplate
+++ b/tools/dom/templates/html/impl/impl_History.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
    * Checks if the State APIs are supported on the current platform.
diff --git a/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate b/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate
index 2c43c5c1..70689f8 100644
--- a/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   @DomName('IDBCursor.delete')
   Future delete() {
    try {
diff --git a/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate b/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate
index c89c29a..31d47ec 100644
--- a/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   @DomName('IDBDatabase.createObjectStore')
   @DocsEditable()
   ObjectStore createObjectStore(String name,
diff --git a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
index 6218e29..c702826 100644
--- a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   /**
    * Checks to see if Indexed DB is supported on the current platform.
    */
diff --git a/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate b/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate
index e9dbcb5..03af72c 100644
--- a/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   @DomName('IDBIndex.count')
   Future<int> count([key_OR_range]) {
    try {
diff --git a/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate b/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
index 28439a4..19ecce2 100644
--- a/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_only(value);
diff --git a/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate b/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate
index 1363056..4b62232 100644
--- a/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('IDBObjectStore.add')
   Future add(value, [key]) {
diff --git a/tools/dom/templates/html/impl/impl_IDBTransaction.darttemplate b/tools/dom/templates/html/impl/impl_IDBTransaction.darttemplate
index 4eb6bec..39133b0 100644
--- a/tools/dom/templates/html/impl/impl_IDBTransaction.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBTransaction.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
    * Provides a Future which will be completed once the transaction has
diff --git a/tools/dom/templates/html/impl/impl_ImageData.darttemplate b/tools/dom/templates/html/impl/impl_ImageData.darttemplate
index dd04dee..c233337 100644
--- a/tools/dom/templates/html/impl/impl_ImageData.darttemplate
+++ b/tools/dom/templates/html/impl/impl_ImageData.darttemplate
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 part of $LIBRARYNAME;
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $if DARTIUM
   List<int> __data;
 
diff --git a/tools/dom/templates/html/impl/impl_Location.darttemplate b/tools/dom/templates/html/impl/impl_Location.darttemplate
index d663fcd..5242f8a 100644
--- a/tools/dom/templates/html/impl/impl_Location.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Location.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_MediaStream.darttemplate b/tools/dom/templates/html/impl/impl_MediaStream.darttemplate
index 0df739b..bc11e19 100644
--- a/tools/dom/templates/html/impl/impl_MediaStream.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MediaStream.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate b/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
index cf3c4e4..c439664 100644
--- a/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {bool canBubble: false, bool cancelable: false, Object data,
       String origin, String lastEventId,
diff --git a/tools/dom/templates/html/impl/impl_MutationEvent.darttemplate b/tools/dom/templates/html/impl/impl_MutationEvent.darttemplate
index c4a30c6..5460640 100644
--- a/tools/dom/templates/html/impl/impl_MutationEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MutationEvent.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
       {bool canBubble: false, bool cancelable: false, Node relatedNode,
       String prevValue, String newValue, String attrName, int attrChange: 0}) {
@@ -16,3 +16,6 @@
   }
 $!MEMBERS
 }
+
+
+
diff --git a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
index 4208322..203068c 100644
--- a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
   /**
    * Checks to see if the mutation observer API is supported on the current
diff --git a/tools/dom/templates/html/impl/impl_Navigator.darttemplate b/tools/dom/templates/html/impl/impl_Navigator.darttemplate
index e9d2d44..2cb5ddd 100644
--- a/tools/dom/templates/html/impl/impl_Navigator.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Navigator.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
 $if DART2JS
   @DomName('Navigator.language')
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index 85f7e12..a58eefc 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -185,7 +185,7 @@
 }
 
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   // Custom element created callback.
   Node._created() : super._created();
diff --git a/tools/dom/templates/html/impl/impl_NodeIterator.darttemplate b/tools/dom/templates/html/impl/impl_NodeIterator.darttemplate
index 258dac3..c850360 100644
--- a/tools/dom/templates/html/impl/impl_NodeIterator.darttemplate
+++ b/tools/dom/templates/html/impl/impl_NodeIterator.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory NodeIterator(Node root, int whatToShow) {
     return document._createNodeIterator(root, whatToShow, null);
   }
diff --git a/tools/dom/templates/html/impl/impl_Notification.darttemplate b/tools/dom/templates/html/impl/impl_Notification.darttemplate
index 03efd63..6e573ce 100644
--- a/tools/dom/templates/html/impl/impl_Notification.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Notification.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   factory $CLASSNAME(String title, {String titleDir: null, String body: null,
       String bodyDir: null, String tag: null, String iconUrl: null}) {
diff --git a/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate b/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
index 9b8eea8..64474fd 100644
--- a/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
+++ b/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $if DART2JS
   factory $CLASSNAME(Map rtcIceServers, [Map mediaConstraints]) {
     var constructorName = JS('RtcPeerConnection', 'window[#]',
diff --git a/tools/dom/templates/html/impl/impl_RadioNodeList.darttemplate b/tools/dom/templates/html/impl/impl_RadioNodeList.darttemplate
index 5d5569d..1534895 100644
--- a/tools/dom/templates/html/impl/impl_RadioNodeList.darttemplate
+++ b/tools/dom/templates/html/impl/impl_RadioNodeList.darttemplate
@@ -10,7 +10,7 @@
 // RadioNodeList is to get the selected value and it will be cleaner to
 // introduce a different API for that purpose.
 $else
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 }
 $endif
diff --git a/tools/dom/templates/html/impl/impl_Range.darttemplate b/tools/dom/templates/html/impl/impl_Range.darttemplate
index 3c1c080..f152a33 100644
--- a/tools/dom/templates/html/impl/impl_Range.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Range.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() => document.createRange();
 
   factory $CLASSNAME.fromPoint(Point point) =>
diff --git a/tools/dom/templates/html/impl/impl_SVGColor.darttemplate b/tools/dom/templates/html/impl/impl_SVGColor.darttemplate
index 053f229..7df86ab 100644
--- a/tools/dom/templates/html/impl/impl_SVGColor.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGColor.darttemplate
@@ -7,6 +7,6 @@
 // Hack because the baseclass is private in dart:html, and we want to omit this
 // type entirely but can't.
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$IMPLEMENTS$NATIVESPEC {
   _SVGColor.internal();
 }
diff --git a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
index 1d9f06e..c9c70a7 100644
--- a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
@@ -30,7 +30,7 @@
   }
 }
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   static final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 
   factory $CLASSNAME.tag(String tag) =>
diff --git a/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate
index 6279a7e..13eabab 100644
--- a/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGSVGElement.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME() {
     final el = new SvgElement.tag("svg");
     // The SVG spec requires the version attribute to match the spec version
diff --git a/tools/dom/templates/html/impl/impl_Screen.darttemplate b/tools/dom/templates/html/impl/impl_Screen.darttemplate
index efffa28..15a947e 100644
--- a/tools/dom/templates/html/impl/impl_Screen.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Screen.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   @DomName('Screen.availHeight')
   @DomName('Screen.availLeft')
diff --git a/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate b/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
index 57a44bb..883faea 100644
--- a/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
+++ b/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 $if DART2JS
   static bool get supported =>
diff --git a/tools/dom/templates/html/impl/impl_Storage.darttemplate b/tools/dom/templates/html/impl/impl_Storage.darttemplate
index ff99d70..82d1f0c 100644
--- a/tools/dom/templates/html/impl/impl_Storage.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Storage.darttemplate
@@ -29,8 +29,8 @@
  * [Maps](http://www.dartlang.org/docs/library-tour/#maps-aka-dictionaries-or-hashes)
  * section of the library tour.
  */
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS
-    implements Map<String, String> {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS
+    implements Map<String, String> $NATIVESPEC {
 
   void addAll(Map<String, String> other) {
     other.forEach((k, v) { this[k] = v; });
diff --git a/tools/dom/templates/html/impl/impl_StorageEvent.darttemplate b/tools/dom/templates/html/impl/impl_StorageEvent.darttemplate
index 9d546b3..df91c56 100644
--- a/tools/dom/templates/html/impl/impl_StorageEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_StorageEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
     {bool canBubble: false, bool cancelable: false, String key, String oldValue,
     String newValue, String url, Storage storageArea}) {
diff --git a/tools/dom/templates/html/impl/impl_Text.darttemplate b/tools/dom/templates/html/impl/impl_Text.darttemplate
index 8c53058..7540799 100644
--- a/tools/dom/templates/html/impl/impl_Text.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Text.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String data) => document._createTextNode(data);
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_TextEvent.darttemplate b/tools/dom/templates/html/impl/impl_TextEvent.darttemplate
index e12cc8b..765a280 100644
--- a/tools/dom/templates/html/impl/impl_TextEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_TextEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(String type,
     {bool canBubble: false, bool cancelable: false, Window view, String data}) {
     if (view == null) {
diff --git a/tools/dom/templates/html/impl/impl_Touch.darttemplate b/tools/dom/templates/html/impl/impl_Touch.darttemplate
index d629fd3..1c14ff7 100644
--- a/tools/dom/templates/html/impl/impl_Touch.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Touch.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   @DomName('Touch.clientX')
diff --git a/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate b/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate
index 3ee2462..c460c1ba 100644
--- a/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory $CLASSNAME(TouchList touches, TouchList targetTouches,
       TouchList changedTouches, String type,
       {Window view, int screenX: 0, int screenY: 0, int clientX: 0,
diff --git a/tools/dom/templates/html/impl/impl_TouchList.darttemplate b/tools/dom/templates/html/impl/impl_TouchList.darttemplate
index 56bcf1e..06c7b67 100644
--- a/tools/dom/templates/html/impl/impl_TouchList.darttemplate
+++ b/tools/dom/templates/html/impl/impl_TouchList.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
   /// NB: This constructor likely does not work as you might expect it to! This
   /// constructor will simply fail (returning null) if you are not on a device
   /// with touch enabled. See dartbug.com/8314.
diff --git a/tools/dom/templates/html/impl/impl_TreeWalker.darttemplate b/tools/dom/templates/html/impl/impl_TreeWalker.darttemplate
index 4d5c94d..60733cc 100644
--- a/tools/dom/templates/html/impl/impl_TreeWalker.darttemplate
+++ b/tools/dom/templates/html/impl/impl_TreeWalker.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   factory TreeWalker(Node root, int whatToShow) {
     return document._createTreeWalker(root, whatToShow, null);
   }
diff --git a/tools/dom/templates/html/impl/impl_UIEvent.darttemplate b/tools/dom/templates/html/impl/impl_UIEvent.darttemplate
index 223dc0a..91e96b2 100644
--- a/tools/dom/templates/html/impl/impl_UIEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_UIEvent.darttemplate
@@ -6,7 +6,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
   // default to false (since that's Boolean(undefined)).
diff --git a/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate b/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate
index 8478e75..bec16f9 100644
--- a/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate b/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate
index 3edff1d..a0c7f90 100644
--- a/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate
@@ -5,7 +5,7 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
 $if DART2JS
diff --git a/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate b/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
index 64ca60f..9f0600b 100644
--- a/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
@@ -4,7 +4,7 @@
 
 part of $LIBRARYNAME;
 
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   factory WheelEvent(String type,
       {Window view, int deltaX: 0, int deltaY: 0,
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 12ad45f..94baa46 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -6,10 +6,9 @@
 
 @DocsEditable()
 $if DART2JS
-$(ANNOTATIONS)@Native("Window,DOMWindow")
-$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS native "Window,DOMWindow" {
 $else
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $endif
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate b/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate
index d1b4f83..82862da 100644
--- a/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate
@@ -5,5 +5,5 @@
 part of $LIBRARYNAME;
 
 @DocsEditable()
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME extends EventTarget {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME extends EventTarget$NATIVESPEC {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index 96cfca9..e8f64d5 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -51,7 +51,7 @@
   * * [JS XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest)
   * * [Using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest)
  */
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   /**
    * Creates a GET request for the specified [url].