| Index: pkg/compiler/lib/src/apiimpl.dart
 | 
| diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
 | 
| index 9e04e16a7f08205a6a7f99914e69cb481b8956cc..bfadc5b9ec3e351c94e15edc4d40f33e27856ba0 100644
 | 
| --- a/pkg/compiler/lib/src/apiimpl.dart
 | 
| +++ b/pkg/compiler/lib/src/apiimpl.dart
 | 
| @@ -9,28 +9,22 @@ import 'dart:convert';
 | 
|  
 | 
|  import 'package:package_config/packages.dart';
 | 
|  import 'package:package_config/packages_file.dart' as pkgs;
 | 
| -import 'package:package_config/src/packages_impl.dart' show
 | 
| -    MapPackages,
 | 
| -    NonFilePackagesDirectoryPackages;
 | 
| -import 'package:package_config/src/util.dart' show
 | 
| -    checkValidPackageUri;
 | 
| +import 'package:package_config/src/packages_impl.dart'
 | 
| +    show MapPackages, NonFilePackagesDirectoryPackages;
 | 
| +import 'package:package_config/src/util.dart' show checkValidPackageUri;
 | 
|  
 | 
|  import '../compiler_new.dart' as api;
 | 
|  import 'common.dart';
 | 
| -import 'common/tasks.dart' show
 | 
| -    GenericTask;
 | 
| +import 'common/tasks.dart' show GenericTask;
 | 
|  import 'compiler.dart';
 | 
| -import 'diagnostics/messages.dart' show
 | 
| -    Message;
 | 
| +import 'diagnostics/messages.dart' show Message;
 | 
|  import 'elements/elements.dart' as elements;
 | 
|  import 'environment.dart';
 | 
|  import 'io/source_file.dart';
 | 
| -import 'options.dart' show
 | 
| -    CompilerOptions;
 | 
| +import 'options.dart' show CompilerOptions;
 | 
|  import 'platform_configuration.dart' as platform_configuration;
 | 
|  import 'script.dart';
 | 
|  
 | 
| -
 | 
|  /// Implements the [Compiler] using a [api.CompilerInput] for supplying the
 | 
|  /// sources.
 | 
|  class CompilerImpl extends Compiler {
 | 
| @@ -50,21 +44,21 @@ class CompilerImpl extends Compiler {
 | 
|  
 | 
|    Uri get libraryRoot => options.platformConfigUri.resolve(".");
 | 
|  
 | 
| -  CompilerImpl(this.provider, api.CompilerOutput outputProvider,
 | 
| -      this.handler, CompilerOptions options)
 | 
| -      : super(options: options, outputProvider: outputProvider,
 | 
| -          environment: new _Environment(options.environment)) {
 | 
| +  CompilerImpl(this.provider, api.CompilerOutput outputProvider, this.handler,
 | 
| +      CompilerOptions options)
 | 
| +      : super(
 | 
| +            options: options,
 | 
| +            outputProvider: outputProvider,
 | 
| +            environment: new _Environment(options.environment)) {
 | 
|      _Environment env = environment;
 | 
|      env.compiler = this;
 | 
|      tasks.addAll([
 | 
| -        userHandlerTask = new GenericTask('Diagnostic handler', this),
 | 
| -        userProviderTask = new GenericTask('Input provider', this),
 | 
| -        userPackagesDiscoveryTask =
 | 
| -            new GenericTask('Package discovery', this),
 | 
| +      userHandlerTask = new GenericTask('Diagnostic handler', this),
 | 
| +      userProviderTask = new GenericTask('Input provider', this),
 | 
| +      userPackagesDiscoveryTask = new GenericTask('Package discovery', this),
 | 
|      ]);
 | 
|    }
 | 
|  
 | 
| -
 | 
|    void log(message) {
 | 
|      callUserHandler(
 | 
|          null, null, null, null, message, api.Diagnostic.VERBOSE_INFO);
 | 
| @@ -72,7 +66,7 @@ class CompilerImpl extends Compiler {
 | 
|  
 | 
|    /// See [Compiler.translateResolvedUri].
 | 
|    Uri translateResolvedUri(elements.LibraryElement importingLibrary,
 | 
| -                           Uri resolvedUri, Spannable spannable) {
 | 
| +      Uri resolvedUri, Spannable spannable) {
 | 
|      if (resolvedUri.scheme == 'dart') {
 | 
|        return translateDartUri(importingLibrary, resolvedUri, spannable);
 | 
|      }
 | 
| @@ -85,8 +79,8 @@ class CompilerImpl extends Compiler {
 | 
|    Future<Script> readScript(Uri readableUri, [Spannable node]) {
 | 
|      if (!readableUri.isAbsolute) {
 | 
|        if (node == null) node = NO_LOCATION_SPANNABLE;
 | 
| -      reporter.internalError(node,
 | 
| -          'Relative uri $readableUri provided to readScript(Uri).');
 | 
| +      reporter.internalError(
 | 
| +          node, 'Relative uri $readableUri provided to readScript(Uri).');
 | 
|      }
 | 
|  
 | 
|      // We need to store the current element since we are reporting read errors
 | 
| @@ -101,9 +95,7 @@ class CompilerImpl extends Compiler {
 | 
|              {'uri': readableUri, 'exception': exception});
 | 
|        } else {
 | 
|          reporter.withCurrentElement(element, () {
 | 
| -          reporter.reportErrorMessage(
 | 
| -              node,
 | 
| -              MessageKind.READ_SCRIPT_ERROR,
 | 
| +          reporter.reportErrorMessage(node, MessageKind.READ_SCRIPT_ERROR,
 | 
|                {'uri': readableUri, 'exception': exception});
 | 
|          });
 | 
|        }
 | 
| @@ -114,8 +106,7 @@ class CompilerImpl extends Compiler {
 | 
|      if (resourceUri.scheme == 'dart-ext') {
 | 
|        if (!options.allowNativeExtensions) {
 | 
|          reporter.withCurrentElement(element, () {
 | 
| -          reporter.reportErrorMessage(
 | 
| -              node, MessageKind.DART_EXT_NOT_SUPPORTED);
 | 
| +          reporter.reportErrorMessage(node, MessageKind.DART_EXT_NOT_SUPPORTED);
 | 
|          });
 | 
|        }
 | 
|        return _synthesizeScript(readableUri);
 | 
| @@ -132,7 +123,7 @@ class CompilerImpl extends Compiler {
 | 
|          sourceFile = new StringSourceFile.fromUri(resourceUri, data);
 | 
|        } else {
 | 
|          String message = "Expected a 'String' or a 'List<int>' from the input "
 | 
| -                         "provider, but got: ${Error.safeToString(data)}.";
 | 
| +            "provider, but got: ${Error.safeToString(data)}.";
 | 
|          reportReadError(message);
 | 
|        }
 | 
|        // We use [readableUri] as the URI for the script since need to preserve
 | 
| @@ -168,19 +159,16 @@ class CompilerImpl extends Compiler {
 | 
|    /// Internal libraries (whose name starts with '_') can be only resolved if
 | 
|    /// [importingLibrary] is a platform or patch library.
 | 
|    Uri translateDartUri(elements.LibraryElement importingLibrary,
 | 
| -                       Uri resolvedUri, Spannable spannable) {
 | 
| -
 | 
| +      Uri resolvedUri, Spannable spannable) {
 | 
|      Uri location = lookupLibraryUri(resolvedUri.path);
 | 
|  
 | 
|      if (location == null) {
 | 
| -      reporter.reportErrorMessage(
 | 
| -          spannable,
 | 
| -          MessageKind.LIBRARY_NOT_FOUND,
 | 
| +      reporter.reportErrorMessage(spannable, MessageKind.LIBRARY_NOT_FOUND,
 | 
|            {'resolvedUri': resolvedUri});
 | 
|        return null;
 | 
|      }
 | 
|  
 | 
| -    if (resolvedUri.path.startsWith('_')  ) {
 | 
| +    if (resolvedUri.path.startsWith('_')) {
 | 
|        bool allowInternalLibraryAccess = importingLibrary != null &&
 | 
|            (importingLibrary.isPlatformLibrary ||
 | 
|                importingLibrary.isPatch ||
 | 
| @@ -190,14 +178,12 @@ class CompilerImpl extends Compiler {
 | 
|        if (!allowInternalLibraryAccess) {
 | 
|          if (importingLibrary != null) {
 | 
|            reporter.reportErrorMessage(
 | 
| -              spannable,
 | 
| -              MessageKind.INTERNAL_LIBRARY_FROM,
 | 
| -              {'resolvedUri': resolvedUri,
 | 
| -                'importingUri': importingLibrary.canonicalUri});
 | 
| +              spannable, MessageKind.INTERNAL_LIBRARY_FROM, {
 | 
| +            'resolvedUri': resolvedUri,
 | 
| +            'importingUri': importingLibrary.canonicalUri
 | 
| +          });
 | 
|          } else {
 | 
| -          reporter.reportErrorMessage(
 | 
| -              spannable,
 | 
| -              MessageKind.INTERNAL_LIBRARY,
 | 
| +          reporter.reportErrorMessage(spannable, MessageKind.INTERNAL_LIBRARY,
 | 
|                {'resolvedUri': resolvedUri});
 | 
|            registerDisallowedLibraryUse(resolvedUri);
 | 
|          }
 | 
| @@ -206,16 +192,13 @@ class CompilerImpl extends Compiler {
 | 
|      }
 | 
|  
 | 
|      if (location.scheme == "unsupported") {
 | 
| -      reporter.reportErrorMessage(
 | 
| -          spannable,
 | 
| -          MessageKind.LIBRARY_NOT_SUPPORTED,
 | 
| +      reporter.reportErrorMessage(spannable, MessageKind.LIBRARY_NOT_SUPPORTED,
 | 
|            {'resolvedUri': resolvedUri});
 | 
|        registerDisallowedLibraryUse(resolvedUri);
 | 
|        return null;
 | 
|      }
 | 
|  
 | 
| -    if (resolvedUri.path == 'html' ||
 | 
| -        resolvedUri.path == 'io') {
 | 
| +    if (resolvedUri.path == 'html' || resolvedUri.path == 'io') {
 | 
|        // TODO(ahe): Get rid of mockableLibraryUsed when test.dart
 | 
|        // supports this use case better.
 | 
|        mockableLibraryUsed = true;
 | 
| @@ -227,24 +210,18 @@ class CompilerImpl extends Compiler {
 | 
|      try {
 | 
|        checkValidPackageUri(uri);
 | 
|      } on ArgumentError catch (e) {
 | 
| -      reporter.reportErrorMessage(
 | 
| -          node,
 | 
| -          MessageKind.INVALID_PACKAGE_URI,
 | 
| +      reporter.reportErrorMessage(node, MessageKind.INVALID_PACKAGE_URI,
 | 
|            {'uri': uri, 'exception': e.message});
 | 
|        return null;
 | 
|      }
 | 
| -    return packages.resolve(uri,
 | 
| -        notFound: (Uri notFound) {
 | 
| -          reporter.reportErrorMessage(
 | 
| -              node,
 | 
| -              MessageKind.LIBRARY_NOT_FOUND,
 | 
| -              {'resolvedUri': uri});
 | 
| -          return null;
 | 
| -        });
 | 
| +    return packages.resolve(uri, notFound: (Uri notFound) {
 | 
| +      reporter.reportErrorMessage(
 | 
| +          node, MessageKind.LIBRARY_NOT_FOUND, {'resolvedUri': uri});
 | 
| +      return null;
 | 
| +    });
 | 
|    }
 | 
|  
 | 
| -  Future<elements.LibraryElement> analyzeUri(
 | 
| -      Uri uri,
 | 
| +  Future<elements.LibraryElement> analyzeUri(Uri uri,
 | 
|        {bool skipLibraryWithPartOfTag: true}) {
 | 
|      List<Future> setupFutures = new List<Future>();
 | 
|      if (sdkLibraries == null) {
 | 
| @@ -254,8 +231,8 @@ class CompilerImpl extends Compiler {
 | 
|        setupFutures.add(setupPackages(uri));
 | 
|      }
 | 
|      return Future.wait(setupFutures).then((_) {
 | 
| -      return super.analyzeUri(uri,
 | 
| -          skipLibraryWithPartOfTag: skipLibraryWithPartOfTag);
 | 
| +      return super
 | 
| +          .analyzeUri(uri, skipLibraryWithPartOfTag: skipLibraryWithPartOfTag);
 | 
|      });
 | 
|    }
 | 
|  
 | 
| @@ -271,12 +248,11 @@ class CompilerImpl extends Compiler {
 | 
|          }
 | 
|          // The input provider may put a trailing 0 byte when it reads a source
 | 
|          // file, which confuses the package config parser.
 | 
| -        if (configContents.length > 0 &&
 | 
| -            configContents.last == 0) {
 | 
| +        if (configContents.length > 0 && configContents.last == 0) {
 | 
|            configContents = configContents.sublist(0, configContents.length - 1);
 | 
|          }
 | 
| -        packages = new MapPackages(
 | 
| -            pkgs.parse(configContents, options.packageConfig));
 | 
| +        packages =
 | 
| +            new MapPackages(pkgs.parse(configContents, options.packageConfig));
 | 
|        }).catchError((error) {
 | 
|          reporter.reportErrorMessage(
 | 
|              NO_LOCATION_SPANNABLE,
 | 
| @@ -298,7 +274,8 @@ class CompilerImpl extends Compiler {
 | 
|  
 | 
|    Future<Null> setupSdk() {
 | 
|      if (sdkLibraries == null) {
 | 
| -      return platform_configuration.load(options.platformConfigUri, provider)
 | 
| +      return platform_configuration
 | 
| +          .load(options.platformConfigUri, provider)
 | 
|            .then((Map<String, Uri> mapping) {
 | 
|          sdkLibraries = mapping;
 | 
|        });
 | 
| @@ -338,16 +315,15 @@ class CompilerImpl extends Compiler {
 | 
|    }
 | 
|  
 | 
|    void reportDiagnostic(DiagnosticMessage message,
 | 
| -                        List<DiagnosticMessage> infos,
 | 
| -                        api.Diagnostic kind) {
 | 
| +      List<DiagnosticMessage> infos, api.Diagnostic kind) {
 | 
|      _reportDiagnosticMessage(message, kind);
 | 
|      for (DiagnosticMessage info in infos) {
 | 
|        _reportDiagnosticMessage(info, api.Diagnostic.INFO);
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  void _reportDiagnosticMessage(DiagnosticMessage diagnosticMessage,
 | 
| -                                api.Diagnostic kind) {
 | 
| +  void _reportDiagnosticMessage(
 | 
| +      DiagnosticMessage diagnosticMessage, api.Diagnostic kind) {
 | 
|      // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For
 | 
|      // instance in the [Types] constructor in typechecker.dart.
 | 
|      SourceSpan span = diagnosticMessage.sourceSpan;
 | 
| @@ -364,7 +340,7 @@ class CompilerImpl extends Compiler {
 | 
|        mockableLibraryUsed && options.allowMockCompilation;
 | 
|  
 | 
|    void callUserHandler(Message message, Uri uri, int begin, int end,
 | 
| -                       String text, api.Diagnostic kind) {
 | 
| +      String text, api.Diagnostic kind) {
 | 
|      userHandlerTask.measure(() {
 | 
|        handler.report(message, uri, begin, end, text, kind);
 | 
|      });
 | 
| @@ -375,13 +351,13 @@ class CompilerImpl extends Compiler {
 | 
|    }
 | 
|  
 | 
|    Future<Packages> callUserPackagesDiscovery(Uri uri) {
 | 
| -    return userPackagesDiscoveryTask.measure(
 | 
| -        () => options.packagesDiscoveryProvider(uri));
 | 
| +    return userPackagesDiscoveryTask
 | 
| +        .measure(() => options.packagesDiscoveryProvider(uri));
 | 
|    }
 | 
|  
 | 
|    Uri lookupLibraryUri(String libraryName) {
 | 
| -    assert(invariant(NO_LOCATION_SPANNABLE,
 | 
| -        sdkLibraries != null, message: "setupSdk() has not been run"));
 | 
| +    assert(invariant(NO_LOCATION_SPANNABLE, sdkLibraries != null,
 | 
| +        message: "setupSdk() has not been run"));
 | 
|      return sdkLibraries[libraryName];
 | 
|    }
 | 
|  
 | 
| @@ -401,8 +377,8 @@ class _Environment implements Environment {
 | 
|    _Environment(this.definitions);
 | 
|  
 | 
|    String valueOf(String name) {
 | 
| -    assert(invariant(NO_LOCATION_SPANNABLE,
 | 
| -        compiler.sdkLibraries != null, message: "setupSdk() has not been run"));
 | 
| +    assert(invariant(NO_LOCATION_SPANNABLE, compiler.sdkLibraries != null,
 | 
| +        message: "setupSdk() has not been run"));
 | 
|  
 | 
|      var result = definitions[name];
 | 
|      if (result != null || definitions.containsKey(name)) return result;
 | 
| 
 |