X Tutup
Skip to content

Commit bd65b63

Browse files
committed
fix(transformer): Loggers now are per zone and each transform runs in its own zone
1 parent 09226cd commit bd65b63

File tree

18 files changed

+92
-161
lines changed

18 files changed

+92
-161
lines changed

modules/angular2/src/transform/bind_generator/generator.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Future<String> createNgSettersAndGetters(
1515

1616
String code = ngDeps.code;
1717
var setters = _generateSetters(_createPropertiesMap(ngDeps));
18-
var getters = _generateGetters( _createEventPropertiesList(ngDeps));
18+
var getters = _generateGetters(_createEventPropertiesList(ngDeps));
1919

2020
if (setters.isEmpty && getters.isEmpty) return code;
2121
var out = new StringBuffer();
@@ -97,7 +97,7 @@ List<String> _generateGetters(List<String> eventProperties) {
9797

9898
/// Collapses all `events` in {@link ngDeps} into a list of corresponding
9999
/// property names.
100-
List<String> _createEventPropertiesList(NgDeps ngDeps) {
100+
List<String> _createEventPropertiesList(NgDeps ngDeps) {
101101
var visitor = new ExtractNamedExpressionVisitor('events');
102102
var propertyNames = [];
103103
ngDeps.registeredTypes.forEach((RegisteredType t) {

modules/angular2/src/transform/bind_generator/transformer.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,12 @@ class BindGenerator extends Transformer {
2626

2727
@override
2828
Future apply(Transform transform) async {
29-
log.init(transform);
30-
31-
try {
29+
await log.initZoned(transform, () async {
3230
var id = transform.primaryInput.id;
3331
var reader = new AssetReader.fromTransform(transform);
3432
var transformedCode = await createNgSettersAndGetters(reader, id);
3533
transform.addOutput(new Asset.fromString(
3634
id, formatter.format(transformedCode, uri: id.path)));
37-
} catch (ex, stackTrace) {
38-
log.logger.error('Creating ng setters/getters failed.\n'
39-
'Exception: $ex\n'
40-
'Stack Trace: $stackTrace');
41-
}
35+
}, errorMessage: 'Creating ng setters/getters failed.');
4236
}
4337
}

modules/angular2/src/transform/common/annotation_matcher.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class AnnotationMatcher extends ClassMatcherBase {
8888
throw 'Unable to locate descriptor for ${annotation.name} in ${assetId}';
8989
}
9090
return implements(descriptor, interfaces,
91-
missingSuperClassWarning: 'Missing `custom_annotation` entry for `${descriptor.superClass}`.');
91+
missingSuperClassWarning: 'Missing `custom_annotation` entry for `${descriptor.superClass}`.');
9292
}
9393

9494
/// Checks if an [Annotation] node implements [Injectable].

modules/angular2/src/transform/common/logging.dart

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,27 @@ import 'package:barback/barback.dart';
55
import 'package:code_transformers/messages/build_logger.dart';
66
import '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}.
2126
BuildLogger 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

2831
class PrintLogger implements BuildLogger {

modules/angular2/src/transform/deferred_rewriter/transformer.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,15 @@ class DeferredRewriter extends Transformer {
2424

2525
@override
2626
Future apply(Transform transform) async {
27-
log.init(transform);
28-
29-
try {
27+
await log.initZoned(transform, () async {
3028
var asset = transform.primaryInput;
3129
var reader = new AssetReader.fromTransform(transform);
3230
var transformedCode = await rewriteDeferredLibraries(reader, asset.id);
3331
if (transformedCode != null) {
3432
transform.addOutput(
3533
new Asset.fromString(transform.primaryInput.id, transformedCode));
3634
}
37-
} catch (ex, stackTrace) {
38-
log.logger.warning('Rewritting deferred libraries failed.\n'
39-
'Exception: $ex\n'
40-
'Stack Trace: $stackTrace');
41-
}
35+
}, errorMessage: 'Rewritting deferred libraries failed.');
4236
}
4337
}
4438

modules/angular2/src/transform/directive_linker/transformer.dart

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ class DirectiveLinker extends Transformer {
2222

2323
@override
2424
Future apply(Transform transform) async {
25-
log.init(transform);
26-
27-
try {
25+
await log.initZoned(transform, () async {
2826
var reader = new AssetReader.fromTransform(transform);
2927
var assetId = transform.primaryInput.id;
3028
var assetPath = assetId.path;
@@ -33,12 +31,7 @@ class DirectiveLinker extends Transformer {
3331
var formattedCode = formatter.format(transformedCode, uri: assetPath);
3432
transform.addOutput(new Asset.fromString(assetId, formattedCode));
3533
}
36-
} catch (ex, stackTrace) {
37-
log.logger.error('Linking ng directives failed.\n'
38-
'Exception: $ex\n'
39-
'Stack Trace: $stackTrace');
40-
}
41-
return null;
34+
}, errorMessage: 'Linking ng directives failed.');
4235
}
4336
}
4437

@@ -52,18 +45,11 @@ class EmptyNgDepsRemover extends Transformer {
5245

5346
@override
5447
Future apply(Transform transform) async {
55-
log.init(transform);
56-
57-
try {
48+
await log.initZoned(transform, () async {
5849
var reader = new AssetReader.fromTransform(transform);
5950
if (!(await isNecessary(reader, transform.primaryInput.id))) {
6051
transform.consumePrimary();
6152
}
62-
} catch (ex, stackTrace) {
63-
log.logger.error('Removing unnecessary ng deps failed.\n'
64-
'Exception: $ex\n'
65-
'Stack Trace: $stackTrace');
66-
}
67-
return null;
53+
}, errorMessage: 'Removing unnecessary ng deps failed.');
6854
}
6955
}

modules/angular2/src/transform/directive_metadata_extractor/transformer.dart

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@ class DirectiveMetadataExtractor extends Transformer {
2525

2626
@override
2727
Future apply(Transform transform) async {
28-
log.init(transform);
29-
30-
try {
28+
await log.initZoned(transform, () async {
3129
var reader = new AssetReader.fromTransform(transform);
3230
var fromAssetId = transform.primaryInput.id;
3331

@@ -40,12 +38,7 @@ class DirectiveMetadataExtractor extends Transformer {
4038
transform.addOutput(new Asset.fromString(
4139
_outputAssetId(fromAssetId), _encoder.convert(jsonMap)));
4240
}
43-
} catch (ex, stackTrace) {
44-
log.logger.error('Extracting ng metadata failed.\n'
45-
'Exception: $ex\n'
46-
'Stack Trace: $stackTrace');
47-
}
48-
return null;
41+
}, errorMessage: 'Extracting ng metadata failed.');
4942
}
5043
}
5144

modules/angular2/src/transform/directive_processor/transformer.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ class DirectiveProcessor extends Transformer {
2929

3030
@override
3131
Future apply(Transform transform) async {
32-
log.init(transform);
33-
34-
try {
32+
await log.initZoned(transform, () async {
3533
var asset = transform.primaryInput;
3634
var reader = new AssetReader.fromTransform(transform);
3735
var ngDepsSrc = await createNgDeps(
@@ -46,10 +44,6 @@ class DirectiveProcessor extends Transformer {
4644
}
4745
transform.addOutput(new Asset.fromString(ngDepsAssetId, ngDepsSrc));
4846
}
49-
} catch (ex, stackTrace) {
50-
log.logger.warning('Processing ng directives failed.\n'
51-
'Exception: $ex\n'
52-
'Stack Trace: $stackTrace');
53-
}
47+
}, errorMessage: 'Processing ng directives failed.');
5448
}
5549
}

modules/angular2/src/transform/reflection_remover/rewriter.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ class Rewriter {
4545
///
4646
/// This breaks our dependency on dart:mirrors, which enables smaller code
4747
/// size and better performance.
48-
class _RewriterVisitor extends Object
49-
with RecursiveAstVisitor<Object> {
48+
class _RewriterVisitor extends Object with RecursiveAstVisitor<Object> {
5049
final Rewriter _rewriter;
5150
final buf = new StringBuffer();
5251
final reflectionCapabilityAssignments = [];

modules/angular2/src/transform/reflection_remover/transformer.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ class ReflectionRemover extends Transformer {
3030

3131
@override
3232
Future apply(Transform transform) async {
33-
log.init(transform);
34-
35-
try {
33+
await log.initZoned(transform, () async {
3634
var newEntryPoints = options.entryPoints.map((entryPoint) {
3735
return new AssetId(transform.primaryInput.id.package, entryPoint)
3836
.changeExtension(DEPS_EXTENSION);
@@ -54,10 +52,6 @@ class ReflectionRemover extends Transformer {
5452
mirrorMode: mirrorMode, writeStaticInit: writeStaticInit);
5553
transform.addOutput(
5654
new Asset.fromString(transform.primaryInput.id, transformedCode));
57-
} catch (ex, stackTrace) {
58-
log.logger.error('Removing reflection failed.\n'
59-
'Exception: $ex\n'
60-
'Stack Trace: $stackTrace');
61-
}
55+
}, errorMessage: 'Removing reflection failed.');
6256
}
6357
}

0 commit comments

Comments
 (0)
X Tutup