| Index: sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
|
| similarity index 63%
|
| copy from sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
|
| copy to sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
|
| index 035dbe6dda4f89d488db192e5b4c2b2d04ba3c88..8316d4e4e03c93f3c52c574755708e3c5216ae8d 100644
|
| --- a/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
|
| +++ b/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
|
| @@ -64,34 +64,55 @@ class AssetEnvironment {
|
| /// transformers, and server are loaded and ready.
|
| static Future<AssetEnvironment> create(Entrypoint entrypoint,
|
| BarbackMode mode, {WatcherType watcherType, String hostname, int basePort,
|
| - Iterable<String> packages, Iterable<AssetId> entrypoints,
|
| - bool useDart2JS: true}) {
|
| + Iterable<String> packages, Iterable<AssetId> entrypoints, bool useDart2JS:
|
| + true}) {
|
| if (watcherType == null) watcherType = WatcherType.NONE;
|
| if (hostname == null) hostname = "localhost";
|
| if (basePort == null) basePort = 0;
|
|
|
| - return log.progress("Loading asset environment", () async {
|
| - var graph = await entrypoint.loadPackageGraph();
|
| - graph = _adjustPackageGraph(graph, mode, packages);
|
| - var barback = new Barback(new PubPackageProvider(graph));
|
| - barback.log.listen(_log);
|
| -
|
| - var environment = new AssetEnvironment._(graph, barback, mode,
|
| - watcherType, hostname, basePort);
|
| -
|
| - await environment._load(entrypoints: entrypoints, useDart2JS: useDart2JS);
|
| - return environment;
|
| + return log.progress("Loading asset environment", () {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + new Future.value(entrypoint.loadPackageGraph()).then((x0) {
|
| + try {
|
| + var graph = x0;
|
| + graph = _adjustPackageGraph(graph, mode, packages);
|
| + var barback = new Barback(new PubPackageProvider(graph));
|
| + barback.log.listen(_log);
|
| + var environment =
|
| + new AssetEnvironment._(graph, barback, mode, watcherType, hostname, basePort);
|
| + new Future.value(
|
| + environment._load(entrypoints: entrypoints, useDart2JS: useDart2JS)).then((x1) {
|
| + try {
|
| + x1;
|
| + completer0.complete(environment);
|
| + } catch (e0, s0) {
|
| + completer0.completeError(e0, s0);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e1, s1) {
|
| + completer0.completeError(e1, s1);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| }, fine: true);
|
| }
|
|
|
| /// Return a version of [graph] that's restricted to [packages] (if passed)
|
| /// and loads cached packages (if [mode] is [BarbackMode.DEBUG]).
|
| - static PackageGraph _adjustPackageGraph(PackageGraph graph,
|
| - BarbackMode mode, Iterable<String> packages) {
|
| + static PackageGraph _adjustPackageGraph(PackageGraph graph, BarbackMode mode,
|
| + Iterable<String> packages) {
|
| if (mode != BarbackMode.DEBUG && packages == null) return graph;
|
| packages = (packages == null ? graph.packages.keys : packages).toSet();
|
|
|
| - return new PackageGraph(graph.entrypoint, graph.lockFile,
|
| + return new PackageGraph(
|
| + graph.entrypoint,
|
| + graph.lockFile,
|
| new Map.fromIterable(packages, value: (packageName) {
|
| var package = graph.packages[packageName];
|
| if (mode != BarbackMode.DEBUG) return package;
|
| @@ -157,8 +178,8 @@ class AssetEnvironment {
|
| /// go to barback immediately.
|
| Set<AssetId> _modifiedSources;
|
|
|
| - AssetEnvironment._(this.graph, this.barback, this.mode,
|
| - this._watcherType, this._hostname, this._basePort);
|
| + AssetEnvironment._(this.graph, this.barback, this.mode, this._watcherType,
|
| + this._hostname, this._basePort);
|
|
|
| /// Gets the built-in [Transformer]s that should be added to [package].
|
| ///
|
| @@ -185,8 +206,8 @@ class AssetEnvironment {
|
| // it's ephemeral in which case the admin port is too.
|
| if (port == null) port = _basePort == 0 ? 0 : _basePort - 1;
|
|
|
| - return AdminServer.bind(this, _hostname, port)
|
| - .then((server) => _adminServer = server);
|
| + return AdminServer.bind(this, _hostname, port).then((server) => _adminServer =
|
| + server);
|
| }
|
|
|
| /// Binds a new port to serve assets from within [rootDirectory] in the
|
| @@ -207,9 +228,10 @@ class AssetEnvironment {
|
| }
|
|
|
| // See if the new directory overlaps any existing servers.
|
| - var overlapping = _directories.keys.where((directory) =>
|
| - path.isWithin(directory, rootDirectory) ||
|
| - path.isWithin(rootDirectory, directory)).toList();
|
| + var overlapping = _directories.keys.where(
|
| + (directory) =>
|
| + path.isWithin(directory, rootDirectory) ||
|
| + path.isWithin(rootDirectory, directory)).toList();
|
|
|
| if (overlapping.isNotEmpty) {
|
| return new Future.error(
|
| @@ -220,19 +242,20 @@ class AssetEnvironment {
|
|
|
| // If not using an ephemeral port, find the lowest-numbered available one.
|
| if (port != 0) {
|
| - var boundPorts = _directories.values.map((directory) => directory.port)
|
| - .toSet();
|
| + var boundPorts =
|
| + _directories.values.map((directory) => directory.port).toSet();
|
| while (boundPorts.contains(port)) {
|
| port++;
|
| }
|
| }
|
|
|
| - var sourceDirectory = new SourceDirectory(
|
| - this, rootDirectory, _hostname, port);
|
| + var sourceDirectory =
|
| + new SourceDirectory(this, rootDirectory, _hostname, port);
|
| _directories[rootDirectory] = sourceDirectory;
|
|
|
| - return _provideDirectorySources(rootPackage, rootDirectory)
|
| - .then((subscription) {
|
| + return _provideDirectorySources(
|
| + rootPackage,
|
| + rootDirectory).then((subscription) {
|
| sourceDirectory.watchSubscription = subscription;
|
| return sourceDirectory.serve();
|
| });
|
| @@ -247,9 +270,11 @@ class AssetEnvironment {
|
| ///
|
| /// Returns a [Future] that completes to the bound server.
|
| Future<BarbackServer> servePackageBinDirectory(String package) {
|
| - return _provideDirectorySources(graph.packages[package], "bin").then(
|
| - (_) => BarbackServer.bind(this, _hostname, 0, package: package,
|
| - rootDirectory: "bin"));
|
| + return _provideDirectorySources(
|
| + graph.packages[package],
|
| + "bin").then(
|
| + (_) =>
|
| + BarbackServer.bind(this, _hostname, 0, package: package, rootDirectory: "bin"));
|
| }
|
|
|
| /// Precompiles all of [packageName]'s executables to snapshots in
|
| @@ -260,41 +285,104 @@ class AssetEnvironment {
|
| /// Returns a map from executable name to path for the snapshots that were
|
| /// successfully precompiled.
|
| Future<Map<String, String>> precompileExecutables(String packageName,
|
| - String directory, {Iterable<AssetId> executableIds}) async {
|
| - if (executableIds == null) {
|
| - executableIds = graph.packages[packageName].executableIds;
|
| - }
|
| -
|
| - log.fine("Executables for $packageName: $executableIds");
|
| - if (executableIds.isEmpty) return [];
|
| -
|
| - var package = graph.packages[packageName];
|
| - var server = await servePackageBinDirectory(packageName);
|
| - try {
|
| - var precompiled = {};
|
| - await waitAndPrintErrors(executableIds.map((id) async {
|
| - var basename = path.url.basename(id.path);
|
| - var snapshotPath = path.join(directory, "$basename.snapshot");
|
| - var result = await runProcess(Platform.executable, [
|
| - '--snapshot=$snapshotPath',
|
| - server.url.resolve(basename).toString()
|
| - ]);
|
| - if (result.success) {
|
| - log.message("Precompiled ${_formatExecutable(id)}.");
|
| - precompiled[path.withoutExtension(basename)] = snapshotPath;
|
| + String directory, {Iterable<AssetId> executableIds}) {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + join0() {
|
| + log.fine("Executables for ${packageName}: ${executableIds}");
|
| + join1() {
|
| + var package = graph.packages[packageName];
|
| + new Future.value(servePackageBinDirectory(packageName)).then((x0) {
|
| + try {
|
| + var server = x0;
|
| + join2() {
|
| + completer0.complete();
|
| + }
|
| + finally0(cont0) {
|
| + server.close();
|
| + cont0();
|
| + }
|
| + catch0(e1, s1) {
|
| + finally0(() => completer0.completeError(e1, s1));
|
| + }
|
| + try {
|
| + var precompiled = {};
|
| + new Future.value(waitAndPrintErrors(executableIds.map(((id) {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + var basename = path.url.basename(id.path);
|
| + var snapshotPath =
|
| + path.join(directory, "${basename}.snapshot");
|
| + new Future.value(
|
| + runProcess(
|
| + Platform.executable,
|
| + [
|
| + '--snapshot=${snapshotPath}',
|
| + server.url.resolve(basename).toString()])).then((x0) {
|
| + try {
|
| + var result = x0;
|
| + join0() {
|
| + completer0.complete();
|
| + }
|
| + if (result.success) {
|
| + log.message(
|
| + "Precompiled ${_formatExecutable(id)}.");
|
| + precompiled[path.withoutExtension(basename)] =
|
| + snapshotPath;
|
| + join0();
|
| + } else {
|
| + throw new ApplicationException(
|
| + log.yellow("Failed to precompile ${_formatExecutable(id)}:\n") +
|
| + result.stderr.join('\n'));
|
| + join0();
|
| + }
|
| + } catch (e0, s0) {
|
| + completer0.completeError(e0, s0);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| + })))).then((x1) {
|
| + try {
|
| + x1;
|
| + final v0 = precompiled;
|
| + finally0(() {
|
| + completer0.complete(v0);
|
| + });
|
| + } catch (e2, s2) {
|
| + catch0(e2, s2);
|
| + }
|
| + }, onError: catch0);
|
| + } catch (e3, s3) {
|
| + catch0(e3, s3);
|
| + }
|
| + } catch (e4, s4) {
|
| + completer0.completeError(e4, s4);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + }
|
| + if (executableIds.isEmpty) {
|
| + completer0.complete([]);
|
| + } else {
|
| + join1();
|
| + }
|
| + }
|
| + if (executableIds == null) {
|
| + executableIds = graph.packages[packageName].executableIds;
|
| + join0();
|
| } else {
|
| - throw new ApplicationException(
|
| - log.yellow("Failed to precompile ${_formatExecutable(id)}:\n") +
|
| - result.stderr.join('\n'));
|
| + join0();
|
| }
|
| - }));
|
| -
|
| - return precompiled;
|
| - } finally {
|
| - // Don't await this future, since we have no need to wait for the server
|
| - // to fully shut down.
|
| - server.close();
|
| - }
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| }
|
|
|
| /// Returns the executable name for [id].
|
| @@ -329,9 +417,8 @@ class AssetEnvironment {
|
| /// If [assetPath] is not contained within a source directory, this throws
|
| /// an exception.
|
| String getSourceDirectoryContaining(String assetPath) =>
|
| - _directories.values
|
| - .firstWhere((dir) => path.isWithin(dir.directory, assetPath))
|
| - .directory;
|
| + _directories.values.firstWhere(
|
| + (dir) => path.isWithin(dir.directory, assetPath)).directory;
|
|
|
| /// Return all URLs serving [assetPath] in this environment.
|
| Future<List<Uri>> getUrlsForAssetPath(String assetPath) {
|
| @@ -350,12 +437,12 @@ class AssetEnvironment {
|
| Future<List<Uri>> _lookUpPathInServerRoot(String assetPath) {
|
| // Find all of the servers whose root directories contain the asset and
|
| // generate appropriate URLs for each.
|
| - return Future.wait(_directories.values
|
| - .where((dir) => path.isWithin(dir.directory, assetPath))
|
| - .map((dir) {
|
| + return Future.wait(
|
| + _directories.values.where(
|
| + (dir) => path.isWithin(dir.directory, assetPath)).map((dir) {
|
| var relativePath = path.relative(assetPath, from: dir.directory);
|
| - return dir.server.then((server) =>
|
| - server.url.resolveUri(path.toUri(relativePath)));
|
| + return dir.server.then(
|
| + (server) => server.url.resolveUri(path.toUri(relativePath)));
|
| }));
|
| }
|
|
|
| @@ -365,8 +452,8 @@ class AssetEnvironment {
|
| if (components.first != "packages") return new Future.value([]);
|
| if (!graph.packages.containsKey(components[1])) return new Future.value([]);
|
| return Future.wait(_directories.values.map((dir) {
|
| - return dir.server.then((server) =>
|
| - server.url.resolveUri(path.toUri(assetPath)));
|
| + return dir.server.then(
|
| + (server) => server.url.resolveUri(path.toUri(assetPath)));
|
| }));
|
| }
|
|
|
| @@ -380,11 +467,11 @@ class AssetEnvironment {
|
|
|
| var uri;
|
| if (path.isWithin(libDir, assetPath)) {
|
| - uri = path.toUri(path.join('packages', package.name,
|
| - path.relative(assetPath, from: libDir)));
|
| + uri = path.toUri(
|
| + path.join('packages', package.name, path.relative(assetPath, from: libDir)));
|
| } else if (path.isWithin(assetDir, assetPath)) {
|
| - uri = path.toUri(path.join('assets', package.name,
|
| - path.relative(assetPath, from: assetDir)));
|
| + uri = path.toUri(
|
| + path.join('assets', package.name, path.relative(assetPath, from: assetDir)));
|
| } else {
|
| continue;
|
| }
|
| @@ -402,8 +489,8 @@ class AssetEnvironment {
|
| ///
|
| /// If no server can serve [url], completes to `null`.
|
| Future<AssetId> getAssetIdForUrl(Uri url) {
|
| - return Future.wait(_directories.values.map((dir) => dir.server))
|
| - .then((servers) {
|
| + return Future.wait(
|
| + _directories.values.map((dir) => dir.server)).then((servers) {
|
| var server = servers.firstWhere((server) {
|
| if (server.port != url.port) return false;
|
| return isLoopback(server.address.host) == isLoopback(url.host) ||
|
| @@ -456,86 +543,163 @@ class AssetEnvironment {
|
| /// Returns a [Future] that completes once all inputs and transformers are
|
| /// loaded.
|
| Future _load({Iterable<AssetId> entrypoints, bool useDart2JS}) {
|
| - return log.progress("Initializing barback", () async {
|
| - // If the entrypoint package manually configures the dart2js
|
| - // transformer, don't include it in the built-in transformer list.
|
| - //
|
| - // TODO(nweiz): if/when we support more built-in transformers, make
|
| - // this more general.
|
| - var containsDart2JS = graph.entrypoint.root.pubspec.transformers
|
| - .any((transformers) =>
|
| - transformers.any((config) => config.id.package == '\$dart2js'));
|
| -
|
| - if (!containsDart2JS && useDart2JS) {
|
| - _builtInTransformers.addAll([
|
| - new Dart2JSTransformer(this, mode),
|
| - new DartForwardingTransformer(mode)
|
| - ]);
|
| - }
|
| -
|
| - // Bind a server that we can use to load the transformers.
|
| - var transformerServer = await BarbackServer.bind(this, _hostname, 0);
|
| -
|
| - var errorStream = barback.errors.map((error) {
|
| - // Even most normally non-fatal barback errors should take down pub if
|
| - // they happen during the initial load process.
|
| - if (error is! AssetLoadException) throw error;
|
| -
|
| - log.error(log.red(error.message));
|
| - log.fine(error.stackTrace.terse);
|
| - });
|
| -
|
| - await _withStreamErrors(() {
|
| - return log.progress("Loading source assets", _provideSources);
|
| - }, [errorStream, barback.results]);
|
| -
|
| - log.fine("Provided sources.");
|
| -
|
| - errorStream = barback.errors.map((error) {
|
| - // Now that we're loading transformers, errors they log shouldn't be
|
| - // fatal, since we're starting to run them on real user assets which
|
| - // may have e.g. syntax errors. If an error would cause a transformer
|
| - // to fail to load, the load failure will cause us to exit.
|
| - if (error is! TransformerException) throw error;
|
| -
|
| - var message = error.error.toString();
|
| - if (error.stackTrace != null) {
|
| - message += "\n" + error.stackTrace.terse.toString();
|
| + return log.progress("Initializing barback", () {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + var containsDart2JS =
|
| + graph.entrypoint.root.pubspec.transformers.any(((transformers) {
|
| + return transformers.any(
|
| + (config) => config.id.package == '\$dart2js');
|
| + }));
|
| + join0() {
|
| + new Future.value(BarbackServer.bind(this, _hostname, 0)).then((x0) {
|
| + try {
|
| + var transformerServer = x0;
|
| + var errorStream = barback.errors.map(((error) {
|
| + if (error is! AssetLoadException) throw error;
|
| + log.error(log.red(error.message));
|
| + log.fine(error.stackTrace.terse);
|
| + }));
|
| + new Future.value(_withStreamErrors((() {
|
| + return log.progress("Loading source assets", _provideSources);
|
| + }), [errorStream, barback.results])).then((x1) {
|
| + try {
|
| + x1;
|
| + log.fine("Provided sources.");
|
| + errorStream = barback.errors.map(((error) {
|
| + if (error is! TransformerException) throw error;
|
| + var message = error.error.toString();
|
| + if (error.stackTrace != null) {
|
| + message += "\n" + error.stackTrace.terse.toString();
|
| + }
|
| + _log(
|
| + new LogEntry(
|
| + error.transform,
|
| + error.transform.primaryId,
|
| + LogLevel.ERROR,
|
| + message,
|
| + null));
|
| + }));
|
| + new Future.value(_withStreamErrors((() {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + completer0.complete(
|
| + log.progress("Loading transformers", (() {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + new Future.value(
|
| + loadAllTransformers(
|
| + this,
|
| + transformerServer,
|
| + entrypoints: entrypoints)).then((x0) {
|
| + try {
|
| + x0;
|
| + transformerServer.close();
|
| + completer0.complete();
|
| + } catch (e0, s0) {
|
| + completer0.completeError(e0, s0);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| + }), fine: true));
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| + }),
|
| + [errorStream, barback.results, transformerServer.results])).then((x2) {
|
| + try {
|
| + x2;
|
| + completer0.complete();
|
| + } catch (e0, s0) {
|
| + completer0.completeError(e0, s0);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e1, s1) {
|
| + completer0.completeError(e1, s1);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e2, s2) {
|
| + completer0.completeError(e2, s2);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + }
|
| + if (!containsDart2JS && useDart2JS) {
|
| + _builtInTransformers.addAll(
|
| + [new Dart2JSTransformer(this, mode), new DartForwardingTransformer(mode)]);
|
| + join0();
|
| + } else {
|
| + join0();
|
| + }
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| }
|
| -
|
| - _log(new LogEntry(error.transform, error.transform.primaryId,
|
| - LogLevel.ERROR, message, null));
|
| });
|
| -
|
| - await _withStreamErrors(() async {
|
| - return log.progress("Loading transformers", () async {
|
| - await loadAllTransformers(this, transformerServer,
|
| - entrypoints: entrypoints);
|
| - transformerServer.close();
|
| - }, fine: true);
|
| - }, [errorStream, barback.results, transformerServer.results]);
|
| + return completer0.future;
|
| }, fine: true);
|
| }
|
|
|
| /// Provides the public source assets in the environment to barback.
|
| ///
|
| /// If [watcherType] is not [WatcherType.NONE], enables watching on them.
|
| - Future _provideSources() async {
|
| - // Just include the "lib" directory from each package. We'll add the
|
| - // other build directories in the root package by calling
|
| - // [serveDirectory].
|
| - await Future.wait(graph.packages.values.map((package) async {
|
| - if (graph.isPackageStatic(package.name)) return;
|
| - await _provideDirectorySources(package, "lib");
|
| - }));
|
| + Future _provideSources() {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + new Future.value(Future.wait(graph.packages.values.map(((package) {
|
| + final completer0 = new Completer();
|
| + scheduleMicrotask(() {
|
| + try {
|
| + join0() {
|
| + new Future.value(
|
| + _provideDirectorySources(package, "lib")).then((x0) {
|
| + try {
|
| + x0;
|
| + completer0.complete();
|
| + } catch (e0, s0) {
|
| + completer0.completeError(e0, s0);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + }
|
| + if (graph.isPackageStatic(package.name)) {
|
| + completer0.complete(null);
|
| + } else {
|
| + join0();
|
| + }
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| + })))).then((x0) {
|
| + try {
|
| + x0;
|
| + completer0.complete();
|
| + } catch (e0, s0) {
|
| + completer0.completeError(e0, s0);
|
| + }
|
| + }, onError: completer0.completeError);
|
| + } catch (e, s) {
|
| + completer0.completeError(e, s);
|
| + }
|
| + });
|
| + return completer0.future;
|
| }
|
|
|
| /// Provides all of the source assets within [dir] in [package] to barback.
|
| ///
|
| /// If [watcherType] is not [WatcherType.NONE], enables watching on them.
|
| /// Returns the subscription to the watcher, or `null` if none was created.
|
| - Future<StreamSubscription<WatchEvent>> _provideDirectorySources(
|
| - Package package, String dir) {
|
| + Future<StreamSubscription<WatchEvent>>
|
| + _provideDirectorySources(Package package, String dir) {
|
| log.fine("Providing sources for ${package.name}|$dir.");
|
| // TODO(rnystrom): Handle overlapping directories. If two served
|
| // directories overlap like so:
|
| @@ -603,8 +767,8 @@ class AssetEnvironment {
|
|
|
| /// Adds a file watcher for [dir] within [package], if the directory exists
|
| /// and the package needs watching.
|
| - Future<StreamSubscription<WatchEvent>> _watchDirectorySources(
|
| - Package package, String dir) {
|
| + Future<StreamSubscription<WatchEvent>> _watchDirectorySources(Package package,
|
| + String dir) {
|
| // If this package comes from a cached source, its contents won't change so
|
| // we don't need to monitor it. `packageId` will be null for the
|
| // application package, since that's not locked.
|
| @@ -665,8 +829,8 @@ class AssetEnvironment {
|
| /// running.
|
| Future _withStreamErrors(Future futureCallback(), List<Stream> streams) {
|
| var completer = new Completer.sync();
|
| - var subscriptions = streams.map((stream) =>
|
| - stream.listen((_) {}, onError: completer.completeError)).toList();
|
| + var subscriptions = streams.map(
|
| + (stream) => stream.listen((_) {}, onError: completer.completeError)).toList();
|
|
|
| new Future.sync(futureCallback).then((_) {
|
| if (!completer.isCompleted) completer.complete();
|
| @@ -693,7 +857,7 @@ void _log(LogEntry entry) {
|
|
|
| messageMentionsAsset(id) =>
|
| messageMentions(id.toString()) ||
|
| - messageMentions(path.fromUri(entry.assetId.path));
|
| + messageMentions(path.fromUri(entry.assetId.path));
|
|
|
| var prefixParts = [];
|
|
|
| @@ -773,8 +937,7 @@ abstract class WatcherType {
|
| class _AutoWatcherType implements WatcherType {
|
| const _AutoWatcherType();
|
|
|
| - DirectoryWatcher create(String directory) =>
|
| - new DirectoryWatcher(directory);
|
| + DirectoryWatcher create(String directory) => new DirectoryWatcher(directory);
|
|
|
| String toString() => "auto";
|
| }
|
| @@ -783,7 +946,7 @@ class _PollingWatcherType implements WatcherType {
|
| const _PollingWatcherType();
|
|
|
| DirectoryWatcher create(String directory) =>
|
| - new PollingDirectoryWatcher(directory);
|
| + new PollingDirectoryWatcher(directory);
|
|
|
| String toString() => "polling";
|
| }
|
|
|