OLD | NEW |
| (Empty) |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 library initialize; | |
5 | |
6 // The `loader_replacer` transformer will replace this with a static_loader. | |
7 import 'src/mirror_loader.dart' as loader; | |
8 import 'dart:async'; | |
9 import 'dart:collection'; | |
10 | |
11 part 'src/init_method.dart'; | |
12 part 'src/initializer.dart'; | |
13 | |
14 /// Top level function which crawls the dependency graph and runs initializers. | |
15 /// If [typeFilter] and/or [customFilter] are supplied then only those types of | |
16 /// annotations will be parsed. If both filters are supplied they are treated | |
17 /// as an AND. | |
18 /// | |
19 /// If [from] is supplied then initializers will be found starting from the | |
20 /// library at the supplied uri. | |
21 /// | |
22 /// **Warning**: Do not use [from] directly in your code unless you are building | |
23 /// a framework that will use a transformer to remove this argument later. This | |
24 /// parameter is supported in Dartium, but [run] will throw if you use the | |
25 /// argument after building an application with `pub build` or `pub serve`. | |
26 Future run({List<Type> typeFilter, InitializerFilter customFilter, Uri from}) { | |
27 return _runInitQueue(loader.loadInitializers( | |
28 typeFilter: typeFilter, customFilter: customFilter, from: from)); | |
29 } | |
30 | |
31 Future _runInitQueue(Queue<Function> initializers) { | |
32 if (initializers.isEmpty) return new Future.value(null); | |
33 | |
34 var initializer = initializers.removeFirst(); | |
35 var val = initializer(); | |
36 if (val is! Future) val = new Future.value(val); | |
37 | |
38 return val.then((_) => _runInitQueue(initializers)); | |
39 } | |
OLD | NEW |