Index: pkg/analyzer/lib/src/summary/package_bundle_reader.dart |
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart |
index 062ce82466032020f5e85ac5978e60a079f4c9d2..f56557ea236aba0f1e2ab75bb28f4c65032adbfe 100644 |
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart |
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart |
@@ -10,6 +10,7 @@ import 'package:analyzer/src/generated/resolver.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/generated/source_io.dart'; |
import 'package:analyzer/src/generated/utilities_dart.dart'; |
+import 'package:analyzer/src/summary/format.dart'; |
import 'package:analyzer/src/summary/idl.dart'; |
import 'package:analyzer/src/summary/resynthesize.dart'; |
import 'package:analyzer/src/task/dart.dart'; |
@@ -273,6 +274,15 @@ class SummaryDataStore { |
final List<PackageBundle> bundles = <PackageBundle>[]; |
/** |
+ * List of dependency information for the package bundles in this |
+ * [SummaryDataStore], in a form that is ready to store in a newly generated. |
scheglov
2016/08/09 02:39:44
Extra '.' at the end.
Paul Berry
2016/08/09 16:30:30
Fixed.
|
+ * summary. Computing this information has nonzero cost, so it is only |
+ * recorded if the [SummaryDataStore] is constructed with the argument |
+ * `recordDependencies`. Otherwise `null`. |
+ */ |
+ final List<PackageDependencyInfoBuilder> dependencies; |
+ |
+ /** |
* Map from the URI of a compilation unit to the unlinked summary of that |
* compilation unit. |
*/ |
@@ -288,7 +298,16 @@ class SummaryDataStore { |
*/ |
final Map<String, String> uriToSummaryPath = <String, String>{}; |
- SummaryDataStore(Iterable<String> summaryPaths) { |
+ /** |
+ * Create a [SummaryDataStore] and populate it with the summaries in |
+ * [summaryPaths]. If [recordDependencyInfo] is `true`, record |
+ * [PackageDependencyInfo] for each summary, for later access via |
+ * [dependencies]. |
+ */ |
+ SummaryDataStore(Iterable<String> summaryPaths, |
+ {bool recordDependencyInfo: false}) |
+ : dependencies = |
+ recordDependencyInfo ? <PackageDependencyInfoBuilder>[] : null { |
summaryPaths.forEach(_fillMaps); |
} |
@@ -297,6 +316,29 @@ class SummaryDataStore { |
*/ |
void addBundle(String path, PackageBundle bundle) { |
bundles.add(bundle); |
+ if (dependencies != null) { |
+ Set<String> includedPackageNames = new Set<String>(); |
+ bool includesDartUris = false; |
+ bool includesFileUris = false; |
+ for (String uriString in bundle.unlinkedUnitUris) { |
+ Uri uri = FastUri.parse(uriString); |
+ String scheme = uri.scheme; |
+ if (scheme == 'package') { |
+ List<String> pathSegments = uri.pathSegments; |
+ includedPackageNames.add(pathSegments.isEmpty ? '' : pathSegments[0]); |
+ } else if (scheme == 'file') { |
+ includesFileUris = true; |
+ } else if (scheme == 'dart') { |
+ includesDartUris = true; |
+ } |
+ } |
+ dependencies.add(new PackageDependencyInfoBuilder( |
+ includedPackageNames: includedPackageNames.toList()..sort(), |
+ includesDartUris: includesDartUris, |
+ includesFileUris: includesFileUris, |
+ apiSignature: bundle.apiSignature, |
+ summaryPath: path)); |
+ } |
for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) { |
String uri = bundle.unlinkedUnitUris[i]; |
uriToSummaryPath[uri] = path; |