Index: sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart |
index 5af3b5c2b34aae3a20eed117b4e2e4d1d7e41f71..71944d9662189ec287e074c1d31f8f005420502e 100644 |
--- a/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart |
+++ b/sdk/lib/_internal/pub/lib/src/barback/dart2js_transformer.dart |
@@ -57,15 +57,44 @@ class Dart2JSTransformer extends Transformer implements LazyTransformer { |
: this.withSettings(environment, new BarbackSettings({}, mode)); |
/// Only ".dart" entrypoint files within a buildable directory are processed. |
- Future<bool> isPrimary(Asset asset) { |
- if (asset.id.extension != ".dart") return new Future.value(false); |
+ Future<bool> isPrimary(AssetId id) { |
+ if (id.extension != ".dart") return new Future.value(false); |
// These should only contain libraries. For efficiency's sake, we don't |
// look for entrypoints in there. |
- if (["asset/", "lib/"].any(asset.id.path.startsWith)) { |
- return new Future.value(false); |
- } |
+ return new Future.value(!["asset/", "lib/"].any(id.path.startsWith)); |
+ } |
+ |
+ Future apply(Transform transform) { |
+ // TODO(nweiz): If/when barback starts reporting what assets were modified, |
+ // don't re-run the entrypoint detection logic unless the primary input was |
+ // actually modified. See issue 16817. |
+ return _isEntrypoint(transform.primaryInput).then((isEntrypoint) { |
+ if (!isEntrypoint) return null; |
+ |
+ // Wait for any ongoing apply to finish first. |
+ return _pool.withResource(() { |
+ transform.logger.info("Compiling ${transform.primaryInput.id}..."); |
+ var stopwatch = new Stopwatch()..start(); |
+ return _doCompilation(transform).then((_) { |
+ stopwatch.stop(); |
+ transform.logger.info("Took ${stopwatch.elapsed} to compile " |
+ "${transform.primaryInput.id}."); |
+ }); |
+ }); |
+ }); |
+ } |
+ |
+ Future declareOutputs(DeclaringTransform transform) { |
+ var primaryId = transform.primaryId; |
+ transform.declareOutput(primaryId.addExtension(".js")); |
+ transform.declareOutput(primaryId.addExtension(".js.map")); |
+ transform.declareOutput(primaryId.addExtension(".precompiled.js")); |
+ return new Future.value(); |
+ } |
+ /// Returns whether or not [asset] might be an entrypoint. |
+ Future<bool> _isEntrypoint(Asset asset) { |
return asset.readAsString().then((code) { |
try { |
var name = asset.id.path; |
@@ -83,59 +112,39 @@ class Dart2JSTransformer extends Transformer implements LazyTransformer { |
}); |
} |
- Future apply(Transform transform) { |
- var stopwatch = new Stopwatch(); |
- |
- // Wait for any ongoing apply to finish first. |
- return _pool.withResource(() { |
- transform.logger.info("Compiling ${transform.primaryInput.id}..."); |
- stopwatch.start(); |
- |
- var provider = new _BarbackCompilerProvider(_environment, transform, |
- generateSourceMaps: _settings.mode != BarbackMode.RELEASE); |
- |
- // Create a "path" to the entrypoint script. The entrypoint may not |
- // actually be on disk, but this gives dart2js a root to resolve relative |
- // paths against. |
- var id = transform.primaryInput.id; |
- |
- var entrypoint = path.join(_environment.graph.packages[id.package].dir, |
- id.path); |
- |
- // TODO(rnystrom): Should have more sophisticated error-handling here. |
- // Need to report compile errors to the user in an easily visible way. |
- // Need to make sure paths in errors are mapped to the original source |
- // path so they can understand them. |
- return Chain.track(dart.compile( |
- entrypoint, provider, |
- commandLineOptions: _configCommandLineOptions, |
- checked: _configBool('checked'), |
- minify: _configBool( |
- 'minify', defaultsTo: _settings.mode == BarbackMode.RELEASE), |
- verbose: _configBool('verbose'), |
- environment: _configEnvironment, |
- packageRoot: path.join(_environment.rootPackage.dir, |
- "packages"), |
- analyzeAll: _configBool('analyzeAll'), |
- suppressWarnings: _configBool('suppressWarnings'), |
- suppressHints: _configBool('suppressHints'), |
- suppressPackageWarnings: _configBool( |
- 'suppressPackageWarnings', defaultsTo: true), |
- terse: _configBool('terse'), |
- includeSourceMapUrls: _settings.mode != BarbackMode.RELEASE)) |
- .then((_) { |
- stopwatch.stop(); |
- transform.logger.info("Took ${stopwatch.elapsed} to compile $id."); |
- }); |
- }); |
- } |
- |
- Future declareOutputs(DeclaringTransform transform) { |
- var primaryId = transform.primaryInput.id; |
- transform.declareOutput(primaryId.addExtension(".js")); |
- transform.declareOutput(primaryId.addExtension(".js.map")); |
- transform.declareOutput(primaryId.addExtension(".precompiled.js")); |
- return new Future.value(); |
+ /// Run the dart2js compiler. |
+ Future _doCompilation(Transform transform) { |
+ var provider = new _BarbackCompilerProvider(_environment, transform, |
+ generateSourceMaps: _settings.mode != BarbackMode.RELEASE); |
+ |
+ // Create a "path" to the entrypoint script. The entrypoint may not actually |
+ // be on disk, but this gives dart2js a root to resolve relative paths |
+ // against. |
+ var id = transform.primaryInput.id; |
+ |
+ var entrypoint = path.join(_environment.graph.packages[id.package].dir, |
+ id.path); |
+ |
+ // TODO(rnystrom): Should have more sophisticated error-handling here. Need |
+ // to report compile errors to the user in an easily visible way. Need to |
+ // make sure paths in errors are mapped to the original source path so they |
+ // can understand them. |
+ return Chain.track(dart.compile( |
+ entrypoint, provider, |
+ commandLineOptions: _configCommandLineOptions, |
+ checked: _configBool('checked'), |
+ minify: _configBool( |
+ 'minify', defaultsTo: _settings.mode == BarbackMode.RELEASE), |
+ verbose: _configBool('verbose'), |
+ environment: _configEnvironment, |
+ packageRoot: path.join(_environment.rootPackage.dir, "packages"), |
+ analyzeAll: _configBool('analyzeAll'), |
+ suppressWarnings: _configBool('suppressWarnings'), |
+ suppressHints: _configBool('suppressHints'), |
+ suppressPackageWarnings: _configBool( |
+ 'suppressPackageWarnings', defaultsTo: true), |
+ terse: _configBool('terse'), |
+ includeSourceMapUrls: _settings.mode != BarbackMode.RELEASE)); |
} |
/// Parses and returns the "commandLineOptions" configuration option. |