| Index: pkg/code_transformers/lib/src/resolver_impl.dart
 | 
| ===================================================================
 | 
| --- pkg/code_transformers/lib/src/resolver_impl.dart	(revision 37373)
 | 
| +++ pkg/code_transformers/lib/src/resolver_impl.dart	(working copy)
 | 
| @@ -5,15 +5,13 @@
 | 
|  library code_transformer.src.resolver_impl;
 | 
|  
 | 
|  import 'dart:async';
 | 
| -import 'package:analyzer/analyzer.dart' show parseCompilationUnit;
 | 
| +import 'package:analyzer/analyzer.dart' show parseDirectives;
 | 
|  import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator;
 | 
|  import 'package:analyzer/src/generated/constant.dart' show ConstantEvaluator,
 | 
|         EvaluationResult;
 | 
|  import 'package:analyzer/src/generated/element.dart';
 | 
|  import 'package:analyzer/src/generated/engine.dart';
 | 
| -import 'package:analyzer/src/generated/java_io.dart';
 | 
|  import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
 | 
| -import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk;
 | 
|  import 'package:analyzer/src/generated/source.dart';
 | 
|  import 'package:barback/barback.dart';
 | 
|  import 'package:code_transformers/assets.dart';
 | 
| @@ -22,6 +20,7 @@
 | 
|  import 'package:source_maps/span.dart' show SourceFile, Span;
 | 
|  
 | 
|  import 'resolver.dart';
 | 
| +import 'dart_sdk.dart' show UriAnnotatedSource;
 | 
|  
 | 
|  // We should always be using url paths here since it's always Dart/pub code.
 | 
|  final path = native_path.url;
 | 
| @@ -51,12 +50,10 @@
 | 
|    /// Completer for wrapping up the current phase.
 | 
|    Completer _currentPhaseComplete;
 | 
|  
 | 
| -  /// Handler for all Dart SDK (dart:) sources.
 | 
| -  DirectoryBasedDartSdk _dartSdk;
 | 
| -
 | 
| -  /// Creates a resolver, where [sdkDir] is the root directory of the Dart SDK,
 | 
| -  /// for resolving `dart:*` imports.
 | 
| -  ResolverImpl(String sdkDir, {AnalysisOptions options}) {
 | 
| +  /// Creates a resolver with a given [sdk] implementation for resolving
 | 
| +  /// `dart:*` imports.
 | 
| +  ResolverImpl(DartSdk sdk, DartUriResolver dartUriResolver,
 | 
| +      {AnalysisOptions options}) {
 | 
|      if (options == null) {
 | 
|        options = new AnalysisOptionsImpl()
 | 
|          ..cacheSize = 256 // # of sources to cache ASTs for.
 | 
| @@ -64,12 +61,8 @@
 | 
|          ..analyzeFunctionBodies = true;
 | 
|      }
 | 
|      _context.analysisOptions = options;
 | 
| -
 | 
| -    _dartSdk = new _DirectoryBasedDartSdkProxy(new JavaFile(sdkDir));
 | 
| -    _dartSdk.context.analysisOptions = options;
 | 
| -
 | 
| -    _context.sourceFactory = new SourceFactory([
 | 
| -        new DartUriResolverProxy(_dartSdk),
 | 
| +    sdk.context.analysisOptions = options;
 | 
| +    _context.sourceFactory = new SourceFactory([dartUriResolver,
 | 
|          new _AssetUriResolver(this)]);
 | 
|    }
 | 
|  
 | 
| @@ -248,7 +241,7 @@
 | 
|      var source = element.source;
 | 
|      if (source is _AssetBasedSource) {
 | 
|        return source.getSourceUri(from);
 | 
| -    } else if (source is _DartSourceProxy) {
 | 
| +    } else if (source is UriAnnotatedSource) {
 | 
|        return source.uri;
 | 
|      }
 | 
|      // Should not be able to encounter any other source types.
 | 
| @@ -320,7 +313,7 @@
 | 
|    /// any analyzer resolution.
 | 
|    void updateDependencies(String contents) {
 | 
|      if (contents == _contents) return;
 | 
| -    var unit = parseCompilationUnit(contents, suppressErrors: true);
 | 
| +    var unit = parseDirectives(contents, suppressErrors: true);
 | 
|      _dependentAssets = unit.directives
 | 
|          .where((d) => (d is ImportDirective || d is PartDirective ||
 | 
|              d is ExportDirective))
 | 
| @@ -453,86 +446,6 @@
 | 
|    TransformLogger get logger => _resolver._currentTransform.logger;
 | 
|  }
 | 
|  
 | 
| -
 | 
| -/// Dart SDK which wraps all Dart sources to ensure they are tracked with Uris.
 | 
| -///
 | 
| -/// Just a simple wrapper to make it easy to make sure that all sources we
 | 
| -/// encounter are either _AssetBasedSource or _DartSourceProxy.
 | 
| -class _DirectoryBasedDartSdkProxy extends DirectoryBasedDartSdk {
 | 
| -  _DirectoryBasedDartSdkProxy(JavaFile sdkDirectory) : super(sdkDirectory);
 | 
| -
 | 
| -  Source mapDartUri(String dartUri) =>
 | 
| -      _DartSourceProxy.wrap(super.mapDartUri(dartUri), Uri.parse(dartUri));
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/// Dart SDK resolver which wraps all Dart sources to ensure they are tracked
 | 
| -/// with URIs.
 | 
| -class DartUriResolverProxy implements DartUriResolver {
 | 
| -  final DartUriResolver _proxy;
 | 
| -  DartUriResolverProxy(DirectoryBasedDartSdk sdk) :
 | 
| -      _proxy = new DartUriResolver(sdk);
 | 
| -
 | 
| -  Source resolveAbsolute(Uri uri) =>
 | 
| -    _DartSourceProxy.wrap(_proxy.resolveAbsolute(uri), uri);
 | 
| -
 | 
| -  DartSdk get dartSdk => _proxy.dartSdk;
 | 
| -
 | 
| -  Source fromEncoding(UriKind kind, Uri uri) =>
 | 
| -      throw new UnsupportedError('fromEncoding is not supported');
 | 
| -
 | 
| -  Uri restoreAbsolute(Source source) =>
 | 
| -      throw new UnsupportedError('restoreAbsolute is not supported');
 | 
| -}
 | 
| -
 | 
| -/// Source file for dart: sources which track the sources with dart: URIs.
 | 
| -///
 | 
| -/// This is primarily to support [Resolver.getImportUri] for Dart SDK (dart:)
 | 
| -/// based libraries.
 | 
| -class _DartSourceProxy implements Source {
 | 
| -
 | 
| -  /// Absolute URI which this source can be imported from
 | 
| -  final Uri uri;
 | 
| -
 | 
| -  /// Underlying source object.
 | 
| -  final Source _proxy;
 | 
| -
 | 
| -  _DartSourceProxy(this._proxy, this.uri);
 | 
| -
 | 
| -  /// Ensures that [source] is a _DartSourceProxy.
 | 
| -  static _DartSourceProxy wrap(Source source, Uri uri) {
 | 
| -    if (source == null || source is _DartSourceProxy) return source;
 | 
| -    return new _DartSourceProxy(source, uri);
 | 
| -  }
 | 
| -
 | 
| -  Source resolveRelative(Uri relativeUri) {
 | 
| -    // Assume that the type can be accessed via this URI, since these
 | 
| -    // should only be parts for dart core files.
 | 
| -    return wrap(_proxy.resolveRelative(relativeUri), uri);
 | 
| -  }
 | 
| -
 | 
| -  bool exists() => _proxy.exists();
 | 
| -
 | 
| -  bool operator ==(Object other) =>
 | 
| -    (other is _DartSourceProxy && _proxy == other._proxy);
 | 
| -
 | 
| -  int get hashCode => _proxy.hashCode;
 | 
| -
 | 
| -  TimestampedData<String> get contents => _proxy.contents;
 | 
| -
 | 
| -  String get encoding => _proxy.encoding;
 | 
| -
 | 
| -  String get fullName => _proxy.fullName;
 | 
| -
 | 
| -  int get modificationStamp => _proxy.modificationStamp;
 | 
| -
 | 
| -  String get shortName => _proxy.shortName;
 | 
| -
 | 
| -  UriKind get uriKind => _proxy.uriKind;
 | 
| -
 | 
| -  bool get isInSystemLibrary => _proxy.isInSystemLibrary;
 | 
| -}
 | 
| -
 | 
|  /// Get an asset ID for a URL relative to another source asset.
 | 
|  AssetId _resolve(AssetId source, String url, TransformLogger logger,
 | 
|      Span span) {
 | 
| 
 |