Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Unified Diff: packages/code_transformers/lib/src/resolvers.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: packages/code_transformers/lib/src/resolvers.dart
diff --git a/packages/code_transformers/lib/src/resolvers.dart b/packages/code_transformers/lib/src/resolvers.dart
index fa2f953cdd1d88db33b0ce8332c0e8491e5e5796..96b5df7c7e9b7cfe8ef9b364b14ed438e9071eae 100644
--- a/packages/code_transformers/lib/src/resolvers.dart
+++ b/packages/code_transformers/lib/src/resolvers.dart
@@ -7,8 +7,10 @@ library code_transformers.src.resolvers;
import 'dart:async';
import 'package:barback/barback.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisOptions;
import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
+import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart' show DartUriResolver;
import 'entry_point.dart';
@@ -25,22 +27,25 @@ import 'dart_sdk.dart' hide dartSdkDirectory;
/// If multiple transformers rely on a resolved AST they should (ideally) share
/// the same Resolvers object to minimize re-parsing the AST.
class Resolvers {
- final Map<AssetId, Resolver> _resolvers = {};
- final DartSdk dartSdk;
- final DartUriResolver dartUriResolver;
- final AnalysisOptions options;
+ final Resolver _resolver;
- Resolvers.fromSdk(this.dartSdk, this.dartUriResolver, {this.options});
+ Resolvers.fromSdk(DartSdk dartSdk, DartUriResolver dartUriResolver,
+ {AnalysisOptions options})
+ : _resolver =
+ new ResolverImpl(dartSdk, dartUriResolver, options: options);
- factory Resolvers(dartSdkDirectory, {AnalysisOptions options}) {
- var sdk = new DirectoryBasedDartSdkProxy(dartSdkDirectory);
+ factory Resolvers(String dartSdkDirectory, {AnalysisOptions options}) {
+ _initAnalysisEngine();
+ var sdk = new FolderBasedDartSdkProxy(
+ PhysicalResourceProvider.INSTANCE, dartSdkDirectory);
var uriResolver = new DartUriResolverProxy(sdk);
return new Resolvers.fromSdk(sdk, uriResolver, options: options);
}
factory Resolvers.fromMock(Map<String, String> sources,
{bool reportMissing: false, AnalysisOptions options}) {
- var sdk = new MockDartSdk(sources, reportMissing: reportMissing);
+ _initAnalysisEngine();
+ var sdk = new MockDartSdk(sources, options, reportMissing: reportMissing);
return new Resolvers.fromSdk(sdk, sdk.resolver, options: options);
}
@@ -51,12 +56,11 @@ class Resolvers {
/// [Resolver.release] must be called once it's done being used, or
/// [ResolverTransformer] should be used to automatically release the
/// resolver.
- Future<Resolver> get(Transform transform, [List<AssetId> entryPoints]) {
- var id = transform.primaryInput.id;
- var resolver = _resolvers.putIfAbsent(
- id, () => new ResolverImpl(dartSdk, dartUriResolver, options: options));
- return resolver.resolve(transform, entryPoints);
- }
+ ///
+ /// See [Resolver#resolve] for more info on the `resolveAllLibraries` option.
+ Future<Resolver> get(Transform transform,
+ [List<AssetId> entryPoints, bool resolveAllLibraries]) =>
+ _resolver.resolve(transform, entryPoints, resolveAllLibraries);
}
/// Transformer mixin which automatically gets and releases resolvers.
@@ -67,14 +71,17 @@ abstract class ResolverTransformer implements Transformer {
/// The cache of resolvers- must be set from subclass.
Resolvers resolvers;
- /// By default only process prossible entry point assets.
+ /// See [Resolver#resolve] for more info - can be overridden by a subclass.
+ bool get resolveAllLibraries => true;
+
+ /// By default only process possible entry point assets.
///
/// This is only a preliminary check based on the asset ID.
Future<bool> isPrimary(assetOrId) {
// assetOrId is to handle the transition from Asset to AssetID between
// pub 1.3 and 1.4. Once support for 1.3 is dropped this should only
// support AssetId.
- var id = assetOrId is AssetId ? assetOrId : assetOrId.id;
+ var id = assetOrId is AssetId ? assetOrId : (assetOrId as Asset).id;
return new Future.value(isPossibleDartEntryId(id));
}
@@ -95,8 +102,8 @@ abstract class ResolverTransformer implements Transformer {
/// to run the resolver on.
Future apply(Transform transform) =>
shouldApplyResolver(transform.primaryInput).then((result) {
- if (result) return applyToEntryPoints(transform);
- });
+ if (result) return applyToEntryPoints(transform);
+ });
/// Helper function to make it easy to write an `Transformer.apply` method
/// that automatically gets and releases the resolver. This is typically used
@@ -107,9 +114,11 @@ abstract class ResolverTransformer implements Transformer {
/// return applyToEntryPoints(transform, entryPoints);
/// }
Future applyToEntryPoints(Transform transform, [List<AssetId> entryPoints]) {
- return resolvers.get(transform, entryPoints).then((resolver) {
- return new Future(() => applyResolver(transform, resolver)).whenComplete(
- () {
+ return resolvers
+ .get(transform, entryPoints, resolveAllLibraries)
+ .then((resolver) {
+ return new Future(() => applyResolver(transform, resolver))
+ .whenComplete(() {
resolver.release();
});
});
@@ -120,3 +129,10 @@ abstract class ResolverTransformer implements Transformer {
/// Return a Future to indicate when apply is completed.
applyResolver(Transform transform, Resolver resolver);
}
+
+bool _analysisEngineInitialized = false;
+_initAnalysisEngine() {
+ if (_analysisEngineInitialized) return;
+ _analysisEngineInitialized = true;
+ AnalysisEngine.instance.processRequiredPlugins();
+}
« no previous file with comments | « packages/code_transformers/lib/src/resolver_impl.dart ('k') | packages/code_transformers/lib/src/test_harness.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698