[cfe] Move imports/exports to SourceCompilationUnitImpl

Change-Id: I1cb5c38e98d8db7bfedac32c6df359fc505a9d65
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/372083
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index c67ac71..d267b41 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -194,7 +194,7 @@
   void takeMixinApplications(
       Map<SourceClassBuilder, TypeBuilder> mixinApplications);
 
-  void addDependencies(Library library, Set<SourceLibraryBuilder> seen);
+  void addDependencies(Library library, Set<SourceCompilationUnit> seen);
 
   void includeParts(SourceLibraryBuilder libraryBuilder,
       List<SourceCompilationUnit> includedParts, Set<Uri> usedParts);
@@ -469,6 +469,10 @@
   /// Return the primary message.
   Message reportFeatureNotEnabled(
       LibraryFeature feature, Uri fileUri, int charOffset, int length);
+
+  void addImportsToScope();
+
+  int finishDeferredLoadTearoffs();
 }
 
 abstract class LibraryBuilder implements Builder {
diff --git a/pkg/front_end/lib/src/fasta/builder_graph.dart b/pkg/front_end/lib/src/fasta/builder_graph.dart
index 3dca8eb..3ce20a8 100644
--- a/pkg/front_end/lib/src/fasta/builder_graph.dart
+++ b/pkg/front_end/lib/src/fasta/builder_graph.dart
@@ -4,22 +4,10 @@
 
 library fasta.builder_graph;
 
-import 'package:kernel/kernel.dart' show LibraryDependency, LibraryPart;
-
 import 'package:kernel/util/graph.dart' show Graph;
 
 import 'builder/library_builder.dart';
 
-import 'export.dart' show Export;
-
-import 'import.dart' show Import;
-
-import 'dill/dill_library_builder.dart' show DillLibraryBuilder;
-
-import 'source/source_library_builder.dart' show SourceLibraryBuilder;
-
-import 'incremental_compiler.dart' show getPartUri;
-
 class BuilderGraph implements Graph<Uri> {
   final Map<Uri, LibraryBuilder> libraryBuilders;
 
@@ -36,44 +24,9 @@
     if (libraryBuilder == null) {
       throw "Library not found: $vertex";
     }
-    if (libraryBuilder is SourceLibraryBuilder) {
-      for (Import import in libraryBuilder.imports) {
-        // 'imported' can be null for fake imports, such as dart-ext:.
-        if (import.importedCompilationUnit != null) {
-          Uri uri = import.importedLibraryBuilder!.importUri;
-          if (libraryBuilders.containsKey(uri)) {
-            neighbors.add(uri);
-          }
-        }
-      }
-      for (Export export in libraryBuilder.exports) {
-        Uri uri = export.exportedLibraryBuilder.importUri;
-        if (libraryBuilders.containsKey(uri)) {
-          neighbors.add(uri);
-        }
-      }
-      for (SourceCompilationUnit part in libraryBuilder.parts) {
-        Uri uri = part.importUri;
-        if (libraryBuilders.containsKey(uri)) {
-          neighbors.add(uri);
-        }
-      }
-    } else if (libraryBuilder is DillLibraryBuilder) {
-      // Imports and exports
-      for (LibraryDependency dependency
-          in libraryBuilder.library.dependencies) {
-        Uri uri = dependency.targetLibrary.importUri;
-        if (libraryBuilders.containsKey(uri)) {
-          neighbors.add(uri);
-        }
-      }
-
-      // Parts
-      for (LibraryPart part in libraryBuilder.library.parts) {
-        Uri uri = getPartUri(libraryBuilder.importUri, part);
-        if (libraryBuilders.containsKey(uri)) {
-          neighbors.add(uri);
-        }
+    for (Uri importUri in libraryBuilder.dependencies) {
+      if (libraryBuilders.containsKey(importUri)) {
+        neighbors.add(importUri);
       }
     }
     return neighbors;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index a81ca91..435f555 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -30,6 +30,7 @@
 import '../kernel/utils.dart';
 import '../problems.dart' show internalProblem, unhandled;
 import '../scope.dart';
+import '../uris.dart';
 import 'dill_class_builder.dart' show DillClassBuilder;
 import 'dill_extension_builder.dart';
 import 'dill_extension_type_declaration_builder.dart';
@@ -157,8 +158,14 @@
   Null get partOfLibrary => null;
 
   @override
-  Iterable<Uri> get dependencies => library.dependencies.map(
-      (LibraryDependency dependency) => dependency.targetLibrary.importUri);
+  Iterable<Uri> get dependencies sync* {
+    for (LibraryDependency dependency in library.dependencies) {
+      yield dependency.targetLibrary.importUri;
+    }
+    for (LibraryPart part in library.parts) {
+      yield getPartUri(importUri, part);
+    }
+  }
 
   void ensureLoaded() {
     if (!isReadyToBuild) throw new StateError("Not ready to build.");
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 52fef32..ae0230d 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -101,7 +101,7 @@
 import 'source/source_loader.dart';
 import 'ticker.dart' show Ticker;
 import 'uri_translator.dart' show UriTranslator;
-import 'uris.dart' show MALFORMED_URI_SCHEME, dartCore;
+import 'uris.dart' show dartCore, getPartUri;
 import 'util/error_reporter_file_copier.dart' show saveAsGzip;
 import 'util/experiment_environment_getter.dart'
     show enableIncrementalCompilerBenchmarking, getExperimentEnvironment;
@@ -1884,6 +1884,7 @@
         isAugmentation: false,
         isPatch: false,
       );
+      debugLibrary.compilationUnit.createLibrary();
       libraryBuilder.scope.forEachLocalMember((name, member) {
         debugLibrary.scope.addLocalMember(name, member, setter: false);
       });
@@ -1973,6 +1974,7 @@
         }
       }
 
+      debugLibrary.compilationUnit.createLibrary();
       debugLibrary.buildOutlineNodes(lastGoodKernelTarget.loader.coreLibrary);
       Expression compiledExpression = await lastGoodKernelTarget.loader
           .buildExpression(
@@ -2222,67 +2224,6 @@
   bool _foundExtensionType = false;
 }
 
-/// Translate a parts "partUri" to an actual uri with handling of invalid uris.
-///
-/// ```
-/// DartDocTest(
-///   getPartUri(
-///     Uri.parse("file://path/to/parent.dart"),
-///     new LibraryPart([], "simple.dart")
-///   ),
-///   Uri.parse("file://path/to/simple.dart")
-/// )
-/// DartDocTest(
-///   getPartUri(
-///     Uri.parse("file://path/to/parent.dart"),
-///     new LibraryPart([], "dir/simple.dart")
-///   ),
-///   Uri.parse("file://path/to/dir/simple.dart")
-/// )
-/// DartDocTest(
-///   getPartUri(
-///     Uri.parse("file://path/to/parent.dart"),
-///     new LibraryPart([], "../simple.dart")
-///   ),
-///   Uri.parse("file://path/simple.dart")
-/// )
-/// DartDocTest(
-///   getPartUri(
-///     Uri.parse("file://path/to/parent.dart"),
-///     new LibraryPart([], "file:///my/path/absolute.dart")
-///   ),
-///   Uri.parse("file:///my/path/absolute.dart")
-/// )
-/// DartDocTest(
-///   getPartUri(
-///     Uri.parse("file://path/to/parent.dart"),
-///     new LibraryPart([], "package:foo/hello.dart")
-///   ),
-///   Uri.parse("package:foo/hello.dart")
-/// )
-/// ```
-/// And with invalid part uri:
-/// ```
-/// DartDocTest(
-///   getPartUri(
-///     Uri.parse("file://path/to/parent.dart"),
-///     new LibraryPart([], ":hello")
-///   ),
-///   new Uri(scheme: MALFORMED_URI_SCHEME,
-///     query: Uri.encodeQueryComponent(":hello"))
-/// )
-/// ```
-Uri getPartUri(Uri parentUri, LibraryPart part) {
-  try {
-    return parentUri.resolve(part.partUri);
-  } on FormatException {
-    // This is also done in [SourceLibraryBuilder.resolve]
-    return new Uri(
-        scheme: MALFORMED_URI_SCHEME,
-        query: Uri.encodeQueryComponent(part.partUri));
-  }
-}
-
 class PackageChangedError {
   const PackageChangedError();
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index faf23a3..1eabd4f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -363,6 +363,7 @@
       // [SourceLoader.resolveParts]. For macro-generated augmentation libraries
       // we instead apply them directly here.
       for (SourceLibraryBuilder augmentationLibrary in augmentationLibraries) {
+        augmentationLibrary.compilationUnit.createLibrary();
         augmentationLibrary.applyAugmentations();
       }
       loader.computeLibraryScopes(augmentationLibraries);
diff --git a/pkg/front_end/lib/src/fasta/library_graph.dart b/pkg/front_end/lib/src/fasta/library_graph.dart
index 42fe722..be37142 100644
--- a/pkg/front_end/lib/src/fasta/library_graph.dart
+++ b/pkg/front_end/lib/src/fasta/library_graph.dart
@@ -9,7 +9,7 @@
 
 import 'package:kernel/util/graph.dart' show Graph;
 
-import 'incremental_compiler.dart' show getPartUri;
+import 'uris.dart' show getPartUri;
 
 class LibraryGraph implements Graph<Uri> {
   final Map<Uri, Library> libraries;
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 3e72e0f..a839aa1 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -122,7 +122,7 @@
 class SourceCompilationUnitImpl implements SourceCompilationUnit {
   final SourceLibraryBuilder _sourceLibraryBuilder;
 
-  LibraryBuilder? _libraryBuilder;
+  SourceLibraryBuilder? _libraryBuilder;
 
   /// Map used to find objects created in the [OutlineBuilder] from within
   /// the [DietListener].
@@ -133,6 +133,10 @@
   /// The part directives in this compilation unit.
   final List<Part> _parts = [];
 
+  final List<Import> imports = <Import>[];
+
+  final List<Export> exports = <Export>[];
+
   SourceCompilationUnitImpl(this._sourceLibraryBuilder);
 
   @override
@@ -219,7 +223,7 @@
   }
 
   @override
-  LibraryBuilder get libraryBuilder {
+  SourceLibraryBuilder get libraryBuilder {
     assert(_libraryBuilder != null,
         "Library builder for $this has not been computed yet.");
     return _libraryBuilder!;
@@ -246,7 +250,17 @@
   }
 
   @override
-  Iterable<Uri> get dependencies => _sourceLibraryBuilder.dependencies;
+  Iterable<Uri> get dependencies sync* {
+    for (Export export in exports) {
+      yield export.exportedCompilationUnit.importUri;
+    }
+    for (Import import in imports) {
+      CompilationUnit? imported = import.importedCompilationUnit;
+      if (imported != null) {
+        yield imported.importUri;
+      }
+    }
+  }
 
   @override
   Uri get fileUri => _sourceLibraryBuilder.fileUri;
@@ -299,8 +313,40 @@
   String toString() => 'SourceCompilationUnitImpl($fileUri)';
 
   @override
-  void addDependencies(Library library, Set<SourceLibraryBuilder> seen) {
-    _sourceLibraryBuilder.addDependencies(library, seen);
+  void addDependencies(Library library, Set<SourceCompilationUnit> seen) {
+    if (!seen.add(this)) {
+      return;
+    }
+
+    for (Import import in imports) {
+      // Rather than add a LibraryDependency, we attach an annotation.
+      if (import.nativeImportPath != null) {
+        _sourceLibraryBuilder.addNativeDependency(import.nativeImportPath!);
+        continue;
+      }
+
+      LibraryDependency libraryDependency;
+      if (import.deferred && import.prefixBuilder?.dependency != null) {
+        libraryDependency = import.prefixBuilder!.dependency!;
+      } else {
+        LibraryBuilder imported = import.importedLibraryBuilder!.origin;
+        Library targetLibrary = imported.library;
+        libraryDependency = new LibraryDependency.import(targetLibrary,
+            name: import.prefix,
+            combinators: toKernelCombinators(import.combinators))
+          ..fileOffset = import.charOffset;
+      }
+      library.addDependency(libraryDependency);
+      import.libraryDependency = libraryDependency;
+    }
+    for (Export export in exports) {
+      LibraryDependency libraryDependency = new LibraryDependency.export(
+          export.exportedLibraryBuilder.library,
+          combinators: toKernelCombinators(export.combinators))
+        ..fileOffset = export.charOffset;
+      library.addDependency(libraryDependency);
+      export.libraryDependency = libraryDependency;
+    }
   }
 
   @override
@@ -735,11 +781,54 @@
         prefixCharOffset,
         importIndex,
         nativeImportPath: nativePath);
-    _sourceLibraryBuilder.imports.add(import);
+    imports.add(import);
     offsetMap?.registerImport(importKeyword!, import);
   }
 
   @override
+  void addImportsToScope() {
+    bool explicitCoreImport = _sourceLibraryBuilder == loader.coreLibrary;
+    for (Import import in imports) {
+      if (import.importedCompilationUnit?.isPart ?? false) {
+        addProblem(
+            templatePartOfInLibrary
+                .withArguments(import.importedCompilationUnit!.fileUri),
+            import.charOffset,
+            noLength,
+            fileUri);
+      }
+      if (import.importedLibraryBuilder == loader.coreLibrary) {
+        explicitCoreImport = true;
+      }
+      import.finalizeImports(_sourceLibraryBuilder);
+    }
+    if (!explicitCoreImport) {
+      NameIterator<Builder> iterator = loader.coreLibrary.exportScope
+          .filteredNameIterator(
+              includeDuplicates: false, includeAugmentations: false);
+      while (iterator.moveNext()) {
+        _sourceLibraryBuilder.addToScope(
+            iterator.name, iterator.current, -1, true);
+      }
+    }
+  }
+
+  @override
+  int finishDeferredLoadTearoffs() {
+    int total = 0;
+    for (Import import in imports) {
+      if (import.deferred) {
+        Procedure? tearoff = import.prefixBuilder!.loadLibraryBuilder!.tearoff;
+        if (tearoff != null) {
+          library.addProcedure(tearoff);
+        }
+        total++;
+      }
+    }
+    return total;
+  }
+
+  @override
   void addExport(
       OffsetMap offsetMap,
       Token exportKeyword,
@@ -766,7 +855,7 @@
     exportedLibrary.addExporter(_sourceLibraryBuilder, combinators, charOffset);
     Export export = new Export(
         _sourceLibraryBuilder, exportedLibrary, combinators, charOffset);
-    _sourceLibraryBuilder.exports.add(export);
+    exports.add(export);
     offsetMap.registerExport(exportKeyword, export);
   }
 
@@ -2633,10 +2722,6 @@
 
   final List<SourceCompilationUnit> _parts = [];
 
-  final List<Import> imports = <Import>[];
-
-  final List<Export> exports = <Export>[];
-
   final Scope importScope;
 
   @override
@@ -3151,14 +3236,10 @@
 
   @override
   Iterable<Uri> get dependencies sync* {
-    for (Export export in exports) {
-      yield export.exportedCompilationUnit.importUri;
-    }
-    for (Import import in imports) {
-      CompilationUnit? imported = import.importedCompilationUnit;
-      if (imported != null) {
-        yield imported.importUri;
-      }
+    yield* compilationUnit.dependencies;
+    for (SourceCompilationUnit part in parts) {
+      yield part.importUri;
+      yield* part.dependencies;
     }
   }
 
@@ -3415,7 +3496,7 @@
 
     library.isSynthetic = isSynthetic;
     library.isUnsupported = isUnsupported;
-    addDependencies(library, new Set<SourceLibraryBuilder>());
+    addDependencies(library, new Set<SourceCompilationUnit>());
 
     library.name = name;
     library.procedures.sort(compareProcedures);
@@ -3459,29 +3540,11 @@
       }
     }
 
-    bool explicitCoreImport = this == loader.coreLibrary;
-    for (Import import in imports) {
-      if (import.importedCompilationUnit?.isPart ?? false) {
-        addProblem(
-            templatePartOfInLibrary
-                .withArguments(import.importedCompilationUnit!.fileUri),
-            import.charOffset,
-            noLength,
-            fileUri);
-      }
-      if (import.importedLibraryBuilder == loader.coreLibrary) {
-        explicitCoreImport = true;
-      }
-      import.finalizeImports(this);
-    }
-    if (!explicitCoreImport) {
-      NameIterator<Builder> iterator = loader.coreLibrary.exportScope
-          .filteredNameIterator(
-              includeDuplicates: false, includeAugmentations: false);
-      while (iterator.moveNext()) {
-        addToScope(iterator.name, iterator.current, -1, true);
-      }
-    }
+    compilationUnit.addImportsToScope();
+    // TODO(johnniwinther): Support imports into parts.
+    /*for (SourceCompilationUnit part in parts) {
+      part.addImportsToScope();
+    }*/
 
     NameIterator<Builder> iterator = exportScope.filteredNameIterator(
         includeDuplicates: false, includeAugmentations: false);
@@ -4196,40 +4259,8 @@
     library.addAnnotation(annotation);
   }
 
-  void addDependencies(Library library, Set<SourceLibraryBuilder> seen) {
-    if (!seen.add(this)) {
-      return;
-    }
-
-    for (Import import in imports) {
-      // Rather than add a LibraryDependency, we attach an annotation.
-      if (import.nativeImportPath != null) {
-        addNativeDependency(import.nativeImportPath!);
-        continue;
-      }
-
-      LibraryDependency libraryDependency;
-      if (import.deferred && import.prefixBuilder?.dependency != null) {
-        libraryDependency = import.prefixBuilder!.dependency!;
-      } else {
-        LibraryBuilder imported = import.importedLibraryBuilder!.origin;
-        Library targetLibrary = imported.library;
-        libraryDependency = new LibraryDependency.import(targetLibrary,
-            name: import.prefix,
-            combinators: toKernelCombinators(import.combinators))
-          ..fileOffset = import.charOffset;
-      }
-      library.addDependency(libraryDependency);
-      import.libraryDependency = libraryDependency;
-    }
-    for (Export export in exports) {
-      LibraryDependency libraryDependency = new LibraryDependency.export(
-          export.exportedLibraryBuilder.library,
-          combinators: toKernelCombinators(export.combinators))
-        ..fileOffset = export.charOffset;
-      library.addDependency(libraryDependency);
-      export.libraryDependency = libraryDependency;
-    }
+  void addDependencies(Library library, Set<SourceCompilationUnit> seen) {
+    compilationUnit.addDependencies(library, seen);
     for (SourceCompilationUnit part in parts) {
       part.addDependencies(library, seen);
     }
@@ -4326,16 +4357,10 @@
       }
     }
 
-    for (Import import in imports) {
-      if (import.deferred) {
-        Procedure? tearoff = import.prefixBuilder!.loadLibraryBuilder!.tearoff;
-        if (tearoff != null) {
-          library.addProcedure(tearoff);
-        }
-        total++;
-      }
+    total += compilationUnit.finishDeferredLoadTearoffs();
+    for (SourceCompilationUnit part in parts) {
+      total += part.finishDeferredLoadTearoffs();
     }
-
     return total;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/uris.dart b/pkg/front_end/lib/src/fasta/uris.dart
index 765c5d1..b6191c6 100644
--- a/pkg/front_end/lib/src/fasta/uris.dart
+++ b/pkg/front_end/lib/src/fasta/uris.dart
@@ -2,9 +2,72 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:kernel/ast.dart';
+
 final Uri dartCore = Uri.parse('dart:core');
 final Uri missingUri = Uri.parse('org-dartlang-internal:missing');
 
 const String MALFORMED_URI_SCHEME = "org-dartlang-malformed-uri";
 
 bool isNotMalformedUriScheme(Uri uri) => !uri.isScheme(MALFORMED_URI_SCHEME);
+
+/// Translate a parts "partUri" to an actual uri with handling of invalid uris.
+///
+/// ```
+/// DartDocTest(
+///   getPartUri(
+///     Uri.parse("file://path/to/parent.dart"),
+///     new LibraryPart([], "simple.dart")
+///   ),
+///   Uri.parse("file://path/to/simple.dart")
+/// )
+/// DartDocTest(
+///   getPartUri(
+///     Uri.parse("file://path/to/parent.dart"),
+///     new LibraryPart([], "dir/simple.dart")
+///   ),
+///   Uri.parse("file://path/to/dir/simple.dart")
+/// )
+/// DartDocTest(
+///   getPartUri(
+///     Uri.parse("file://path/to/parent.dart"),
+///     new LibraryPart([], "../simple.dart")
+///   ),
+///   Uri.parse("file://path/simple.dart")
+/// )
+/// DartDocTest(
+///   getPartUri(
+///     Uri.parse("file://path/to/parent.dart"),
+///     new LibraryPart([], "file:///my/path/absolute.dart")
+///   ),
+///   Uri.parse("file:///my/path/absolute.dart")
+/// )
+/// DartDocTest(
+///   getPartUri(
+///     Uri.parse("file://path/to/parent.dart"),
+///     new LibraryPart([], "package:foo/hello.dart")
+///   ),
+///   Uri.parse("package:foo/hello.dart")
+/// )
+/// ```
+/// And with invalid part uri:
+/// ```
+/// DartDocTest(
+///   getPartUri(
+///     Uri.parse("file://path/to/parent.dart"),
+///     new LibraryPart([], ":hello")
+///   ),
+///   new Uri(scheme: MALFORMED_URI_SCHEME,
+///     query: Uri.encodeQueryComponent(":hello"))
+/// )
+/// ```
+Uri getPartUri(Uri parentUri, LibraryPart part) {
+  try {
+    return parentUri.resolve(part.partUri);
+  } on FormatException {
+    // This is also done in [SourceLibraryBuilder.resolve]
+    return new Uri(
+        scheme: MALFORMED_URI_SCHEME,
+        query: Uri.encodeQueryComponent(part.partUri));
+  }
+}
diff --git a/pkg/front_end/test/coverage_suite_expected.dart b/pkg/front_end/test/coverage_suite_expected.dart
index 85ea225..47bf38c 100644
--- a/pkg/front_end/test/coverage_suite_expected.dart
+++ b/pkg/front_end/test/coverage_suite_expected.dart
@@ -275,10 +275,10 @@
     hitCount: 2,
     missCount: 0,
   ),
-  // 57.692307692307686%.
+  // 94.44444444444444%.
   "package:front_end/src/fasta/builder_graph.dart": (
-    hitCount: 30,
-    missCount: 22,
+    hitCount: 17,
+    missCount: 1,
   ),
   // 73.0892742453436%.
   "package:front_end/src/codes/cfe_codes_generated.dart": (
@@ -346,9 +346,9 @@
     hitCount: 129,
     missCount: 25,
   ),
-  // 82.51928020565553%.
+  // 82.69720101781171%.
   "package:front_end/src/fasta/dill/dill_library_builder.dart": (
-    hitCount: 321,
+    hitCount: 325,
     missCount: 68,
   ),
   // 77.03349282296651%.
@@ -401,9 +401,9 @@
     hitCount: 96,
     missCount: 3,
   ),
-  // 50.64402810304449%.
+  // 50.55718475073314%.
   "package:front_end/src/fasta/incremental_compiler.dart": (
-    hitCount: 865,
+    hitCount: 862,
     missCount: 843,
   ),
   // 0.0%.
@@ -561,10 +561,10 @@
     hitCount: 285,
     missCount: 3,
   ),
-  // 81.23569794050344%.
+  // 81.1119573495811%.
   "package:front_end/src/fasta/kernel/kernel_target.dart": (
     hitCount: 1065,
-    missCount: 246,
+    missCount: 248,
   ),
   // 61.111111111111114%.
   "package:front_end/src/fasta/kernel/kernel_variable_builder.dart": (
@@ -762,10 +762,10 @@
     hitCount: 293,
     missCount: 35,
   ),
-  // 85.38745387453875%.
+  // 85.27682508574227%.
   "package:front_end/src/fasta/source/source_library_builder.dart": (
-    hitCount: 3471,
-    missCount: 594,
+    hitCount: 3481,
+    missCount: 601,
   ),
   // 81.96357174589072%.
   "package:front_end/src/fasta/source/source_loader.dart": (
@@ -787,9 +787,9 @@
     hitCount: 330,
     missCount: 8,
   ),
-  // 78.37837837837837%.
+  // 80.0%.
   "package:front_end/src/fasta/source/stack_listener_impl.dart": (
-    hitCount: 29,
+    hitCount: 32,
     missCount: 8,
   ),
   // 73.07692307692307%.
@@ -827,9 +827,9 @@
     hitCount: 166,
     missCount: 29,
   ),
-  // 90.39018177607966%.
+  // 90.38906901343215%.
   "package:front_end/src/fasta/type_inference/inference_visitor.dart": (
-    hitCount: 7807,
+    hitCount: 7806,
     missCount: 830,
   ),
   // 85.96491228070175%.
@@ -907,10 +907,10 @@
     hitCount: 41,
     missCount: 13,
   ),
-  // 100.0%.
+  // 69.23076923076923%.
   "package:front_end/src/fasta/uris.dart": (
-    hitCount: 6,
-    missCount: 0,
+    hitCount: 9,
+    missCount: 4,
   ),
   // 0.0%.
   "package:front_end/src/fasta/util/error_reporter_file_copier.dart": (