Dart deps_pruning: track summary dependencies during analysis phase.
(Originally written by Emmanuel Pellereau (emmanuelp@google.com))
Change-Id: I61983558cbb88b76be2a292080e96c0bf3f780de
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98680
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index ca4002a..b2e0dfb 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -312,18 +312,21 @@
}
}
+ ErrorSeverity severity;
+ if (options.buildSummaryOnly) {
+ severity = ErrorSeverity.NONE;
+ } else {
+ // Process errors.
+ await _printErrors(outputPath: options.buildAnalysisOutput);
+ severity = await _computeMaxSeverity();
+ }
+
if (dependencyTracker != null) {
io.File file = new io.File(dependencyTracker.outputPath);
file.writeAsStringSync(dependencyTracker.dependencies.join('\n'));
}
- if (options.buildSummaryOnly) {
- return ErrorSeverity.NONE;
- } else {
- // Process errors.
- await _printErrors(outputPath: options.buildAnalysisOutput);
- return await _computeMaxSeverity();
- }
+ return severity;
});
}
@@ -446,7 +449,9 @@
var sourceFactory = new SourceFactory(<UriResolver>[
new DartUriResolver(sdk),
- new InSummaryUriResolver(resourceProvider, summaryDataStore),
+ new TrackingInSummaryUriResolver(
+ new InSummaryUriResolver(resourceProvider, summaryDataStore),
+ dependencyTracker),
new ExplicitSourceResolver(uriToFileMap)
]);
@@ -739,3 +744,26 @@
return cache.get(inputs, path);
}
}
+
+/**
+ * Wrapper for [InSummaryUriResolver] that tracks accesses to summaries.
+ */
+class TrackingInSummaryUriResolver extends UriResolver {
+ // May be null.
+ final DependencyTracker dependencyTracker;
+ final InSummaryUriResolver inSummaryUriResolver;
+
+ TrackingInSummaryUriResolver(
+ this.inSummaryUriResolver, this.dependencyTracker);
+
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+ var source = inSummaryUriResolver.resolveAbsolute(uri, actualUri);
+ if (dependencyTracker != null &&
+ source != null &&
+ source is InSummarySource) {
+ dependencyTracker.record(source.summaryPath);
+ }
+ return source;
+ }
+}