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

Side by Side Diff: pkg/analyzer/lib/src/summary/bazel_summary.dart

Issue 2386463002: Add BazelResultProvider for on-demand packages loading. (Closed)
Patch Set: Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/bazel_summary_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:convert'; 5 import 'dart:convert';
6 6
7 import 'package:analyzer/file_system/file_system.dart'; 7 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/src/generated/engine.dart'; 8 import 'package:analyzer/src/generated/engine.dart';
9 import 'package:analyzer/src/generated/source.dart'; 9 import 'package:analyzer/src/generated/source.dart';
10 import 'package:analyzer/src/generated/utilities_collection.dart'; 10 import 'package:analyzer/src/generated/utilities_collection.dart';
11 import 'package:analyzer/src/summary/format.dart'; 11 import 'package:analyzer/src/summary/format.dart';
12 import 'package:analyzer/src/summary/idl.dart'; 12 import 'package:analyzer/src/summary/idl.dart';
13 import 'package:analyzer/src/summary/link.dart'; 13 import 'package:analyzer/src/summary/link.dart';
14 import 'package:analyzer/src/summary/package_bundle_reader.dart'; 14 import 'package:analyzer/src/summary/package_bundle_reader.dart';
15 import 'package:analyzer/src/summary/summarize_elements.dart'; 15 import 'package:analyzer/src/summary/summarize_elements.dart';
16 import 'package:analyzer/src/util/fast_uri.dart'; 16 import 'package:analyzer/src/util/fast_uri.dart';
17 import 'package:convert/convert.dart'; 17 import 'package:convert/convert.dart';
18 import 'package:crypto/crypto.dart'; 18 import 'package:crypto/crypto.dart';
19 import 'package:meta/meta.dart'; 19 import 'package:meta/meta.dart';
20 20
21 /** 21 /**
22 * Return the [Folder] where bundles for the given [absoluteUri] should be 22 * Return the [Folder] where bundles for the given [absoluteUri] should be
23 * looked for. This folder should contain corresponding `*.full.ds` files, 23 * looked for. This folder should contain corresponding `*.full.ds` files,
24 * possibly more than one one. Return `null` if the given [absoluteUri] 24 * possibly more than one one. Return `null` if the given [absoluteUri]
25 * does not have the expected structure, so the output path cannot be computed. 25 * does not have the expected structure, so the output path cannot be computed.
26 */ 26 */
27 typedef Folder GetOutputFolder(Uri absoluteUri); 27 typedef Folder GetOutputFolder(Uri absoluteUri);
28 28
29 /** 29 /**
30 * Load linked packages on demand from [SummaryProvider].
31 */
32 class BazelResultProvider extends ResynthesizerResultProvider {
33 final SummaryDataStore dataStore;
34 final SummaryProvider summaryProvider;
35
36 final Map<Source, bool> sourceToSuccessMap = <Source, bool>{};
37 final Set<Package> addedPackages = new Set<Package>();
38
39 factory BazelResultProvider(SummaryProvider summaryProvider) {
40 SummaryDataStore dataStore = new SummaryDataStore(const <String>[]);
41 return new BazelResultProvider._(
42 summaryProvider.context, dataStore, summaryProvider);
43 }
44
45 BazelResultProvider._(InternalAnalysisContext context,
Brian Wilkerson 2016/09/29 21:54:07 Should the context always be the same as the one i
46 SummaryDataStore dataStore, this.summaryProvider)
47 : dataStore = dataStore,
48 super(context, dataStore) {
49 AnalysisContext sdkContext = context.sourceFactory.dartSdk.context;
50 createResynthesizer(sdkContext, sdkContext.typeProvider);
51 }
52
53 @override
54 bool hasResultsForSource(Source source) {
55 return sourceToSuccessMap.putIfAbsent(source, () {
56 List<Package> packages = summaryProvider.getLinkedPackages(source);
57 if (packages == null) {
58 return false;
59 }
60 for (Package package in packages) {
61 if (addedPackages.add(package)) {
62 dataStore.addBundle(null, package.unlinked);
63 dataStore.addBundle(null, package.linked);
64 }
65 }
66 String uriString = source.uri.toString();
67 return resynthesizer.hasLibrarySummary(uriString);
68 });
69 }
70 }
71
72 /**
30 * Information about a Dart package in Bazel. 73 * Information about a Dart package in Bazel.
31 */ 74 */
32 class Package { 75 class Package {
33 final File unlinkedFile; 76 final File unlinkedFile;
34 final PackageBundle unlinked; 77 final PackageBundle unlinked;
35 final Set<String> _unitUris = new Set<String>(); 78 final Set<String> _unitUris = new Set<String>();
36 79
37 PackageBundle _linked; 80 PackageBundle _linked;
38 81
39 Package(this.unlinkedFile, this.unlinked) { 82 Package(this.unlinkedFile, this.unlinked) {
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 appendDependencies(this); 402 appendDependencies(this);
360 if (transitiveDependencies.any((node) => node.failed)) { 403 if (transitiveDependencies.any((node) => node.failed)) {
361 failed = true; 404 failed = true;
362 } 405 }
363 } 406 }
364 } 407 }
365 408
366 @override 409 @override
367 String toString() => package.toString(); 410 String toString() => package.toString();
368 } 411 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/bazel_summary_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698