| // Copyright (c) 2017, 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. | 
 |  | 
 | import 'dart:html'; | 
 |  | 
 | /*member: main:[]*/ | 
 | main() { | 
 |   document.createElement(CustomElement.tag); | 
 |   newCustom(); | 
 |   newCustomCreated(); | 
 |   newNormal(); | 
 |   newNormalCreated(); | 
 | } | 
 |  | 
 | //////////////////////////////////////////////////////////////////////////////// | 
 | // Create a custom element. The factory is inlined but the generative | 
 | // constructor isn't. | 
 | //////////////////////////////////////////////////////////////////////////////// | 
 |  | 
 | /*member: newCustom:[]*/ | 
 | @pragma('dart2js:noInline') | 
 | newCustom() { | 
 |   new CustomElement(); | 
 | } | 
 |  | 
 | /*member: newCustomCreated:[]*/ | 
 | @pragma('dart2js:noInline') | 
 | newCustomCreated() { | 
 |   new CustomElement.created(); | 
 | } | 
 |  | 
 | class CustomElement extends HtmlElement { | 
 |   static final tag = 'x-foo'; | 
 |  | 
 |   /*member: CustomElement.:[newCustom:CustomElement]*/ | 
 |   factory CustomElement() => new Element.tag(tag); | 
 |  | 
 |   /*member: CustomElement.created:[]*/ | 
 |   CustomElement.created() : super.created() { | 
 |     print('boo'); | 
 |   } | 
 | } | 
 |  | 
 | //////////////////////////////////////////////////////////////////////////////// | 
 | // Create a normal class, similar to a custom element. Both the factory and | 
 | // the generative constructor are inlined. | 
 | //////////////////////////////////////////////////////////////////////////////// | 
 |  | 
 | /*member: newNormal:[]*/ | 
 | @pragma('dart2js:noInline') | 
 | newNormal() { | 
 |   new NormalElement(); | 
 | } | 
 |  | 
 | /*member: newNormalCreated:[]*/ | 
 | @pragma('dart2js:noInline') | 
 | newNormalCreated() { | 
 |   new NormalElement.created(); | 
 | } | 
 |  | 
 | class NormalElement { | 
 |   /*member: NormalElement.:[newNormal:NormalElement]*/ | 
 |   factory NormalElement() => null; | 
 |  | 
 |   /*member: NormalElement.created:[newNormalCreated+,newNormalCreated:NormalElement]*/ | 
 |   NormalElement.created() { | 
 |     print('foo'); | 
 |   } | 
 | } |