@@ -5,24 +5,27 @@ import 'package:barback/barback.dart';
55import 'package:code_transformers/messages/build_logger.dart' ;
66import 'package:source_span/source_span.dart' ;
77
8- BuildLogger _logger ;
8+ typedef _SimpleCallback () ;
99
10- /// Prepares {@link logger} for use throughout the transformer.
11- void init (Transform t) {
12- _logger = new BuildLogger (t);
13- }
10+ // The key used to store the logger on the current zone.
11+ final _key = #loggingZonedLoggerKey;
1412
15- /// Sets {@link logger} directly. Used for testing - in general use {@link init}.
16- void setLogger (BuildLogger logger) {
17- _logger = logger;
18- }
13+ /// Executes {@link fn} inside a new {@link Zone} with its own logger.
14+ dynamic initZoned (Transform t, _SimpleCallback fn, {String errorMessage: '' }) =>
15+ setZoned (new BuildLogger (t), fn, errorMessage: errorMessage);
1916
20- /// The logger the transformer should use for messaging.
17+ dynamic setZoned (BuildLogger logger, _SimpleCallback fn,
18+ {String errorMessage: '' }) => runZoned (fn,
19+ zoneValues: {_key: logger}, onError: (e, stackTrace) {
20+ logger.error ('$errorMessage \n '
21+ 'Exception: $e \n '
22+ 'Stack Trace: $stackTrace ' );
23+ });
24+
25+ /// The logger for the current {@link Zone}.
2126BuildLogger get logger {
22- if (_logger == null ) {
23- _logger = new PrintLogger ();
24- }
25- return _logger;
27+ var current = Zone .current[_key] as BuildLogger ;
28+ return current == null ? new PrintLogger () : current;
2629}
2730
2831class PrintLogger implements BuildLogger {
0 commit comments