// 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. // @dart = 2.7 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'); } }