[bazel/kernel_worker] Only workers use incremental compiler; require digest

Change-Id: Iff4b45ffba79a05ce829ed73d952937ae55624d3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101282
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Jake Macdonald <jakemac@google.com>
diff --git a/pkg/front_end/lib/src/api_unstable/bazel_worker.dart b/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
index 1e74242..fa64f22 100644
--- a/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
+++ b/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
@@ -55,7 +55,10 @@
     Target target,
     FileSystem fileSystem,
     bool outlineOnly) async {
-  List<int> sdkDigest = workerInputDigests[sdkSummary];
+  final List<int> sdkDigest = workerInputDigests[sdkSummary];
+  if (sdkDigest == null) {
+    throw new StateError("Expected to get digest for $sdkSummary");
+  }
   IncrementalCompiler incrementalCompiler;
   CompilerOptions options;
   ProcessedOptions processedOpts;
@@ -73,7 +76,7 @@
     // We do have a previous state.
     cachedSdkInput = workerInputCache[sdkSummary];
     if (cachedSdkInput == null ||
-        !digestsEqual(cachedSdkInput.digest, workerInputDigests[sdkSummary])) {
+        !digestsEqual(cachedSdkInput.digest, sdkDigest)) {
       // The sdk is out of date.
       startOver = true;
     }
@@ -102,7 +105,6 @@
   } else {
     options = oldState.options;
     processedOpts = oldState.processedOpts;
-
     var sdkComponent = cachedSdkInput.component;
     // Reset the state of the component.
     for (var lib in sdkComponent.libraries) {
@@ -127,6 +129,9 @@
   for (Uri summary in summaryInputs) {
     var cachedInput = workerInputCache[summary];
     var summaryDigest = workerInputDigests[summary];
+    if (summaryDigest == null) {
+      throw new StateError("Expected to get digest for $summary");
+    }
     if (cachedInput == null ||
         cachedInput.component.root != nameRoot ||
         !digestsEqual(cachedInput.digest, summaryDigest)) {
@@ -145,7 +150,10 @@
 
   for (int i = 0; i < loadFromDill.length; i++) {
     Uri summary = loadFromDill[i];
-    var summaryDigest = workerInputDigests[summary];
+    List<int> summaryDigest = workerInputDigests[summary];
+    if (summaryDigest == null) {
+      throw new StateError("Expected to get digest for $summary");
+    }
     WorkerInputComponent cachedInput = WorkerInputComponent(
         summaryDigest,
         await processedOpts.loadComponent(
@@ -193,7 +201,7 @@
 
 Future<CompilerResult> _compile(InitializedCompilerState compilerState,
     List<Uri> inputs, DiagnosticMessageHandler diagnosticMessageHandler,
-    {bool summaryOnly}) {
+    {bool summaryOnly, bool includeOffsets: true}) {
   summaryOnly ??= true;
   CompilerOptions options = compilerState.options;
   options..onDiagnostic = diagnosticMessageHandler;
@@ -203,13 +211,16 @@
   processedOpts.inputs.addAll(inputs);
 
   return generateKernel(processedOpts,
-      buildSummary: summaryOnly, buildComponent: !summaryOnly);
+      buildSummary: summaryOnly,
+      buildComponent: !summaryOnly,
+      includeOffsets: includeOffsets);
 }
 
 Future<List<int>> compileSummary(InitializedCompilerState compilerState,
-    List<Uri> inputs, DiagnosticMessageHandler diagnosticMessageHandler) async {
+    List<Uri> inputs, DiagnosticMessageHandler diagnosticMessageHandler,
+    {bool includeOffsets: false}) async {
   var result = await _compile(compilerState, inputs, diagnosticMessageHandler,
-      summaryOnly: true);
+      summaryOnly: true, includeOffsets: includeOffsets);
   return result?.summary;
 }
 
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 0a4fad1..f967227 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -35,19 +35,22 @@
 Future<CompilerResult> generateKernel(ProcessedOptions options,
     {bool buildSummary: false,
     bool buildComponent: true,
-    bool truncateSummary: false}) async {
+    bool truncateSummary: false,
+    bool includeOffsets: true}) async {
   return await CompilerContext.runWithOptions(options, (_) async {
     return await generateKernelInternal(
         buildSummary: buildSummary,
         buildComponent: buildComponent,
-        truncateSummary: truncateSummary);
+        truncateSummary: truncateSummary,
+        includeOffsets: includeOffsets);
   });
 }
 
 Future<CompilerResult> generateKernelInternal(
     {bool buildSummary: false,
     bool buildComponent: true,
-    bool truncateSummary: false}) async {
+    bool truncateSummary: false,
+    bool includeOffsets: true}) async {
   var options = CompilerContext.current.options;
   var fs = options.fileSystem;
 
@@ -138,8 +141,8 @@
         options.ticker.logMs("Transformed outline");
       }
       // Don't include source (but do add it above to include importUris).
-      summary =
-          serializeComponent(trimmedSummaryComponent, includeSources: false);
+      summary = serializeComponent(trimmedSummaryComponent,
+          includeSources: false, includeOffsets: includeOffsets);
       options.ticker.logMs("Generated outline");
     }
 
diff --git a/utils/bazel/kernel_worker.dart b/utils/bazel/kernel_worker.dart
index c2f3c1e..d1e6924 100644
--- a/utils/bazel/kernel_worker.dart
+++ b/utils/bazel/kernel_worker.dart
@@ -238,7 +238,9 @@
 
   fe.InitializedCompilerState state;
   bool usingIncrementalCompiler = false;
-  if (parsedArgs['use-incremental-compiler'] && linkedInputs.isEmpty) {
+  if (parsedArgs['use-incremental-compiler'] &&
+      linkedInputs.isEmpty &&
+      isWorker) {
     usingIncrementalCompiler = true;
 
     /// Build a map of uris to digests.
@@ -298,12 +300,14 @@
       return Future.value(fe.serializeComponent(incrementalComponent));
     });
   } else if (summaryOnly) {
-    kernel = await fe.compileSummary(state, sources, onDiagnostic);
+    kernel = await fe.compileSummary(state, sources, onDiagnostic,
+        includeOffsets: false);
   } else {
     Component component =
         await fe.compileComponent(state, sources, onDiagnostic);
     kernel = fe.serializeComponent(component,
-        filter: (library) => sources.contains(library.importUri));
+        filter: (library) => sources.contains(library.importUri),
+        includeOffsets: true);
   }
 
   if (kernel != null) {