| Index: dart/pkg/code_transformers/lib/src/resolver_impl.dart
|
| ===================================================================
|
| --- dart/pkg/code_transformers/lib/src/resolver_impl.dart (revision 37358)
|
| +++ dart/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) {
|
|
|