OLD | NEW |
| (Empty) |
1 // Copyright (c) 2014, 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 | |
5 library code_transformers.src.resolver_transformer; | |
6 | |
7 import 'dart:async'; | |
8 import 'package:barback/barback.dart'; | |
9 | |
10 import 'resolver.dart'; | |
11 import 'resolver_impl.dart'; | |
12 | |
13 /// Filter for whether the specified asset is an entry point to the Dart | |
14 /// application. | |
15 typedef EntryPointFilter(Asset input); | |
16 | |
17 /// Transformer which maintains up-to-date resolved ASTs for the specified | |
18 /// code entry points. | |
19 /// | |
20 /// This can used by transformers dependent on resolved ASTs which can reference | |
21 /// this transformer to get the resolver needed. | |
22 /// | |
23 /// This transformer must be in a phase before any dependent transformers. The | |
24 /// resolve AST is automatically updated any time any dependent assets are | |
25 /// changed. | |
26 /// | |
27 /// This will only resolve the AST for code beginning from assets which are | |
28 /// accepted by [entryPointFilter]. | |
29 /// | |
30 /// If multiple transformers rely on a resolved AST they should (ideally) share | |
31 /// the same ResolverTransformer to avoid re-parsing the AST. | |
32 class ResolverTransformer extends Transformer { | |
33 final Map<AssetId, Resolver> _resolvers = {}; | |
34 final EntryPointFilter entryPointFilter; | |
35 final String dartSdkDirectory; | |
36 | |
37 ResolverTransformer(this.dartSdkDirectory, this.entryPointFilter); | |
38 | |
39 Future<bool> isPrimary(Asset input) => | |
40 new Future.value(entryPointFilter(input)); | |
41 | |
42 /// Updates the resolved AST for the primary input of the transform. | |
43 Future apply(Transform transform) { | |
44 var resolver = getResolver(transform.primaryInput.id); | |
45 | |
46 return resolver.updateSources(transform).then((_) { | |
47 transform.addOutput(transform.primaryInput); | |
48 return null; | |
49 }); | |
50 } | |
51 | |
52 /// Get a resolver for the AST starting from [id]. | |
53 Resolver getResolver(AssetId id) => | |
54 _resolvers.putIfAbsent(id, () => new ResolverImpl(id, dartSdkDirectory)); | |
55 } | |
OLD | NEW |