[analyzer] Accept optional FileContentCache in `build_resolvers.dart`.

The default `FileContentCache.ephemeral` reads files as bytes then
converts them to `String` and hashes them. `build_runner` does the
same, so by injecting a `FileContentCache` it can deduplicate the
work.

R=scheglov@google.com

Change-Id: Id046fee8c98263719098c77981bbe10bd1b84658
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/408701
Commit-Queue: Morgan :) <davidmorgan@google.com>
Auto-Submit: Morgan :) <davidmorgan@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
index 30935f0..828948f 100644
--- a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
+++ b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/src/dart/analysis/analysis_options_map.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_content_cache.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
@@ -41,6 +42,7 @@
   required ResourceProvider resourceProvider,
   required Uint8List sdkSummaryBytes,
   required AnalysisOptions analysisOptions,
+  FileContentCache? fileContentCache,
   required List<UriResolver> uriResolvers,
   required Packages packages,
   ByteStore? byteStore,
@@ -67,6 +69,7 @@
     byteStore: byteStore ?? MemoryByteStore(),
     sourceFactory: sourceFactory,
     analysisOptionsMap: optionsMap,
+    fileContentCache: fileContentCache,
     externalSummaries: dataStore,
     packages: packages,
     shouldReportInconsistentAnalysisException: false,