Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: pkg/code_transformers/lib/src/resolvers.dart

Issue 181383015: Refactoring resolvers to make them able to be run in parallel. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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.resolvers;
6
7 import 'dart:async';
8 import 'package:barback/barback.dart' show AssetId, Transformer, Transform;
9
10 import 'resolver.dart';
11 import 'resolver_impl.dart';
12
13 /// Barback-based code resolver which maintains up-to-date resolved ASTs for the
Siggi Cherem (dart-lang) 2014/02/27 18:20:41 update comment? In particular, I was a bit confus
blois 2014/02/27 23:47:17 Done.
14 /// specified code entry points.
15 ///
16 /// This can used by transformers dependent on resolved ASTs which can reference
17 /// this transformer to get the resolver needed.
18 ///
19 /// [Resolver.resolve] must be called to resolve the current AST.
20 ///
21 /// If multiple transformers rely on a resolved AST they should (ideally) share
22 /// the same Resolvers object to minimize re-parsing the AST.
23 class Resolvers {
24 final Map<AssetId, ResolverImpl> _resolvers = {};
25 final String dartSdkDirectory;
26
27 Resolvers(this.dartSdkDirectory);
28
29 /// Get a resolver for the AST starting from [id].
30 Future<Resolver> get(Transform transform) {
31 var id = transform.primaryInput.id;
32 var resolver = _resolvers.putIfAbsent(id,
33 () => new ResolverImpl(id, dartSdkDirectory));
34 return resolver.resolve(transform);
35 }
36 }
37
38 /// Transformer mixin which automatically gets and releases resolvers.
39 ///
40 /// To use mix this class in, set the resolvers field and override
41 /// [applyResolver].
42 abstract class ResolverTransformer implements Transformer {
43 /// The cache of resolvers- must be set from subclass.
44 Resolvers resolvers;
45
46 Future apply(Transform transform) {
47 return resolvers.get(transform).then((resolver) {
48 return new Future.value(applyResolver(transform, resolver)).then((_) {
49 resolver.release();
50 });
51 });
52 }
53
54 /// Invoked when the resolver is ready to be processed.
55 ///
56 /// Return a Future to indicate when apply is completed.
57 applyResolver(Transform transform, Resolver resolver);
58 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698