Chromium Code Reviews| Index: pkg/analyzer/lib/src/summary/summary_sdk.dart |
| diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart |
| index 56dbb27794619c341cd681e231bdeda6e145753c..740abf7195507dc54ea58d0248689d17b0eca3ea 100644 |
| --- a/pkg/analyzer/lib/src/summary/summary_sdk.dart |
| +++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart |
| @@ -13,9 +13,11 @@ import 'package:analyzer/src/dart/element/type.dart'; |
| import 'package:analyzer/src/generated/constant.dart'; |
| import 'package:analyzer/src/generated/engine.dart'; |
| import 'package:analyzer/src/generated/resolver.dart'; |
| +import 'package:analyzer/src/generated/sdk.dart'; |
| import 'package:analyzer/src/generated/source.dart' |
| - show Source, SourceFactory, SourceKind; |
| + show DartUriResolver, Source, SourceFactory, SourceKind; |
| import 'package:analyzer/src/summary/idl.dart'; |
| +import 'package:analyzer/src/summary/package_bundle_reader.dart'; |
| import 'package:analyzer/src/summary/resynthesize.dart'; |
| import 'package:analyzer/src/task/dart.dart'; |
| import 'package:analyzer/task/dart.dart'; |
| @@ -190,6 +192,78 @@ class SdkSummaryResynthesizer extends SummaryResynthesizer { |
| } |
| /** |
| + * An implementation of [DartSdk] which provides analysis results for `dart:` |
| + * libraries from the given summary file. This implementation is limited and |
| + * suitable only for command-line tools, but not for IDEs. |
|
Brian Wilkerson
2016/05/13 18:07:59
It would be good to expand this comment by explain
|
| + */ |
| +class SummaryBasedDartSdk implements DartSdk { |
| + SummaryDataStore _dataStore; |
| + InSummaryPackageUriResolver _uriResolver; |
| + PackageBundle _bundle; |
| + |
| + /** |
| + * The [AnalysisContext] which is used for all of the sources in this sdk. |
| + */ |
| + InternalAnalysisContext _analysisContext; |
| + |
| + SummaryBasedDartSdk(String summaryPath) { |
| + _dataStore = new SummaryDataStore(<String>[summaryPath]); |
| + _uriResolver = new InSummaryPackageUriResolver(_dataStore); |
| + _bundle = _dataStore.bundles.single; |
| + } |
| + |
| + /** |
| + * Return the [PackageBundle] for this SDK, not `null`. |
| + */ |
| + PackageBundle get bundle => _bundle; |
| + |
| + @override |
| + AnalysisContext get context { |
| + if (_analysisContext == null) { |
| + _analysisContext = new SdkAnalysisContext(null); |
| + SourceFactory factory = new SourceFactory([new DartUriResolver(this)]); |
| + _analysisContext.sourceFactory = factory; |
| + _analysisContext.resultProvider = |
| + new SdkSummaryResultProvider(_analysisContext, _bundle); |
| + } |
| + return _analysisContext; |
| + } |
| + |
| + @override |
| + List<SdkLibrary> get sdkLibraries { |
| + throw new UnimplementedError(); |
| + } |
| + |
| + @override |
| + String get sdkVersion { |
| + throw new UnimplementedError(); |
| + } |
| + |
| + @override |
| + List<String> get uris { |
| + throw new UnimplementedError(); |
| + } |
| + |
| + @override |
| + Source fromFileUri(Uri uri) { |
| + return null; |
| + } |
| + |
| + @override |
| + SdkLibrary getSdkLibrary(String uri) { |
| + // This is not quite correct, but currently it's used only in |
| + // to report errors on importing or exporting of internal libraries. |
| + return null; |
| + } |
| + |
| + @override |
| + Source mapDartUri(String uriStr) { |
| + Uri uri = Uri.parse(uriStr); |
| + return _uriResolver.resolveAbsolute(uri); |
| + } |
| +} |
| + |
| +/** |
| * Provider for analysis results. |
| */ |
| abstract class SummaryResultProvider extends ResultProvider { |