diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index 4742d6f..cf7f639 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -126,6 +126,9 @@
       Class referencesFrom,
       IndexedClass referencesFromIndexed) {
     assert(enumConstantInfos == null || enumConstantInfos.isNotEmpty);
+
+    Uri fileUri = parent.fileUri;
+
     // TODO(ahe): These types shouldn't be looked up in scope, they come
     // directly from dart:core.
     TypeBuilder intType = new NamedTypeBuilder(
@@ -146,7 +149,8 @@
         /* arguments = */ null,
         /* fileUri = */ null,
         /* charOffset = */ null);
-    Class cls = new Class(name: name, reference: referencesFrom?.reference);
+    Class cls = new Class(
+        name: name, reference: referencesFrom?.reference, fileUri: fileUri);
     Map<String, MemberBuilder> members = <String, MemberBuilder>{};
     Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
     NamedTypeBuilder selfType = new NamedTypeBuilder(
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 087e96d..4b2720b 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -271,7 +271,8 @@
           new FunctionNode(null),
           isStatic: true,
           isExtensionMember: true,
-          reference: _tearOffReference)
+          reference: _tearOffReference,
+          fileUri: fileUri)
         ..isNonNullableByDefault = library.isNonNullableByDefault;
     }
   }
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index a25d4e1..b813027 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -1948,7 +1948,7 @@
 
       Procedure procedure = new Procedure(
           new Name(syntheticProcedureName), ProcedureKind.Method, parameters,
-          isStatic: isStatic)
+          isStatic: isStatic, fileUri: debugLibrary.fileUri)
         ..isNonNullableByDefault = debugLibrary.isNonNullableByDefault;
 
       parameters.body = new ReturnStatement(compiledExpression)
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 66d862b..3e30a03 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -772,9 +772,10 @@
             initializers: <Initializer>[initializer],
             isSynthetic: true,
             isConst: isConst,
-            reference: referenceFrom?.reference)
-          ..isNonNullableByDefault = cls.enclosingLibrary.isNonNullableByDefault
-          ..fileUri = cls.fileUri,
+            reference: referenceFrom?.reference,
+            fileUri: cls.fileUri)
+          ..isNonNullableByDefault =
+              cls.enclosingLibrary.isNonNullableByDefault,
         // If the constructor is constant, the default values must be part of
         // the outline expressions. We pass on the original constructor and
         // cloned function nodes to ensure that the default values are computed
@@ -801,7 +802,8 @@
                 returnType: makeConstructorReturnType(enclosingClass)),
             name: new Name(""),
             isSynthetic: true,
-            reference: referenceFrom?.reference)
+            reference: referenceFrom?.reference,
+            fileUri: enclosingClass.fileUri)
           ..isNonNullableByDefault =
               enclosingClass.enclosingLibrary.isNonNullableByDefault);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index e55e325..917607e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -75,16 +75,17 @@
 Component createExpressionEvaluationComponent(Procedure procedure) {
   Library realLibrary = procedure.enclosingLibrary;
 
-  Library fakeLibrary = new Library(new Uri(scheme: 'evaluate', path: 'source'))
+  Uri uri = new Uri(scheme: 'evaluate', path: 'source');
+  Library fakeLibrary = new Library(uri, fileUri: uri)
     ..setLanguageVersion(realLibrary.languageVersion)
     ..isNonNullableByDefault = realLibrary.isNonNullableByDefault
     ..nonNullableByDefaultCompiledMode =
         realLibrary.nonNullableByDefaultCompiledMode;
 
-  if (procedure.parent is Class) {
-    Class realClass = procedure.parent;
-
-    Class fakeClass = new Class(name: kDebugClassName)..parent = fakeLibrary;
+  TreeNode realClass = procedure.parent;
+  if (realClass is Class) {
+    Class fakeClass = new Class(name: kDebugClassName, fileUri: uri)
+      ..parent = fakeLibrary;
     Map<TypeParameter, TypeParameter> typeParams =
         <TypeParameter, TypeParameter>{};
     Map<TypeParameter, DartType> typeSubstitution = <TypeParameter, DartType>{};
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index bf02502..7e453ba 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -68,7 +68,8 @@
       name: name,
       typeParameters:
           TypeVariableBuilder.typeParametersFromBuilders(typeVariables),
-      reference: referencesFrom?.reference);
+      reference: referencesFrom?.reference,
+      fileUri: parent.fileUri);
   cls.fileUri ??= parent.fileUri;
   if (cls.startFileOffset == TreeNode.noOffset) {
     cls.startFileOffset = startCharOffset;
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 aca996f..26d0e70 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
@@ -1030,7 +1030,8 @@
           initializer: new StringLiteral(jsonEncode(unserializableExports)),
           isStatic: true,
           isConst: true,
-          getterReference: getterReference));
+          getterReference: getterReference,
+          fileUri: library.fileUri));
     }
 
     return library;
diff --git a/pkg/front_end/test/fasta/ambiguous_export_test.dart b/pkg/front_end/test/fasta/ambiguous_export_test.dart
index b1e492b..6fa366c 100644
--- a/pkg/front_end/test/fasta/ambiguous_export_test.dart
+++ b/pkg/front_end/test/fasta/ambiguous_export_test.dart
@@ -22,9 +22,11 @@
 
 main() async {
   await asyncTest(() async {
-    Library library = new Library(Uri.parse("org.dartlang.fasta:library"));
+    Uri uri = Uri.parse("org.dartlang.fasta:library");
+    Library library = new Library(uri, fileUri: uri);
     Field field = new Field.immutable(new Name("_exports#", library),
-        initializer: new StringLiteral('{"main":"Problem with main"}'));
+        initializer: new StringLiteral('{"main":"Problem with main"}'),
+        fileUri: library.fileUri);
     library.addField(field);
     Component component = new Component(libraries: <Library>[library]);
     await CompilerContext.runWithDefaultOptions((CompilerContext c) async {
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index c1d32eb..a1c3537 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -87,11 +87,14 @@
     LoadLibraryBuilder loadLibraryBuilder =
         new LoadLibraryBuilder(libraryBuilder, null, -1);
     Procedure getter = new Procedure(
-        new Name("myGetter"), ProcedureKind.Getter, new FunctionNode(null));
+        new Name("myGetter"), ProcedureKind.Getter, new FunctionNode(null),
+        fileUri: uri);
     Procedure interfaceTarget = new Procedure(new Name("myInterfaceTarget"),
-        ProcedureKind.Method, new FunctionNode(null));
+        ProcedureKind.Method, new FunctionNode(null),
+        fileUri: uri);
     Procedure setter = new Procedure(
-        new Name("mySetter"), ProcedureKind.Setter, new FunctionNode(null));
+        new Name("mySetter"), ProcedureKind.Setter, new FunctionNode(null),
+        fileUri: uri);
     Message message = templateUnspecified.withArguments("My Message.");
     Name binaryOperator = new Name("+");
     Name name = new Name("bar");
@@ -110,8 +113,8 @@
     Generator generator =
         new ThisAccessGenerator(helper, token, false, false, false);
 
-    Library library = new Library(uri);
-    Class cls = new Class(name: 'foo');
+    Library library = new Library(uri, fileUri: uri);
+    Class cls = new Class(name: 'foo', fileUri: uri);
     library.addClass(cls);
     library.addProcedure(getter);
     library.addProcedure(setter);
diff --git a/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart b/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart
index 1f063e3..83ba5fd 100644
--- a/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_inference_engine_test.dart
@@ -121,7 +121,7 @@
   }
 
   void test_interface_type() {
-    Class cls = new Class(name: 'C', typeParameters: [T, U]);
+    Class cls = new Class(name: 'C', typeParameters: [T, U], fileUri: dummyUri);
     expect(
         check(
             new InterfaceType(cls, Nullability.legacy, [tpt(T), tpt(U)]), [T]),
@@ -187,7 +187,7 @@
     // typedef U F<T, U>(T x);
     var typedefNode = new Typedef(
         'F', new FunctionType([tpt(T)], tpt(U), Nullability.legacy),
-        typeParameters: [T, U]);
+        typeParameters: [T, U], fileUri: dummyUri);
     expect(
         check(
             new TypedefType(typedefNode, Nullability.legacy,
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_test.dart
index bc794f0..141bcf0 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_test.dart
@@ -31,9 +31,9 @@
   void test_isKnown() {
     expect(isKnown(unknownType), isFalse);
     expect(isKnown(const DynamicType()), isTrue);
-    var classA = new Class(name: 'A');
+    var classA = new Class(name: 'A', fileUri: dummyUri);
     var A = new InterfaceType(classA, Nullability.legacy);
-    var typedefF = new Typedef('F', A);
+    var typedefF = new Typedef('F', A, fileUri: dummyUri);
     expect(isKnown(A), isTrue);
     expect(isKnown(new InterfaceType(classA, Nullability.legacy, [A])), isTrue);
     expect(
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 371df29..5c535ba 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -1923,7 +1923,8 @@
         isFinal: true,
         getterReference: lib.reference.canonicalName
             ?.getChildFromFieldWithName(fieldName)
-            ?.reference);
+            ?.reference,
+        fileUri: lib.fileUri);
     lib.addField(field);
     for (Class c in lib.classes) {
       if (c.fields
@@ -1935,7 +1936,8 @@
           isFinal: true,
           getterReference: c.reference.canonicalName
               ?.getChildFromFieldWithName(fieldName)
-              ?.reference);
+              ?.reference,
+          fileUri: c.fileUri);
       c.addField(field);
     }
   }
diff --git a/pkg/front_end/test/member_covariance_test.dart b/pkg/front_end/test/member_covariance_test.dart
index fee063f..aadc962 100644
--- a/pkg/front_end/test/member_covariance_test.dart
+++ b/pkg/front_end/test/member_covariance_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.9
 
 import 'package:expect/expect.dart';
-import 'package:front_end/src/fasta/kernel/kernel_ast_api.dart';
+import 'package:kernel/ast.dart';
 import 'package:front_end/src/fasta/kernel/member_covariance.dart';
 
 main() {
@@ -92,7 +92,8 @@
       covariance.toString());
 
   Procedure noParameterProcedure = new Procedure(
-      new Name('foo'), ProcedureKind.Method, new FunctionNode(null));
+      new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
+      fileUri: dummyUri);
   Covariance noParameterProcedureCovariance =
       new Covariance.fromMember(noParameterProcedure, forSetter: false);
   Expect.isTrue(noParameterProcedureCovariance.isEmpty);
@@ -106,7 +107,8 @@
       new Name('foo'),
       ProcedureKind.Method,
       new FunctionNode(null,
-          positionalParameters: [new VariableDeclaration(null)]));
+          positionalParameters: [new VariableDeclaration(null)]),
+      fileUri: dummyUri);
   Covariance oneParameterProcedureCovariance =
       new Covariance.fromMember(oneParameterProcedure, forSetter: false);
   Expect.isTrue(oneParameterProcedureCovariance.isEmpty);
@@ -127,7 +129,8 @@
         new VariableDeclaration(null),
         new VariableDeclaration(null),
         new VariableDeclaration(null)
-      ]));
+      ]),
+      fileUri: dummyUri);
   Covariance positionalParametersProcedureCovariance =
       new Covariance.fromMember(positionalParametersProcedure,
           forSetter: false);
@@ -156,7 +159,8 @@
         new VariableDeclaration('c'),
         new VariableDeclaration('d'),
         new VariableDeclaration('e')
-      ]));
+      ]),
+      fileUri: dummyUri);
   Covariance namedParametersProcedureCovariance =
       new Covariance.fromMember(namedParametersProcedure, forSetter: false);
   Expect.isTrue(namedParametersProcedureCovariance.isEmpty);
@@ -183,7 +187,8 @@
         new TypeParameter(null),
         new TypeParameter(null),
         new TypeParameter(null),
-      ]));
+      ]),
+      fileUri: dummyUri);
   Covariance typeParametersProcedureCovariance =
       new Covariance.fromMember(typeParametersProcedure, forSetter: false);
   Expect.isTrue(typeParametersProcedureCovariance.isEmpty);
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 10f93ef..a7b97ca 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -365,6 +365,7 @@
 effects
 efficient
 efficiently
+eighth
 elem
 eliminating
 elt
@@ -1254,6 +1255,7 @@
 tuple5
 tuple6
 tuple7
+tuple8
 type1
 type2
 typeref
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index f8a87cb..9da4fd3 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -38,9 +38,12 @@
 
   Component _mockOutline;
 
-  Component get mockSummary => _mockOutline ??= new Component(
-      libraries: [new Library(Uri.parse('org-dartlang-test:///a/b.dart'))])
-    ..setMainMethodAndMode(null, false, NonNullableByDefaultCompiledMode.Weak);
+  Component get mockSummary => _mockOutline ??= new Component(libraries: [
+        new Library(Uri.parse('org-dartlang-test:///a/b.dart'),
+            fileUri: Uri.parse('org-dartlang-test:///a/b.dart'))
+      ])
+        ..setMainMethodAndMode(
+            null, false, NonNullableByDefaultCompiledMode.Weak);
 
   test_compileSdk_false() {
     for (var value in [false, true]) {
diff --git a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
index a71ada8..b51b99d 100644
--- a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
@@ -303,7 +303,7 @@
 }
 
 void _testDeferredCheck() {
-  Library library = new Library(dummyUri);
+  Library library = new Library(dummyUri, fileUri: dummyUri);
   LibraryDependency dependency =
       LibraryDependency.deferredImport(library, 'pre');
   VariableDeclaration check =
@@ -313,11 +313,12 @@
 }
 
 void _testFactoryConstructorInvocationJudgment() {
-  Library library = new Library(dummyUri);
-  Class cls = new Class(name: 'Class');
+  Library library = new Library(dummyUri, fileUri: dummyUri);
+  Class cls = new Class(name: 'Class', fileUri: dummyUri);
   library.addClass(cls);
   Procedure factoryConstructor = new Procedure(
-      new Name(''), ProcedureKind.Factory, new FunctionNode(null));
+      new Name(''), ProcedureKind.Factory, new FunctionNode(null),
+      fileUri: dummyUri);
   cls.addProcedure(factoryConstructor);
 
   testExpression(
@@ -525,7 +526,7 @@
 }
 
 void _testLoadLibraryImpl() {
-  Library library = new Library(dummyUri);
+  Library library = new Library(dummyUri, fileUri: dummyUri);
   LibraryDependency dependency =
       LibraryDependency.deferredImport(library, 'pre');
   testExpression(new LoadLibraryImpl(dependency, new ArgumentsImpl([])), '''
@@ -537,7 +538,7 @@
 }
 
 void _testLoadLibraryTearOff() {
-  Library library = new Library(dummyUri);
+  Library library = new Library(dummyUri, fileUri: dummyUri);
   LibraryDependency dependency =
       LibraryDependency.deferredImport(library, 'pre');
 
@@ -545,7 +546,8 @@
 pre.loadLibrary''');
 
   Procedure procedure = new Procedure(new Name('get#loadLibrary'),
-      ProcedureKind.Getter, new FunctionNode(new Block([])));
+      ProcedureKind.Getter, new FunctionNode(new Block([])),
+      fileUri: dummyUri);
   testExpression(new LoadLibraryTearOff(dependency, procedure), ''' 
 pre.loadLibrary''');
 }
@@ -610,12 +612,15 @@
 void _testSuperIndexSet() {}
 
 void _testExtensionIndexSet() {
-  Library library = new Library(dummyUri);
+  Library library = new Library(dummyUri, fileUri: dummyUri);
   Extension extension = new Extension(
-      name: 'Extension', typeParameters: [new TypeParameter('T')]);
+      name: 'Extension',
+      typeParameters: [new TypeParameter('T')],
+      fileUri: dummyUri);
   library.addExtension(extension);
-  Procedure setter =
-      new Procedure(new Name(''), ProcedureKind.Method, new FunctionNode(null));
+  Procedure setter = new Procedure(
+      new Name(''), ProcedureKind.Method, new FunctionNode(null),
+      fileUri: dummyUri);
   library.addProcedure(setter);
 
   testExpression(
diff --git a/pkg/front_end/test/type_labeler_test.dart b/pkg/front_end/test/type_labeler_test.dart
index 8814e5e..3acfa34 100644
--- a/pkg/front_end/test/type_labeler_test.dart
+++ b/pkg/front_end/test/type_labeler_test.dart
@@ -31,32 +31,42 @@
   }
 
   // Library mocks
-  Library dartCoreLib = new Library(new Uri(scheme: 'dart', path: 'core'));
-  Library myLib = new Library(Uri.parse("org-dartlang-testcase:///mylib.dart"));
+  Uri dartCoreUri = new Uri(scheme: 'dart', path: 'core');
+  Library dartCoreLib = new Library(dartCoreUri, fileUri: dartCoreUri);
+  Uri myUri = Uri.parse("org-dartlang-testcase:///mylib.dart");
+  Library myLib = new Library(myUri, fileUri: myUri);
 
   // Set up some classes
-  Class objectClass = new Class(name: "Object")..parent = dartCoreLib;
+  Class objectClass = new Class(name: "Object", fileUri: dartCoreUri)
+    ..parent = dartCoreLib;
   Supertype objectSuper = new Supertype(objectClass, []);
-  Class boolClass = new Class(name: "bool", supertype: objectSuper)
-    ..parent = dartCoreLib;
-  Class numClass = new Class(name: "num", supertype: objectSuper)
-    ..parent = dartCoreLib;
+  Class boolClass =
+      new Class(name: "bool", supertype: objectSuper, fileUri: dartCoreUri)
+        ..parent = dartCoreLib;
+  Class numClass =
+      new Class(name: "num", supertype: objectSuper, fileUri: dartCoreUri)
+        ..parent = dartCoreLib;
   Supertype numSuper = new Supertype(numClass, []);
-  Class intClass = new Class(name: "int", supertype: numSuper)
-    ..parent = dartCoreLib;
-  Class fooClass = new Class(name: "Foo", supertype: objectSuper)
-    ..parent = myLib;
-  Class foo2Class = new Class(name: "Foo", supertype: objectSuper)
-    ..parent = myLib;
+  Class intClass =
+      new Class(name: "int", supertype: numSuper, fileUri: dartCoreUri)
+        ..parent = dartCoreLib;
+  Class fooClass =
+      new Class(name: "Foo", supertype: objectSuper, fileUri: myUri)
+        ..parent = myLib;
+  Class foo2Class =
+      new Class(name: "Foo", supertype: objectSuper, fileUri: myUri)
+        ..parent = myLib;
   Class barClass = new Class(
       name: "Bar",
       supertype: objectSuper,
-      typeParameters: [new TypeParameter("X")])
+      typeParameters: [new TypeParameter("X")],
+      fileUri: myUri)
     ..parent = myLib;
   Class bazClass = new Class(
       name: "Baz",
       supertype: objectSuper,
-      typeParameters: [new TypeParameter("X"), new TypeParameter("Y")])
+      typeParameters: [new TypeParameter("X"), new TypeParameter("Y")],
+      fileUri: myUri)
     ..parent = myLib;
 
   // Test types
@@ -184,25 +194,30 @@
   check({funGenericBar: "T Function<T extends Bar<T>>(T)"}, 1);
 
   // Add some members for testing instance constants
-  Field booField = new Field.immutable(new Name("boo"), type: boolType);
+  Field booField = new Field.immutable(new Name("boo"),
+      type: boolType, fileUri: fooClass.fileUri);
   fooClass.fields.add(booField);
-  Field valueField = new Field.immutable(new Name("value"), type: intType);
+  Field valueField = new Field.immutable(new Name("value"),
+      type: intType, fileUri: foo2Class.fileUri);
   foo2Class.fields.add(valueField);
-  Field nextField = new Field.immutable(new Name("next"), type: foo2);
+  Field nextField = new Field.immutable(new Name("next"),
+      type: foo2, fileUri: foo2Class.fileUri);
   foo2Class.fields.add(nextField);
   Field xField = new Field.immutable(new Name("x"),
-      type: new TypeParameterType(
-          bazClass.typeParameters[0], Nullability.legacy));
+      type:
+          new TypeParameterType(bazClass.typeParameters[0], Nullability.legacy),
+      fileUri: bazClass.fileUri);
   bazClass.fields.add(xField);
   Field yField = new Field.immutable(new Name("y"),
-      type: new TypeParameterType(
-          bazClass.typeParameters[1], Nullability.legacy));
+      type:
+          new TypeParameterType(bazClass.typeParameters[1], Nullability.legacy),
+      fileUri: bazClass.fileUri);
   bazClass.fields.add(yField);
   FunctionNode gooFunction = new FunctionNode(new EmptyStatement(),
       typeParameters: [new TypeParameter("V")]);
   Procedure gooMethod = new Procedure(
       new Name("goo"), ProcedureKind.Method, gooFunction,
-      isStatic: true)
+      isStatic: true, fileUri: fooClass.fileUri)
     ..parent = fooClass;
 
   // Test constants
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect
index 3937612f..8155e8e 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect
@@ -12,7 +12,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = #C1 /* from null */;
+static const field dynamic _exports# = #C1;
 
 library;
 import self as self2;
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect
index 1c4f96d..8f8c65a 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect
@@ -11,7 +11,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/general/hello.dart' and 'pkg/front_end/testcases/general/map.dart'.\"}" /* from null */;
+static const field dynamic _exports# = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/general/hello.dart' and 'pkg/front_end/testcases/general/map.dart'.\"}";
 
 library;
 import self as self2;
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect
index 3937612f..8155e8e 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = #C1 /* from null */;
+static const field dynamic _exports# = #C1;
 
 library;
 import self as self2;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect
index 5a2b2fe..d25031d1 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.1.expect
@@ -2,13 +2,13 @@
 library from "package:foo/foo.dart" as foo {
 
   static field dart.core::bool* foo = true;
-  final field dynamic unique_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "package:foo/foo.dart";
 
-  final field dynamic unique_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer;
   static method main() → dynamic {
     dart.core::print(foo::foo);
   }
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect
index 404cb39..56379e6 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml.world.2.expect
@@ -2,13 +2,13 @@
 library from "package:foo/foo.dart" as foo {
 
   static field dart.core::bool* foo2 = true;
-  final field dynamic unique_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer;
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "package:foo/foo.dart";
 
-  final field dynamic unique_SimulateTransformer /* from null */;
+  final field dynamic unique_SimulateTransformer;
   static method main() → dynamic {
     dart.core::print(foo::foo2);
   }
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
index 98debfd..1e025c7 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1 /* from null */;
+  static const field dynamic _exports# = #C1;
   static method main() → dynamic {
     dart.core::print("exports");
   }
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
index 6d8b798..79292ff 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
@@ -23,7 +23,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1 /* from null */;
+  static const field dynamic _exports# = #C1;
   static method main() → dynamic {
     dart.core::print("exports!");
   }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
index 40e76bf..aaba95f 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
@@ -12,7 +12,7 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation {
-    final field wid::_Location* _location /* from null */;
+    final field wid::_Location* _location;
     synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget*
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
index 40e76bf..aaba95f 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
@@ -12,7 +12,7 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation {
-    final field wid::_Location* _location /* from null */;
+    final field wid::_Location* _location;
     synthetic constructor •({wid::_Location* $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget*
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
index d4fdb52..4d7e73b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
index 5db0fd8..f3b9199 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
index d4fdb52..4d7e73b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
index c896f26..bf659ac 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
index 23d9796..5a5826d 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect
index b666fa7..2c443b6 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.1.expect
@@ -8,7 +8,7 @@
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
     final field dart.core::Object? key;
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({dart.core::Object? key = #C1, wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : fra::Widget::key = key, super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
index 6d4e387..a13a232 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
@@ -8,7 +8,7 @@
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
     final field dart.core::Object? key;
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({dart.core::Object? key = #C1, wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : fra::Widget::key = key, super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
index 506067f..67d2066 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
index fda5bb6..ec9e667 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
@@ -7,7 +7,7 @@
       ;
   }
   abstract class Widget extends fra::Bar implements wid::_HasCreationLocation /*hasConstConstructor*/  {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     const constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super fra::Bar::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
index baa6de2..bc3a9bc 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
@@ -27,7 +27,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1 /* from null */;
+  static const field dynamic _exports# = #C1;
   static method main() → dynamic {
     dart.core::print("exports");
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
index d40f10d..2387ec3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
@@ -27,7 +27,7 @@
   export "org-dartlang-test:///lib1.dart" show x;
   export "org-dartlang-test:///lib2.dart" show x;
 
-  static const field dynamic _exports# = #C1 /* from null */;
+  static const field dynamic _exports# = #C1;
   static method main() → dynamic {
     dart.core::print("exports!");
   }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect
index 1c83cc5..394b66f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "package:flutter/src/widgets/widget_inspector.dart";
 
   abstract class Widget extends dart.core::Object implements wid::_HasCreationLocation {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     synthetic constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super dart.core::Object::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect
index 1c83cc5..394b66f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "package:flutter/src/widgets/widget_inspector.dart";
 
   abstract class Widget extends dart.core::Object implements wid::_HasCreationLocation {
-    final field wid::_Location? _location /*isLegacy, from null */;
+    final field wid::_Location? _location /*isLegacy*/;
     synthetic constructor •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → fra::Widget
       : super dart.core::Object::•(), fra::Widget::_location = $creationLocationd_0dea112b090073317d4
       ;
diff --git a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.expect b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.expect
index 54558c4..02aa3e0 100644
--- a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.expect
@@ -19,7 +19,7 @@
 export "org-dartlang-testcase:///ambiguous_main_export_lib1.dart";
 export "org-dartlang-testcase:///ambiguous_main_export_lib2.dart";
 
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
 library /*isNonNullableByDefault*/;
 import self as self3;
diff --git a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.transformed.expect
index 54558c4..02aa3e0 100644
--- a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 export "org-dartlang-testcase:///ambiguous_main_export_lib1.dart";
 export "org-dartlang-testcase:///ambiguous_main_export_lib2.dart";
 
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
 library /*isNonNullableByDefault*/;
 import self as self3;
diff --git a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.expect b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.expect
index 54558c4..02aa3e0 100644
--- a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.expect
@@ -19,7 +19,7 @@
 export "org-dartlang-testcase:///ambiguous_main_export_lib1.dart";
 export "org-dartlang-testcase:///ambiguous_main_export_lib2.dart";
 
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
 library /*isNonNullableByDefault*/;
 import self as self3;
diff --git a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.outline.expect
index efac096..35d6ebf 100644
--- a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.outline.expect
@@ -19,7 +19,7 @@
 export "org-dartlang-testcase:///ambiguous_main_export_lib1.dart";
 export "org-dartlang-testcase:///ambiguous_main_export_lib2.dart";
 
-static const field dynamic _exports# = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib1.dart' and 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib2.dart'.\"}" /*isLegacy, from null */;
+static const field dynamic _exports# = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib1.dart' and 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib2.dart'.\"}" /*isLegacy*/;
 
 library /*isNonNullableByDefault*/;
 import self as self3;
diff --git a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.transformed.expect
index 54558c4..02aa3e0 100644
--- a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 export "org-dartlang-testcase:///ambiguous_main_export_lib1.dart";
 export "org-dartlang-testcase:///ambiguous_main_export_lib2.dart";
 
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
 library /*isNonNullableByDefault*/;
 import self as self3;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
index 1ad3410..3f6e28a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
@@ -176,7 +176,7 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
 static get topLevelGetter() → core::int
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
index 1ad3410..3f6e28a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
@@ -176,7 +176,7 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
 static get topLevelGetter() → core::int
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
index 1ad3410..3f6e28a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
@@ -176,7 +176,7 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
 static get topLevelGetter() → core::int
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect
index bf1599b..2540f70 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.outline.expect
@@ -124,7 +124,7 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
-static const field dynamic _exports# = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}" /*isLegacy, from null */;
+static const field dynamic _exports# = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}" /*isLegacy*/;
 static method topLevelMethod() → core::int
   ;
 static get topLevelGetter() → core::int
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
index 1ad3410..3f6e28a 100644
--- a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
@@ -176,7 +176,7 @@
 static final field core::int topLevelDuplicateFieldAndSetter;
 static final field core::int topLevelFieldAndDuplicateSetter = 1;
 static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethod() → core::int
   return 1;
 static get topLevelGetter() → core::int
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
index 4827498..19a933b 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
@@ -1143,7 +1143,7 @@
 static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
 static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
 static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method test() → dynamic {
   self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
   self::topLevelFieldAndDuplicateSetter = self::topLevelFieldAndDuplicateSetter;
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
index 4827498..19a933b 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
@@ -1143,7 +1143,7 @@
 static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
 static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
 static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method test() → dynamic {
   self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
   self::topLevelFieldAndDuplicateSetter = self::topLevelFieldAndDuplicateSetter;
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
index 4827498..19a933b 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
@@ -1143,7 +1143,7 @@
 static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
 static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
 static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method test() → dynamic {
   self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
   self::topLevelFieldAndDuplicateSetter = self::topLevelFieldAndDuplicateSetter;
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.outline.expect
index 87c41fa..60a7204 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.outline.expect
@@ -774,7 +774,7 @@
 static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
 static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
 static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
-static const field dynamic _exports# = "{\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.\",\"topLevelLateFinalFieldAndDuplicateSetter\":\"'topLevelLateFinalFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.\"}" /*isLegacy, from null */;
+static const field dynamic _exports# = "{\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.\",\"topLevelLateFinalFieldAndDuplicateSetter\":\"'topLevelLateFinalFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.\"}" /*isLegacy*/;
 static method test() → dynamic
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
index 4827498..19a933b 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
@@ -1143,7 +1143,7 @@
 static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
 static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
 static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method test() → dynamic {
   self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
   self::topLevelFieldAndDuplicateSetter = self::topLevelFieldAndDuplicateSetter;
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
index 5582fac..f59eb15 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
@@ -165,7 +165,7 @@
   static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
   set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
 }
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethodAndSetter() → dynamic {}
 static set topLevelMethodAndSetter(dynamic value) → void {}
 static set classAndSetter(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
index 5582fac..f59eb15 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
@@ -165,7 +165,7 @@
   static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
   set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
 }
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethodAndSetter() → dynamic {}
 static set topLevelMethodAndSetter(dynamic value) → void {}
 static set classAndSetter(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
index 5582fac..f59eb15 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
@@ -165,7 +165,7 @@
   static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
   set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
 }
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethodAndSetter() → dynamic {}
 static set topLevelMethodAndSetter(dynamic value) → void {}
 static set classAndSetter(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.outline.expect
index f837d5e..9d670ab 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.outline.expect
@@ -138,7 +138,7 @@
   static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
   set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
 }
-static const field dynamic _exports# = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}" /*isLegacy, from null */;
+static const field dynamic _exports# = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}" /*isLegacy*/;
 static method topLevelMethodAndSetter() → dynamic
   ;
 static set topLevelMethodAndSetter(dynamic value) → void
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
index 5582fac..f59eb15 100644
--- a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
@@ -165,7 +165,7 @@
   static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
   set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
 }
-static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 static method topLevelMethodAndSetter() → dynamic {}
 static set topLevelMethodAndSetter(dynamic value) → void {}
 static set classAndSetter(dynamic value) → void {}
diff --git a/pkg/frontend_server/test/src/javascript_bundle_test.dart b/pkg/frontend_server/test/src/javascript_bundle_test.dart
index 02cd813..898cbcc 100644
--- a/pkg/frontend_server/test/src/javascript_bundle_test.dart
+++ b/pkg/frontend_server/test/src/javascript_bundle_test.dart
@@ -63,14 +63,19 @@
   };
   final testCoreLibraries = [
     for (String requiredLibrary in allRequiredLibraries)
-      Library(Uri.parse(requiredLibrary), classes: [
-        for (String requiredClass in allRequiredTypes[requiredLibrary] ?? [])
-          Class(name: requiredClass),
-      ], procedures: [
-        for (var requiredMethod in requiredMethods[requiredLibrary] ?? [])
-          Procedure(Name(requiredMethod), ProcedureKind.Method,
-              FunctionNode(EmptyStatement())),
-      ]),
+      Library(Uri.parse(requiredLibrary),
+          fileUri: Uri.parse(requiredLibrary),
+          classes: [
+            for (String requiredClass
+                in allRequiredTypes[requiredLibrary] ?? [])
+              Class(name: requiredClass, fileUri: Uri.parse(requiredLibrary)),
+          ],
+          procedures: [
+            for (var requiredMethod in requiredMethods[requiredLibrary] ?? [])
+              Procedure(Name(requiredMethod), ProcedureKind.Method,
+                  FunctionNode(EmptyStatement()),
+                  fileUri: Uri.parse(requiredLibrary)),
+          ]),
   ];
 
   final packageConfig = PackageConfig.parseJson({
@@ -86,12 +91,14 @@
   final multiRootScheme = 'org-dartlang-app';
 
   test('compiles JavaScript code', () async {
+    final uri = Uri.file('/c.dart');
     final library = Library(
-      Uri.file('/c.dart'),
-      fileUri: Uri.file('/c.dart'),
+      uri,
+      fileUri: uri,
       procedures: [
         Procedure(Name('ArbitrarilyChosen'), ProcedureKind.Method,
-            FunctionNode(Block([])))
+            FunctionNode(Block([])),
+            fileUri: uri)
       ],
     );
     final testComponent = Component(libraries: [library, ...testCoreLibraries]);
@@ -141,7 +148,8 @@
       fileUri: fileUri,
       procedures: [
         Procedure(Name('ArbitrarilyChosen'), ProcedureKind.Method,
-            FunctionNode(Block([])))
+            FunctionNode(Block([])),
+            fileUri: fileUri)
       ],
     );
 
@@ -182,7 +190,8 @@
       fileUri: fileUri,
       procedures: [
         Procedure(Name('ArbitrarilyChosen'), ProcedureKind.Method,
-            FunctionNode(Block([])))
+            FunctionNode(Block([])),
+            fileUri: fileUri)
       ],
     );
 
@@ -222,15 +231,17 @@
     final libraryB = Library(Uri.file('/b.dart'), fileUri: Uri.file('/b.dart'));
     libraryC.dependencies.add(LibraryDependency.import(libraryB));
     libraryB.dependencies.add(LibraryDependency.import(libraryC));
+    final uriA = Uri.file('/a.dart');
     final libraryA = Library(
-      Uri.file('/a.dart'),
-      fileUri: Uri.file('/a.dart'),
+      uriA,
+      fileUri: uriA,
       dependencies: [
         LibraryDependency.import(libraryB),
       ],
       procedures: [
         Procedure(Name('ArbitrarilyChosen'), ProcedureKind.Method,
-            FunctionNode(Block([])))
+            FunctionNode(Block([])),
+            fileUri: uriA)
       ],
     );
     final testComponent = Component(
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 20ee23e..0e9346f 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 61;
+  UInt32 formatVersion = 62;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 9e1ce0f..a473048 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -231,7 +231,7 @@
 abstract class FileUriNode extends TreeNode {
   /// The URI of the source file this node was loaded from.
   // TODO(johnniwinther): Make this non-nullable.
-  Uri? get fileUri;
+  Uri get fileUri;
 }
 
 abstract class Annotatable extends TreeNode {
@@ -256,7 +256,7 @@
 
   /// The URI of the source file this library was loaded from.
   @override
-  Uri? fileUri;
+  Uri fileUri;
 
   Version? _languageVersion;
   Version get languageVersion => _languageVersion ?? defaultLanguageVersion;
@@ -359,9 +359,11 @@
       List<Extension>? extensions,
       List<Procedure>? procedures,
       List<Field>? fields,
-      this.fileUri,
+      required this.fileUri,
       Reference? reference})
-      : this.annotations = annotations ?? <Expression>[],
+      // ignore: unnecessary_null_comparison
+      : assert(fileUri != null),
+        this.annotations = annotations ?? <Expression>[],
         this.dependencies = dependencies ?? <LibraryDependency>[],
         this.parts = parts ?? <LibraryPart>[],
         this.typedefs = typedefs ?? <Typedef>[],
@@ -769,7 +771,7 @@
 class Typedef extends NamedNode implements FileUriNode, Annotatable {
   /// The URI of the source file that contains the declaration of this typedef.
   @override
-  Uri? fileUri;
+  Uri fileUri;
 
   @override
   List<Expression> annotations = const <Expression>[];
@@ -789,12 +791,14 @@
 
   Typedef(this.name, this.type,
       {Reference? reference,
-      this.fileUri,
+      required this.fileUri,
       List<TypeParameter>? typeParameters,
       List<TypeParameter>? typeParametersOfFunctionType,
       List<VariableDeclaration>? positionalParameters,
       List<VariableDeclaration>? namedParameters})
-      : this.typeParameters = typeParameters ?? <TypeParameter>[],
+      // ignore: unnecessary_null_comparison
+      : assert(fileUri != null),
+        this.typeParameters = typeParameters ?? <TypeParameter>[],
         this.typeParametersOfFunctionType =
             typeParametersOfFunctionType ?? <TypeParameter>[],
         this.positionalParameters =
@@ -853,7 +857,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 
   @override
@@ -1037,7 +1041,7 @@
 
   /// The URI of the source file this class was loaded from.
   @override
-  Uri? fileUri;
+  Uri fileUri;
 
   final List<TypeParameter> typeParameters;
 
@@ -1146,10 +1150,12 @@
       List<Procedure>? procedures,
       List<Field>? fields,
       List<RedirectingFactoryConstructor>? redirectingFactoryConstructors,
-      this.fileUri,
+      required this.fileUri,
       Reference? reference})
       // ignore: unnecessary_null_comparison
       : assert(name != null),
+        // ignore: unnecessary_null_comparison
+        assert(fileUri != null),
         this.typeParameters = typeParameters ?? <TypeParameter>[],
         this.implementedTypes = implementedTypes ?? <Supertype>[],
         this.fieldsInternal = fields ?? <Field>[],
@@ -1413,7 +1419,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 }
 
@@ -1429,7 +1435,7 @@
   String name;
 
   /// The URI of the source file this class was loaded from.
-  Uri? fileUri;
+  Uri fileUri;
 
   /// Type parameters declared on the extension.
   final List<TypeParameter> typeParameters;
@@ -1466,10 +1472,12 @@
       List<TypeParameter>? typeParameters,
       DartType? onType,
       List<ExtensionMemberDescriptor>? members,
-      this.fileUri,
+      required this.fileUri,
       Reference? reference})
       // ignore: unnecessary_null_comparison
       : assert(name != null),
+        // ignore: unnecessary_null_comparison
+        assert(fileUri != null),
         this.typeParameters = typeParameters ?? <TypeParameter>[],
         this.members = members ?? <ExtensionMemberDescriptor>[],
         super(reference) {
@@ -1515,7 +1523,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 
   @override
@@ -1621,7 +1629,7 @@
 
   /// The URI of the source file this member was loaded from.
   @override
-  Uri? fileUri;
+  Uri fileUri;
 
   /// Flags summarizing the kinds of AST nodes contained in this member, for
   /// speeding up transformations that only affect certain types of nodes.
@@ -1643,6 +1651,8 @@
   Member(this.name, this.fileUri, Reference? reference)
       // ignore: unnecessary_null_comparison
       : assert(name != null),
+        // ignore: unnecessary_null_comparison
+        assert(fileUri != null),
         super(reference);
 
   Class? get enclosingClass => parent is Class ? parent as Class : null;
@@ -1761,7 +1771,7 @@
       bool isStatic: false,
       bool isLate: false,
       int transformerFlags: 0,
-      Uri? fileUri,
+      required Uri fileUri,
       Reference? getterReference,
       Reference? setterReference})
       : this.setterReference = setterReference ?? new Reference(),
@@ -1786,7 +1796,7 @@
       bool isStatic: false,
       bool isLate: false,
       int transformerFlags: 0,
-      Uri? fileUri,
+      required Uri fileUri,
       Reference? getterReference})
       : this.setterReference = null,
         super(name, fileUri, getterReference) {
@@ -1959,7 +1969,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 
   @override
@@ -2000,7 +2010,7 @@
       bool isSynthetic: false,
       List<Initializer>? initializers,
       int transformerFlags: 0,
-      Uri? fileUri,
+      required Uri fileUri,
       Reference? reference})
       : this.initializers = initializers ?? <Initializer>[],
         // ignore: unnecessary_null_comparison
@@ -2116,7 +2126,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 }
 
@@ -2180,7 +2190,7 @@
       List<VariableDeclaration>? positionalParameters,
       List<VariableDeclaration>? namedParameters,
       int? requiredParameterCount,
-      Uri? fileUri,
+      required Uri fileUri,
       Reference? reference})
       : this.typeArguments = typeArguments ?? <DartType>[],
         this.typeParameters = typeParameters ?? <TypeParameter>[],
@@ -2291,7 +2301,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 }
 
@@ -2546,7 +2556,7 @@
       bool isExtensionMember: false,
       bool isSynthetic: false,
       int transformerFlags: 0,
-      Uri? fileUri,
+      required Uri fileUri,
       Reference? reference,
       ProcedureStubKind stubKind: ProcedureStubKind.Regular,
       Member? stubTarget})
@@ -2572,7 +2582,7 @@
       bool isExtensionMember: false,
       bool isSynthetic: false,
       int transformerFlags: 0,
-      Uri? fileUri,
+      required Uri fileUri,
       Reference? reference,
       this.stubKind: ProcedureStubKind.Regular,
       this.stubTargetReference})
@@ -2796,7 +2806,7 @@
 
   @override
   Location? _getLocationInEnclosingFile(int offset) {
-    return _getLocationInComponent(enclosingComponent, fileUri!, offset);
+    return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
 }
 
@@ -13589,7 +13599,7 @@
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Library dummyLibrary = new Library(dummyUri);
+final Library dummyLibrary = new Library(dummyUri, fileUri: dummyUri);
 
 /// Non-nullable [LibraryDependency] dummy value.
 ///
@@ -13618,7 +13628,7 @@
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Class dummyClass = new Class(name: '');
+final Class dummyClass = new Class(name: '', fileUri: dummyUri);
 
 /// Non-nullable [Constructor] dummy value.
 ///
@@ -13626,35 +13636,36 @@
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
 final Constructor dummyConstructor =
-    new Constructor(dummyFunctionNode, name: dummyName);
+    new Constructor(dummyFunctionNode, name: dummyName, fileUri: dummyUri);
 
 /// Non-nullable [Extension] dummy value.
 ///
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Extension dummyExtension = new Extension(name: '');
+final Extension dummyExtension = new Extension(name: '', fileUri: dummyUri);
 
 /// Non-nullable [Member] dummy value.
 ///
 /// This can be used for instance as a dummy initial value for the
 /// `List.filled` constructor.
-final Member dummyMember = new Field.mutable(new _PublicName(''));
+final Member dummyMember = new Field.mutable(dummyName, fileUri: dummyUri);
 
 /// Non-nullable [Procedure] dummy value.
 ///
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Procedure dummyProcedure =
-    new Procedure(dummyName, ProcedureKind.Method, dummyFunctionNode);
+final Procedure dummyProcedure = new Procedure(
+    dummyName, ProcedureKind.Method, dummyFunctionNode,
+    fileUri: dummyUri);
 
 /// Non-nullable [Field] dummy value.
 ///
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Field dummyField = new Field.mutable(dummyName);
+final Field dummyField = new Field.mutable(dummyName, fileUri: dummyUri);
 
 /// Non-nullable [RedirectingFactoryConstructor] dummy value.
 ///
@@ -13662,14 +13673,14 @@
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
 final RedirectingFactoryConstructor dummyRedirectingFactoryConstructor =
-    new RedirectingFactoryConstructor(null, name: dummyName);
+    new RedirectingFactoryConstructor(null, name: dummyName, fileUri: dummyUri);
 
 /// Non-nullable [Typedef] dummy value.
 ///
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Typedef dummyTypedef = new Typedef('', null);
+final Typedef dummyTypedef = new Typedef('', null, fileUri: dummyUri);
 
 /// Non-nullable [Initializer] dummy value.
 ///
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 0d99e60..7ed437e 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -469,8 +469,8 @@
         growable: useGrowableLists);
   }
 
-  Uri? readUriReference() {
-    return _sourceUriTable[readUInt30()];
+  Uri readUriReference() {
+    return _sourceUriTable[readUInt30()]!;
   }
 
   String readStringReference() {
@@ -1110,19 +1110,20 @@
     CanonicalName canonicalName = readNonNullCanonicalNameReference();
     Reference reference = canonicalName.reference;
     Library? library = reference.node as Library?;
+    String? name = readStringOrNullIfEmpty();
+
+    // TODO(jensj): We currently save (almost the same) uri twice.
+    Uri fileUri = readUriReference();
+
     if (alwaysCreateNewNamedNodes) {
       library = null;
     }
     if (library == null) {
-      library =
-          new Library(Uri.parse(canonicalName.name), reference: reference);
+      library = new Library(Uri.parse(canonicalName.name),
+          reference: reference, fileUri: fileUri);
       component.libraries.add(library..parent = component);
     }
     _currentLibrary = library;
-    String? name = readStringOrNullIfEmpty();
-
-    // TODO(jensj): We currently save (almost the same) uri twice.
-    Uri? fileUri = readUriReference();
 
     List<String>? problemsAsJson = readListOfStrings();
 
@@ -1245,11 +1246,11 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     int fileOffset = readOffset();
     String name = readStringReference();
     if (node == null) {
-      node = new Typedef(name, null, reference: reference);
+      node = new Typedef(name, null, reference: reference, fileUri: fileUri);
     }
     node.annotations = readAnnotationList(node);
     readAndPushTypeParameterList(node.typeParameters, node);
@@ -1293,14 +1294,15 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     int startFileOffset = readOffset();
     int fileOffset = readOffset();
     int fileEndOffset = readOffset();
     int flags = readByte();
     String name = readStringReference();
     if (node == null) {
-      node = new Class(name: name, reference: reference)..dirty = false;
+      node = new Class(name: name, reference: reference, fileUri: fileUri)
+        ..dirty = false;
     }
 
     node.startFileOffset = startFileOffset;
@@ -1351,17 +1353,21 @@
     }
 
     String name = readStringReference();
-    if (node == null) {
-      node = new Extension(name: name, reference: reference);
-    }
     assert(() {
       debugPath.add(name);
       return true;
     }());
 
-    node.annotations = readAnnotationList(node);
+    List<Expression> annotations = readAnnotationList();
 
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
+
+    if (node == null) {
+      node = new Extension(name: name, reference: reference, fileUri: fileUri);
+    }
+    node.annotations = annotations;
+    setParents(annotations, node);
+
     node.fileOffset = readOffset();
 
     readAndPushTypeParameterList(node.typeParameters, node);
@@ -1443,7 +1449,7 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     int fileOffset = readOffset();
     int fileEndOffset = readOffset();
     int flags = readUInt30();
@@ -1451,9 +1457,12 @@
     if (node == null) {
       if (setterReference != null) {
         node = new Field.mutable(name,
-            getterReference: getterReference, setterReference: setterReference);
+            getterReference: getterReference,
+            setterReference: setterReference,
+            fileUri: fileUri);
       } else {
-        node = new Field.immutable(name, getterReference: getterReference);
+        node = new Field.immutable(name,
+            getterReference: getterReference, fileUri: fileUri);
       }
     }
     List<Expression> annotations = readAnnotationList(node);
@@ -1487,7 +1496,7 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     int startFileOffset = readOffset();
     int fileOffset = readOffset();
     int fileEndOffset = readOffset();
@@ -1500,7 +1509,8 @@
     }());
     FunctionNode function = readFunctionNode();
     if (node == null) {
-      node = new Constructor(function, reference: reference, name: name);
+      node = new Constructor(function,
+          reference: reference, name: name, fileUri: fileUri);
     }
     pushVariableDeclarations(function.positionalParameters);
     pushVariableDeclarations(function.namedParameters);
@@ -1530,7 +1540,7 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     int startFileOffset = readOffset();
     int fileOffset = readOffset();
     int fileEndOffset = readOffset();
@@ -1553,7 +1563,8 @@
     FunctionNode function = readFunctionNode(
         lazyLoadBody: !readFunctionNodeNow, outerEndOffset: endOffset);
     if (node == null) {
-      node = new Procedure(name, kind, function, reference: reference);
+      node = new Procedure(name, kind, function,
+          reference: reference, fileUri: fileUri);
     } else {
       assert(node.kind == kind);
     }
@@ -1590,14 +1601,14 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    Uri? fileUri = readUriReference();
+    Uri fileUri = readUriReference();
     int fileOffset = readOffset();
     int fileEndOffset = readOffset();
     int flags = readByte();
     Name name = readName();
     if (node == null) {
       node = new RedirectingFactoryConstructor(null,
-          reference: reference, name: name);
+          reference: reference, name: name, fileUri: fileUri);
     }
     List<Expression> annotations = readAnnotationList(node);
     assert(() {
@@ -2315,7 +2326,7 @@
   }
 
   Expression _readFileUriExpression() {
-    Uri fileUri = readUriReference()!;
+    Uri fileUri = readUriReference();
     int offset = readOffset();
     return new FileUriExpression(readExpression(), fileUri)
       ..fileOffset = offset;
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index e7271c5..3805110 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -274,7 +274,7 @@
   }
 
   // Returns the new active file uri.
-  void writeUriReference(Uri? uri) {
+  void writeUriReference(Uri uri) {
     final int index = _sourceUriIndexer.put(uri);
     writeUInt30(index);
     if (!_currentlyInNonimplementation) {
@@ -784,7 +784,7 @@
     // Write data.
     int i = 0;
     Uint8List buffer = new Uint8List(1 << 16);
-    for (Uri? uri in _sourceUriIndexer.index.keys) {
+    for (Uri uri in _sourceUriIndexer.index.keys) {
       index[i] = getBufferOffset();
       Source? source = uriToSource[uri];
       if (source == null ||
@@ -795,7 +795,7 @@
             <int>[], const <int>[], source?.importUri, source?.fileUri);
       }
 
-      String uriAsString = uri == null ? "" : "$uri";
+      String uriAsString = "$uri";
       outputStringViaBuffer(uriAsString, buffer);
 
       writeByteList(source.source);
@@ -2863,13 +2863,11 @@
 
 class UriIndexer {
   // Note that the iteration order is important.
-  final Map<Uri?, int> index = new Map<Uri?, int>();
+  final Map<Uri, int> index = new Map<Uri, int>();
 
-  UriIndexer() {
-    put(null);
-  }
+  UriIndexer();
 
-  int put(Uri? uri) {
+  int put(Uri uri) {
     int? result = index[uri];
     if (result == null) {
       result = index.length;
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 523a5a2..752f84b 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -174,7 +174,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 61;
+  static const int BinaryFormatVersion = 62;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 6c76c2f..a399b3a 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -99,7 +99,9 @@
 
   T clone<T extends TreeNode>(T node) {
     final Uri? activeFileUriSaved = _activeFileUri;
-    if (node is FileUriNode) _activeFileUri = node.fileUri ?? _activeFileUri;
+    if (node is FileUriNode) {
+      _activeFileUri = node.fileUri;
+    }
     final TreeNode result = node.accept(this)
       ..fileOffset = _cloneFileOffset(node.fileOffset);
     _activeFileUri = activeFileUriSaved;
@@ -109,7 +111,9 @@
   T? cloneOptional<T extends TreeNode>(T? node) {
     if (node == null) return null;
     final Uri? activeFileUriSaved = _activeFileUri;
-    if (node is FileUriNode) _activeFileUri = node.fileUri ?? _activeFileUri;
+    if (node is FileUriNode) {
+      _activeFileUri = node.fileUri;
+    }
     TreeNode? result = node.accept(this);
     if (result != null) result.fileOffset = _cloneFileOffset(node.fileOffset);
     _activeFileUri = activeFileUriSaved;
@@ -128,8 +132,8 @@
 
   Uri? _activeFileUriFromContext(TreeNode? node) {
     while (node != null) {
-      if (node is FileUriNode && node.fileUri != null) {
-        return node.fileUri!;
+      if (node is FileUriNode) {
+        return node.fileUri;
       }
       node = node.parent;
     }
@@ -754,7 +758,7 @@
 
   Constructor cloneConstructor(Constructor node, Reference? reference) {
     final Uri? activeFileUriSaved = _activeFileUri;
-    _activeFileUri = node.fileUri ?? _activeFileUri;
+    _activeFileUri = node.fileUri;
 
     Constructor result = new Constructor(
       super.clone(node.function),
@@ -764,7 +768,7 @@
       isSynthetic: node.isSynthetic,
       initializers: node.initializers.map(super.clone).toList(),
       transformerFlags: node.transformerFlags,
-      fileUri: _activeFileUri,
+      fileUri: node.fileUri,
       reference: reference,
     )
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
@@ -779,12 +783,12 @@
 
   Procedure cloneProcedure(Procedure node, Reference? reference) {
     final Uri? activeFileUriSaved = _activeFileUri;
-    _activeFileUri = node.fileUri ?? _activeFileUri;
+    _activeFileUri = node.fileUri;
     Procedure result = new Procedure(
         node.name, node.kind, super.clone(node.function),
         reference: reference,
         transformerFlags: node.transformerFlags,
-        fileUri: _activeFileUri,
+        fileUri: node.fileUri,
         stubKind: node.stubKind,
         stubTarget: node.stubTarget)
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
@@ -802,7 +806,7 @@
   Field cloneField(
       Field node, Reference? getterReference, Reference? setterReference) {
     final Uri? activeFileUriSaved = _activeFileUri;
-    _activeFileUri = node.fileUri ?? _activeFileUri;
+    _activeFileUri = node.fileUri;
 
     Field result;
     if (node.hasSetter) {
@@ -810,7 +814,7 @@
           type: visitType(node.type),
           initializer: cloneOptional(node.initializer),
           transformerFlags: node.transformerFlags,
-          fileUri: _activeFileUri,
+          fileUri: node.fileUri,
           getterReference: getterReference,
           setterReference: setterReference);
     } else {
@@ -822,7 +826,7 @@
           type: visitType(node.type),
           initializer: cloneOptional(node.initializer),
           transformerFlags: node.transformerFlags,
-          fileUri: _activeFileUri,
+          fileUri: node.fileUri,
           getterReference: getterReference);
     }
     result
@@ -840,7 +844,7 @@
   RedirectingFactoryConstructor cloneRedirectingFactoryConstructor(
       RedirectingFactoryConstructor node, Reference? reference) {
     final Uri? activeFileUriSaved = _activeFileUri;
-    _activeFileUri = node.fileUri ?? _activeFileUri;
+    _activeFileUri = node.fileUri;
 
     prepareTypeParameters(node.typeParameters);
     RedirectingFactoryConstructor result = new RedirectingFactoryConstructor(
@@ -855,7 +859,7 @@
             node.positionalParameters.map(super.clone).toList(),
         namedParameters: node.namedParameters.map(super.clone).toList(),
         requiredParameterCount: node.requiredParameterCount,
-        fileUri: _activeFileUri,
+        fileUri: node.fileUri,
         reference: reference)
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
diff --git a/pkg/kernel/lib/testing/mock_sdk_component.dart b/pkg/kernel/lib/testing/mock_sdk_component.dart
index b317b60..4c444e2 100644
--- a/pkg/kernel/lib/testing/mock_sdk_component.dart
+++ b/pkg/kernel/lib/testing/mock_sdk_component.dart
@@ -9,17 +9,30 @@
 /// Returns a [Component] object containing empty definitions of core SDK
 /// classes.
 Component createMockSdkComponent() {
-  Library coreLib = new Library(Uri.parse('dart:core'), name: 'dart.core');
-  Library asyncLib = new Library(Uri.parse('dart:async'), name: 'dart.async');
-  Library internalLib =
-      new Library(Uri.parse('dart:_internal'), name: 'dart._internal');
+  Library coreLib = new Library(Uri.parse('dart:core'),
+      name: 'dart.core', fileUri: Uri.parse('dart:core'));
+  Library asyncLib = new Library(Uri.parse('dart:async'),
+      name: 'dart.async', fileUri: Uri.parse('dart:async'));
+  Library internalLib = new Library(Uri.parse('dart:_internal'),
+      name: 'dart._internal', fileUri: Uri.parse('dart:_internal'));
 
-  Class addClass(Library lib, Class c) {
+  Class objectClass = new Class(name: 'Object', fileUri: coreLib.fileUri);
+  coreLib.addClass(objectClass);
+
+  Class addClass(Library lib, String name,
+      {Supertype supertype,
+      List<TypeParameter> typeParameters,
+      List<Supertype> implementedTypes}) {
+    Class c = new Class(
+        name: name,
+        supertype: supertype ?? objectClass.asThisSupertype,
+        typeParameters: typeParameters,
+        implementedTypes: implementedTypes,
+        fileUri: lib.fileUri);
     lib.addClass(c);
     return c;
   }
 
-  Class objectClass = addClass(coreLib, new Class(name: 'Object'));
   InterfaceType objectType =
       new InterfaceType(objectClass, coreLib.nonNullable);
 
@@ -27,48 +40,33 @@
     return new TypeParameter(name, bound ?? objectType);
   }
 
-  Class class_(String name,
-      {Supertype supertype,
-      List<TypeParameter> typeParameters,
-      List<Supertype> implementedTypes}) {
-    return new Class(
-        name: name,
-        supertype: supertype ?? objectClass.asThisSupertype,
-        typeParameters: typeParameters,
-        implementedTypes: implementedTypes);
-  }
-
-  addClass(coreLib, class_('Null'));
-  addClass(coreLib, class_('bool'));
-  Class num = addClass(coreLib, class_('num'));
-  addClass(coreLib, class_('String'));
+  addClass(coreLib, 'Null');
+  addClass(coreLib, 'bool');
+  Class num = addClass(coreLib, 'num');
+  addClass(coreLib, 'String');
   Class iterable =
-      addClass(coreLib, class_('Iterable', typeParameters: [typeParam('T')]));
+      addClass(coreLib, 'Iterable', typeParameters: [typeParam('T')]);
   {
     TypeParameter T = typeParam('T');
-    addClass(
-        coreLib,
-        class_('List', typeParameters: [
-          T
-        ], implementedTypes: [
-          new Supertype(iterable, [
-            new TypeParameterType.withDefaultNullabilityForLibrary(T, coreLib)
-          ])
-        ]));
+    addClass(coreLib, 'List', typeParameters: [
+      T
+    ], implementedTypes: [
+      new Supertype(iterable,
+          [new TypeParameterType.withDefaultNullabilityForLibrary(T, coreLib)])
+    ]);
   }
-  addClass(
-      coreLib, class_('Map', typeParameters: [typeParam('K'), typeParam('V')]));
-  addClass(coreLib, class_('int', supertype: num.asThisSupertype));
-  addClass(coreLib, class_('double', supertype: num.asThisSupertype));
-  addClass(coreLib, class_('Iterator', typeParameters: [typeParam('T')]));
-  addClass(coreLib, class_('Symbol'));
-  addClass(coreLib, class_('Type'));
-  addClass(coreLib, class_('Function'));
-  addClass(coreLib, class_('Invocation'));
-  addClass(coreLib, class_('Future', typeParameters: [typeParam('T')]));
-  addClass(asyncLib, class_('FutureOr', typeParameters: [typeParam('T')]));
-  addClass(asyncLib, class_('Stream', typeParameters: [typeParam('T')]));
-  addClass(internalLib, class_('Symbol'));
+  addClass(coreLib, 'Map', typeParameters: [typeParam('K'), typeParam('V')]);
+  addClass(coreLib, 'int', supertype: num.asThisSupertype);
+  addClass(coreLib, 'double', supertype: num.asThisSupertype);
+  addClass(coreLib, 'Iterator', typeParameters: [typeParam('T')]);
+  addClass(coreLib, 'Symbol');
+  addClass(coreLib, 'Type');
+  addClass(coreLib, 'Function');
+  addClass(coreLib, 'Invocation');
+  addClass(coreLib, 'Future', typeParameters: [typeParam('T')]);
+  addClass(asyncLib, 'FutureOr', typeParameters: [typeParam('T')]);
+  addClass(asyncLib, 'Stream', typeParameters: [typeParam('T')]);
+  addClass(internalLib, 'Symbol');
 
   return new Component(libraries: [coreLib, asyncLib, internalLib]);
 }
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index 2782dd1..691610d 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -501,8 +501,9 @@
           ..defaultType = type;
       }
     }
+    Uri uri = new Uri.file("test.lib");
     List<DartType> defaultTypes = calculateBounds(typeParameters, objectClass,
-        new Library(new Uri.file("test.lib"))..isNonNullableByDefault = true);
+        new Library(uri, fileUri: uri)..isNonNullableByDefault = true);
     for (int i = 0; i < typeParameters.length; i++) {
       typeParameters[i].defaultType = defaultTypes[i];
     }
diff --git a/pkg/kernel/lib/text/serializer_combinators.dart b/pkg/kernel/lib/text/serializer_combinators.dart
index 7179336..7af498e 100644
--- a/pkg/kernel/lib/text/serializer_combinators.dart
+++ b/pkg/kernel/lib/text/serializer_combinators.dart
@@ -594,6 +594,69 @@
       this.sixth, this.seventh);
 }
 
+class Tuple8Serializer<T1, T2, T3, T4, T5, T6, T7, T8>
+    extends TextSerializer<Tuple8<T1, T2, T3, T4, T5, T6, T7, T8>> {
+  final TextSerializer<T1> first;
+  final TextSerializer<T2> second;
+  final TextSerializer<T3> third;
+  final TextSerializer<T4> fourth;
+  final TextSerializer<T5> fifth;
+  final TextSerializer<T6> sixth;
+  final TextSerializer<T7> seventh;
+  final TextSerializer<T8> eighth;
+
+  const Tuple8Serializer(this.first, this.second, this.third, this.fourth,
+      this.fifth, this.sixth, this.seventh, this.eighth);
+
+  Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> readFrom(
+      Iterator<Object?> stream, DeserializationState? state) {
+    return new Tuple8(
+        first.readFrom(stream, state),
+        second.readFrom(stream, state),
+        third.readFrom(stream, state),
+        fourth.readFrom(stream, state),
+        fifth.readFrom(stream, state),
+        sixth.readFrom(stream, state),
+        seventh.readFrom(stream, state),
+        eighth.readFrom(stream, state));
+  }
+
+  void writeTo(
+      StringBuffer buffer,
+      Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> object,
+      SerializationState? state) {
+    first.writeTo(buffer, object.first, state);
+    if (!second.isEmpty) buffer.write(' ');
+    second.writeTo(buffer, object.second, state);
+    if (!third.isEmpty) buffer.write(' ');
+    third.writeTo(buffer, object.third, state);
+    if (!fourth.isEmpty) buffer.write(' ');
+    fourth.writeTo(buffer, object.fourth, state);
+    if (!fifth.isEmpty) buffer.write(' ');
+    fifth.writeTo(buffer, object.fifth, state);
+    if (!sixth.isEmpty) buffer.write(' ');
+    sixth.writeTo(buffer, object.sixth, state);
+    if (!seventh.isEmpty) buffer.write(' ');
+    seventh.writeTo(buffer, object.seventh, state);
+    if (!eighth.isEmpty) buffer.write(' ');
+    eighth.writeTo(buffer, object.eighth, state);
+  }
+}
+
+class Tuple8<T1, T2, T3, T4, T5, T6, T7, T8> {
+  final T1 first;
+  final T2 second;
+  final T3 third;
+  final T4 fourth;
+  final T5 fifth;
+  final T6 sixth;
+  final T7 seventh;
+  final T8 eighth;
+
+  const Tuple8(this.first, this.second, this.third, this.fourth, this.fifth,
+      this.sixth, this.seventh, this.eighth);
+}
+
 // A serializer/deserializer for lists.
 class ListSerializer<T> extends TextSerializer<List<T>> {
   final TextSerializer<T> elements;
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index f544010..5abc570 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1966,83 +1966,93 @@
 }
 
 TextSerializer<Field> mutableFieldSerializer =
-    Wrapped<Tuple4<Name, int, DartType, Expression?>, Field>(
-        (w) => Tuple4(w.name, w.flags, w.type, w.initializer),
-        (u) => Field.mutable(u.first, type: u.third, initializer: u.fourth)
+    Wrapped<Tuple5<Name, int, DartType, Expression?, Uri>, Field>(
+        (w) => Tuple5(w.name, w.flags, w.type, w.initializer, w.fileUri),
+        (u) => Field.mutable(u.first,
+            type: u.third, initializer: u.fourth, fileUri: u.fifth)
           ..flags = u.second,
-        Tuple4Serializer(nameSerializer, fieldFlagsSerializer,
-            dartTypeSerializer, nullableExpressionSerializer));
+        Tuple5Serializer(nameSerializer, fieldFlagsSerializer,
+            dartTypeSerializer, nullableExpressionSerializer, UriSerializer()));
 
 TextSerializer<Field> immutableFieldSerializer =
-    Wrapped<Tuple4<Name, int, DartType, Expression?>, Field>(
-        (w) => Tuple4(w.name, w.flags, w.type, w.initializer),
-        (u) => Field.immutable(u.first, type: u.third, initializer: u.fourth)
+    Wrapped<Tuple5<Name, int, DartType, Expression?, Uri>, Field>(
+        (w) => Tuple5(w.name, w.flags, w.type, w.initializer, w.fileUri),
+        (u) => Field.immutable(u.first,
+            type: u.third, initializer: u.fourth, fileUri: u.fifth)
           ..flags = u.second,
-        Tuple4Serializer(nameSerializer, fieldFlagsSerializer,
-            dartTypeSerializer, nullableExpressionSerializer));
+        Tuple5Serializer(nameSerializer, fieldFlagsSerializer,
+            dartTypeSerializer, nullableExpressionSerializer, UriSerializer()));
 
 TextSerializer<Procedure> methodSerializer =
-    Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
-        (w) => Tuple3(w.name, w.flags, w.function),
+    Wrapped<Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+        (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
         (u) =>
-            Procedure(u.first, ProcedureKind.Method, u.third)..flags = u.second,
-        Tuple3Serializer(
-            nameSerializer, procedureFlagsSerializer, functionNodeSerializer));
+            Procedure(u.first, ProcedureKind.Method, u.third, fileUri: u.fourth)
+              ..flags = u.second,
+        Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+            functionNodeSerializer, UriSerializer()));
 
 TextSerializer<Procedure> getterSerializer =
-    Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
-        (w) => Tuple3(w.name, w.flags, w.function),
+    Wrapped<Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+        (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
         (u) =>
-            Procedure(u.first, ProcedureKind.Getter, u.third)..flags = u.second,
-        Tuple3Serializer(
-            nameSerializer, procedureFlagsSerializer, functionNodeSerializer));
+            Procedure(u.first, ProcedureKind.Getter, u.third, fileUri: u.fourth)
+              ..flags = u.second,
+        Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+            functionNodeSerializer, UriSerializer()));
 
 TextSerializer<Procedure> setterSerializer =
-    Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
-        (w) => Tuple3(w.name, w.flags, w.function),
+    Wrapped<Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+        (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
         (u) =>
-            Procedure(u.first, ProcedureKind.Setter, u.third)..flags = u.second,
-        Tuple3Serializer(
-            nameSerializer, procedureFlagsSerializer, functionNodeSerializer));
+            Procedure(u.first, ProcedureKind.Setter, u.third, fileUri: u.fourth)
+              ..flags = u.second,
+        Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+            functionNodeSerializer, UriSerializer()));
 
 TextSerializer<Procedure> operatorSerializer =
-    Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
-        (w) => Tuple3(w.name, w.flags, w.function),
-        (u) => Procedure(u.first, ProcedureKind.Operator, u.third)
+    Wrapped<Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+        (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
+        (u) => Procedure(u.first, ProcedureKind.Operator, u.third,
+            fileUri: u.fourth)
           ..flags = u.second,
-        Tuple3Serializer(
-            nameSerializer, procedureFlagsSerializer, functionNodeSerializer));
+        Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+            functionNodeSerializer, UriSerializer()));
 
-TextSerializer<Procedure> factorySerializer =
-    Wrapped<Tuple3<Name, int, FunctionNode>, Procedure>(
-        (w) => Tuple3(w.name, w.flags, w.function),
-        (u) => Procedure(u.first, ProcedureKind.Factory, u.third)
-          ..flags = u.second,
-        Tuple3Serializer(
-            nameSerializer, procedureFlagsSerializer, functionNodeSerializer));
+TextSerializer<Procedure> factorySerializer = Wrapped<
+        Tuple4<Name, int, FunctionNode, Uri>, Procedure>(
+    (w) => Tuple4(w.name, w.flags, w.function, w.fileUri),
+    (u) => Procedure(u.first, ProcedureKind.Factory, u.third, fileUri: u.fourth)
+      ..flags = u.second,
+    Tuple4Serializer(nameSerializer, procedureFlagsSerializer,
+        functionNodeSerializer, UriSerializer()));
 
 TextSerializer<Constructor> constructorSerializer = Wrapped<
-        Tuple3<Name, int, Tuple2<FunctionNode, List<Initializer>?>>,
+        Tuple4<Name, int, Tuple2<FunctionNode, List<Initializer>?>, Uri>,
         Constructor>(
-    (w) => Tuple3(w.name, w.flags, Tuple2(w.function, w.initializers)),
-    (u) =>
-        Constructor(u.third.first, name: u.first, initializers: u.third.second)
-          ..flags = u.second,
-    Tuple3Serializer(nameSerializer, constructorFlagsSerializer,
-        functionNodeWithInitializersSerializer));
+    (w) =>
+        Tuple4(w.name, w.flags, Tuple2(w.function, w.initializers), w.fileUri),
+    (u) => Constructor(u.third.first,
+        name: u.first, initializers: u.third.second, fileUri: u.fourth)
+      ..flags = u.second,
+    Tuple4Serializer(nameSerializer, constructorFlagsSerializer,
+        functionNodeWithInitializersSerializer, UriSerializer()));
 
 TextSerializer<RedirectingFactoryConstructor>
-    redirectingFactoryConstructorSerializer = Wrapped<
-            Tuple4<
+    redirectingFactoryConstructorSerializer
+    // Comment added to direct formatter.
+    = Wrapped<
+            Tuple5<
                 Name,
                 int,
                 CanonicalName,
                 Tuple2<
                     List<TypeParameter>,
                     Tuple4<List<VariableDeclaration>, List<VariableDeclaration>,
-                        List<VariableDeclaration>, List<DartType>>>>,
+                        List<VariableDeclaration>, List<DartType>>>,
+                Uri>,
             RedirectingFactoryConstructor>(
-        (w) => Tuple4(
+        (w) => Tuple5(
             w.name,
             w.flags,
             w.targetReference!.canonicalName!,
@@ -2056,7 +2066,8 @@
                         .skip(w.requiredParameterCount)
                         .toList(),
                     w.namedParameters,
-                    w.typeArguments))),
+                    w.typeArguments)),
+            w.fileUri),
         (u) => RedirectingFactoryConstructor(u.third.reference,
             name: u.first,
             typeParameters: u.fourth.first,
@@ -2064,9 +2075,10 @@
                 u.fourth.second.first + u.fourth.second.second,
             requiredParameterCount: u.fourth.second.first.length,
             namedParameters: u.fourth.second.third,
-            typeArguments: u.fourth.second.fourth)
+            typeArguments: u.fourth.second.fourth,
+            fileUri: u.fifth)
           ..flags = u.second,
-        Tuple4Serializer(
+        Tuple5Serializer(
             nameSerializer,
             redirectingFactoryConstructorFlagsSerializer,
             CanonicalNameSerializer(),
@@ -2076,7 +2088,8 @@
                     ListSerializer(variableDeclarationSerializer),
                     ListSerializer(variableDeclarationSerializer),
                     ListSerializer(variableDeclarationSerializer),
-                    ListSerializer(dartTypeSerializer)))));
+                    ListSerializer(dartTypeSerializer))),
+            UriSerializer()));
 
 Case<Member> memberSerializer = new Case.uninitialized(const MemberTagger());
 
@@ -2117,11 +2130,11 @@
         Case(LibraryFlagTagger(), convertFlagsMap(libraryFlagToName))));
 
 TextSerializer<Library> librarySerializer = new Wrapped<
-    Tuple7<Uri, int, List<LibraryPart>, List<Member>, List<Class>,
-        List<Typedef>, List<Extension>>,
+    Tuple8<Uri, int, List<LibraryPart>, List<Member>, List<Class>,
+        List<Typedef>, List<Extension>, Uri>,
     Library>(
-  (w) => Tuple7(w.importUri, w.flags, w.parts, [...w.fields, ...w.procedures],
-      w.classes, w.typedefs, w.extensions),
+  (w) => Tuple8(w.importUri, w.flags, w.parts, [...w.fields, ...w.procedures],
+      w.classes, w.typedefs, w.extensions, w.fileUri),
   (u) => Library(u.first,
       parts: u.third,
       fields: u.fourth.where((m) => m is Field).cast<Field>().toList(),
@@ -2129,16 +2142,18 @@
           u.fourth.where((m) => m is Procedure).cast<Procedure>().toList(),
       classes: u.fifth,
       typedefs: u.sixth,
-      extensions: u.seventh)
+      extensions: u.seventh,
+      fileUri: u.eighth)
     ..flags = u.second,
-  Tuple7Serializer(
+  Tuple8Serializer(
       UriSerializer(),
       libraryFlagsSerializer,
       ListSerializer(libraryPartSerializer),
       ListSerializer(memberSerializer),
       ListSerializer(classSerializer),
       ListSerializer(typedefSerializer),
-      ListSerializer(extensionSerializer)),
+      ListSerializer(extensionSerializer),
+      UriSerializer()),
 );
 
 TextSerializer<Component> componentSerializer =
@@ -2387,43 +2402,47 @@
     ListSerializer(Case(ClassFlagTagger(), convertFlagsMap(classFlagToName))));
 
 TextSerializer<Class> classSerializer = Wrapped<
-        Tuple3<
+        Tuple4<
             String,
             int,
+            Uri,
             Tuple2<
                 List<TypeParameter>,
                 /* Comment added to guide formatting. */
                 Tuple4<Supertype?, Supertype?, List<Supertype>, List<Member>>>>,
         Class>(
-    (w) => Tuple3(
+    (w) => Tuple4(
         w.name,
         w.flags,
+        w.fileUri,
         Tuple2(
             w.typeParameters,
             Tuple4(w.supertype, w.mixedInType, w.implementedTypes,
                 <Member>[...w.fields, ...w.constructors, ...w.procedures]))),
     (u) => Class(
         name: u.first,
-        typeParameters: u.third.first,
-        supertype: u.third.second.first,
-        mixedInType: u.third.second.second,
-        implementedTypes: u.third.second.third,
-        fields: u.third.second.fourth
+        typeParameters: u.fourth.first,
+        supertype: u.fourth.second.first,
+        mixedInType: u.fourth.second.second,
+        implementedTypes: u.fourth.second.third,
+        fields: u.fourth.second.fourth
             .where((m) => m is Field)
             .cast<Field>()
             .toList(),
-        constructors: u.third.second.fourth
+        constructors: u.fourth.second.fourth
             .where((m) => m is Constructor)
             .cast<Constructor>()
             .toList(),
-        procedures: u.third.second.fourth
+        procedures: u.fourth.second.fourth
             .where((m) => m is Procedure)
             .cast<Procedure>()
-            .toList())
+            .toList(),
+        fileUri: u.third)
       ..flags = u.second,
-    Tuple3Serializer(
+    Tuple4Serializer(
         DartString(),
         classFlagsSerializer,
+        UriSerializer(),
         Bind(
             typeParametersSerializer,
             Tuple4Serializer(
@@ -2432,13 +2451,13 @@
                 ListSerializer(supertypeSerializer),
                 ListSerializer(memberSerializer)))));
 
-TextSerializer<Typedef> typedefSerializer =
-    Wrapped<Tuple2<String, Tuple2<List<TypeParameter>, DartType>>, Typedef>(
-        (w) => Tuple2(w.name, Tuple2(w.typeParameters, w.type!)),
-        (u) =>
-            Typedef(u.first, u.second.second, typeParameters: u.second.first),
-        Tuple2Serializer(
-            DartString(), Bind(typeParametersSerializer, dartTypeSerializer)));
+TextSerializer<Typedef> typedefSerializer = Wrapped<
+        Tuple3<String, Tuple2<List<TypeParameter>, DartType>, Uri>, Typedef>(
+    (w) => Tuple3(w.name, Tuple2(w.typeParameters, w.type!), w.fileUri),
+    (u) => Typedef(u.first, u.second.second,
+        typeParameters: u.second.first, fileUri: u.third),
+    Tuple3Serializer(DartString(),
+        Bind(typeParametersSerializer, dartTypeSerializer), UriSerializer()));
 
 const Map<int, String> extensionMemberDescriptorFlagToName = const {
   ExtensionMemberDescriptor.FlagStatic: "static",
@@ -2498,19 +2517,22 @@
             CanonicalNameSerializer()));
 
 TextSerializer<Extension> extensionSerializer = Wrapped<
-        Tuple3<String, Tuple2<List<TypeParameter>, DartType>,
-            List<ExtensionMemberDescriptor>>,
+        Tuple4<String, Tuple2<List<TypeParameter>, DartType>,
+            List<ExtensionMemberDescriptor>, Uri>,
         Extension>(
-    (w) => Tuple3(w.name, Tuple2(w.typeParameters, w.onType), w.members),
+    (w) => Tuple4(
+        w.name, Tuple2(w.typeParameters, w.onType), w.members, w.fileUri),
     (u) => Extension(
         name: u.first,
         typeParameters: u.second.first,
         onType: u.second.second,
-        members: u.third),
-    Tuple3Serializer(
+        members: u.third,
+        fileUri: u.fourth),
+    Tuple4Serializer(
         DartString(),
         Bind(typeParametersSerializer, dartTypeSerializer),
-        ListSerializer(extensionMemberDescriptorSerializer)));
+        ListSerializer(extensionMemberDescriptorSerializer),
+        UriSerializer()));
 
 void initializeSerializers() {
   expressionSerializer.registerTags({
diff --git a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
index 6538a7b..83bd899 100644
--- a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
+++ b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
@@ -390,7 +390,8 @@
         isFinal: true,
         getterReference: clazz.reference.canonicalName
             ?.getChildFromFieldWithName(fieldName)
-            .reference);
+            .reference,
+        fileUri: clazz.fileUri);
     clazz.addField(locationField);
 
     final Set<Constructor> _handledConstructors =
diff --git a/pkg/kernel/test/binary/component_mode_test.dart b/pkg/kernel/test/binary/component_mode_test.dart
index b03ea0a..2358e2f 100644
--- a/pkg/kernel/test/binary/component_mode_test.dart
+++ b/pkg/kernel/test/binary/component_mode_test.dart
@@ -38,7 +38,8 @@
       // Try individually.
       List<int> c1Serialized;
       {
-        Library lib1 = new Library(Uri.parse("foo://bar.dart"))
+        Uri uri = Uri.parse("foo://bar.dart");
+        Library lib1 = new Library(uri, fileUri: uri)
           ..nonNullableByDefaultCompiledMode = c1Mode;
         Component c1 = new Component(libraries: [lib1]);
         setCompileMode(c1, c1Mode);
@@ -49,7 +50,8 @@
 
       List<int> c2Serialized;
       {
-        Library lib2 = new Library(Uri.parse("foo://baz.dart"))
+        Uri uri = Uri.parse("foo://baz.dart");
+        Library lib2 = new Library(uri, fileUri: uri)
           ..nonNullableByDefaultCompiledMode = c2Mode;
         Component c2 = new Component(libraries: [lib2]);
         setCompileMode(c2, c2Mode);
diff --git a/pkg/kernel/test/binary/invalid_index_size.dart b/pkg/kernel/test/binary/invalid_index_size.dart
index 454ede6..2722ee4 100644
--- a/pkg/kernel/test/binary/invalid_index_size.dart
+++ b/pkg/kernel/test/binary/invalid_index_size.dart
@@ -9,7 +9,8 @@
 import 'utils.dart';
 
 main() {
-  Library lib1 = new Library(Uri.parse("foo://bar.dart"));
+  Uri uri = Uri.parse("foo://bar.dart");
+  Library lib1 = new Library(uri, fileUri: uri);
   Component c1 = new Component(libraries: [lib1]);
   List<int> serialized = serializeComponent(c1);
   // The last 4 bytes is the size entry in the index. Overwrite that with 0's.
diff --git a/pkg/kernel/test/binary/lazy_reading_test.dart b/pkg/kernel/test/binary/lazy_reading_test.dart
index 7edfda9..9d8d45c 100644
--- a/pkg/kernel/test/binary/lazy_reading_test.dart
+++ b/pkg/kernel/test/binary/lazy_reading_test.dart
@@ -13,21 +13,24 @@
   {
     /// Create a library with two classes (A and B) where class A - in its
     /// constructor - invokes the constructor for B.
-    lib = new Library(Uri.parse('org-dartlang:///lib.dart'));
-    final Class classA = new Class(name: "A");
+    final Uri uri = Uri.parse('org-dartlang:///lib.dart');
+    lib = new Library(uri, fileUri: uri);
+    final Class classA = new Class(name: "A", fileUri: uri);
     lib.addClass(classA);
-    final Class classB = new Class(name: "B");
+    final Class classB = new Class(name: "B", fileUri: uri);
     lib.addClass(classB);
 
     final Constructor classBConstructor = new Constructor(
         new FunctionNode(new EmptyStatement()),
-        name: new Name(""));
+        name: new Name(""),
+        fileUri: uri);
     classB.addConstructor(classBConstructor);
 
     final Constructor classAConstructor = new Constructor(
         new FunctionNode(new ExpressionStatement(new ConstructorInvocation(
             classBConstructor, new Arguments.empty()))),
-        name: new Name(""));
+        name: new Name(""),
+        fileUri: uri);
     classA.addConstructor(classAConstructor);
   }
   Component c = new Component(libraries: [lib]);
diff --git a/pkg/kernel/test/binary/library_flags_test.dart b/pkg/kernel/test/binary/library_flags_test.dart
index 0f80d24..c930c3c 100644
--- a/pkg/kernel/test/binary/library_flags_test.dart
+++ b/pkg/kernel/test/binary/library_flags_test.dart
@@ -58,7 +58,8 @@
             "isNonNullableByDefault: $isNonNullableByDefault; "
             "nonNullableByDefaultCompiledMode:"
             " $nonNullableByDefaultCompiledMode");
-        Library lib = new Library(Uri.parse("foo://bar.dart"));
+        Uri uri = Uri.parse("foo://bar.dart");
+        Library lib = new Library(uri, fileUri: uri);
         setSynthetic(lib, isSynthetic);
         setNonNullableByDefault(lib, isNonNullableByDefault);
         setNonNullableByDefaultCompiledMode(
diff --git a/pkg/kernel/test/binary_bench.dart b/pkg/kernel/test/binary_bench.dart
index be0a341..75834e6 100644
--- a/pkg/kernel/test/binary_bench.dart
+++ b/pkg/kernel/test/binary_bench.dart
@@ -16,7 +16,7 @@
 import 'dart:typed_data';
 
 final usage = '''
-Usage: binary_bench.dart [--golem] <Benchmark> <SourceDill>
+Usage: binary_bench.dart [--golem|--raw] <Benchmark> <SourceDill>
 
 Benchmark can be one of: ${benchmarks.keys.join(', ')}
 ''';
@@ -38,6 +38,7 @@
 Benchmark benchmark;
 File sourceDill;
 bool forGolem = false;
+bool forRaw = false;
 
 main(List<String> args) async {
   if (!_parseArgs(args)) {
@@ -119,7 +120,13 @@
     final std =
         sqrt(runsUs.map((v) => pow(v - avg, 2)).reduce(add) / runsUs.length);
 
-    if (!forGolem) {
+    if (forGolem) {
+      print('${name}(RunTimeRaw): ${avg} us.');
+      print('${name}P50(RunTimeRaw): ${P(50)} us.');
+      print('${name}P90(RunTimeRaw): ${P(90)} us.');
+    } else if (forRaw) {
+      runsUs.forEach(print);
+    } else {
       print('${name}Cold: ${coldRunUs} us');
       print('${name}Warmup: ${warmupUs} us');
       print('${name}: ${avg} us.');
@@ -128,10 +135,6 @@
       print('${prefix}> Std Dev: ${std.toStringAsFixed(2)}');
       print('${prefix}> 50th percentile: ${P(50)} us.');
       print('${prefix}> 90th percentile: ${P(90)} us.');
-    } else {
-      print('${name}(RunTimeRaw): ${avg} us.');
-      print('${name}P50(RunTimeRaw): ${P(50)} us.');
-      print('${name}P90(RunTimeRaw): ${P(90)} us.');
     }
   }
 }
@@ -147,6 +150,12 @@
     }
     forGolem = true;
     args = args.skip(1).toList(growable: false);
+  } else if (args[0] == '--raw') {
+    if (args.length != 3) {
+      return false;
+    }
+    forRaw = true;
+    args = args.skip(1).toList(growable: false);
   }
 
   benchmark = benchmarks[args[0]];
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index 841f5b9..dc68f05 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -84,13 +84,14 @@
   final Component component = createMockSdkComponent();
   CoreTypes coreTypes;
 
-  final Library library =
-      new Library(Uri.parse('org-dartlang:///test.dart'), name: 'test');
+  Library library;
 
   ClassHierarchy _hierarchy;
 
   ClosedWorldClassHierarchyTest() {
     coreTypes = new CoreTypes(component);
+    Uri uri = Uri.parse('org-dartlang:///test.dart');
+    library = new Library(uri, fileUri: uri, name: 'test');
     library.parent = component;
     component.libraries.add(library);
   }
@@ -100,14 +101,16 @@
   }
 
   void test_applyTreeChanges() {
-    Class a = addClass(new Class(name: 'A', supertype: objectSuper));
+    Class a = addClass(
+        new Class(name: 'A', supertype: objectSuper, fileUri: library.fileUri));
     _assertLibraryText(library, '''
 class A {}
 ''');
 
-    Class b = new Class(name: 'B', supertype: a.asThisSupertype);
-    Library libWithB =
-        new Library(Uri.parse('org-dartlang:///test_b.dart'), name: 'test_b');
+    Uri uriB = Uri.parse('org-dartlang:///test_b.dart');
+    Class b = new Class(
+        name: 'B', supertype: a.asThisSupertype, fileUri: library.fileUri);
+    Library libWithB = new Library(uriB, fileUri: uriB, name: 'test_b');
     libWithB.parent = component;
     component.libraries.add(libWithB);
     libWithB.addClass(b);
@@ -116,7 +119,8 @@
 import self as self;
 import "test.dart" as test;
 
-class B extends test::A {}
+class B extends test::A { // from org-dartlang:///test.dart
+}
 ''');
 
     // No updated classes, the same hierarchy.
@@ -124,9 +128,10 @@
 
     // Has updated classes, still the same hierarchy (instance). Can answer
     // queries about the new classes.
-    var c = new Class(name: 'C', supertype: a.asThisSupertype);
-    Library libWithC =
-        new Library(Uri.parse('org-dartlang:///test2.dart'), name: 'test2');
+    var c = new Class(
+        name: 'C', supertype: a.asThisSupertype, fileUri: library.fileUri);
+    Uri uriC = Uri.parse('org-dartlang:///test2.dart');
+    Library libWithC = new Library(uriC, fileUri: uriC, name: 'test2');
     libWithC.parent = component;
     component.libraries.add(libWithC);
     libWithC.addClass(c);
@@ -147,9 +152,15 @@
     var methodB1 = newEmptyMethod('memberB1');
 
     var a = addClass(new Class(
-        name: 'A', supertype: objectSuper, procedures: [methodA1, methodA2]));
+        name: 'A',
+        supertype: objectSuper,
+        procedures: [methodA1, methodA2],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
-        name: 'B', supertype: a.asThisSupertype, procedures: [methodB1]));
+        name: 'B',
+        supertype: a.asThisSupertype,
+        procedures: [methodB1],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -191,25 +202,34 @@
     var methodInD = newEmptyMethod('foo');
     var methodInE = newEmptyMethod('foo');
 
-    var a = addClass(
-        new Class(name: 'A', supertype: objectSuper, procedures: [methodInA]));
+    var a = addClass(new Class(
+        name: 'A',
+        supertype: objectSuper,
+        procedures: [methodInA],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         isAbstract: true,
         supertype: objectSuper,
-        procedures: [methodInB]));
+        procedures: [methodInB],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: b.asThisSupertype,
-        implementedTypes: [a.asThisSupertype]));
+        implementedTypes: [a.asThisSupertype],
+        fileUri: library.fileUri));
     addClass(new Class(
-        name: 'D', supertype: b.asThisSupertype, procedures: [methodInD]));
+        name: 'D',
+        supertype: b.asThisSupertype,
+        procedures: [methodInD],
+        fileUri: library.fileUri));
     addClass(new Class(
         name: 'E',
         isAbstract: true,
         supertype: objectSuper,
         implementedTypes: [c.asThisSupertype],
-        procedures: [methodInE]));
+        procedures: [methodInE],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -239,28 +259,36 @@
   }
 
   void test_getSubtypesOf() {
-    var a = addClass(new Class(name: 'A', supertype: objectSuper));
-    var b = addClass(new Class(name: 'B', supertype: objectSuper));
-    var c = addClass(new Class(name: 'C', supertype: objectSuper));
+    var a = addClass(
+        new Class(name: 'A', supertype: objectSuper, fileUri: library.fileUri));
+    var b = addClass(
+        new Class(name: 'B', supertype: objectSuper, fileUri: library.fileUri));
+    var c = addClass(
+        new Class(name: 'C', supertype: objectSuper, fileUri: library.fileUri));
 
-    var d = addClass(new Class(name: 'D', supertype: a.asThisSupertype));
+    var d = addClass(new Class(
+        name: 'D', supertype: a.asThisSupertype, fileUri: library.fileUri));
 
     var e = addClass(new Class(
         name: 'E',
         supertype: b.asThisSupertype,
-        implementedTypes: [c.asThisSupertype]));
+        implementedTypes: [c.asThisSupertype],
+        fileUri: library.fileUri));
 
     var f = addClass(new Class(
         name: 'F',
         supertype: e.asThisSupertype,
-        implementedTypes: [a.asThisSupertype]));
+        implementedTypes: [a.asThisSupertype],
+        fileUri: library.fileUri));
 
-    var g = addClass(new Class(name: 'G', supertype: objectSuper));
+    var g = addClass(
+        new Class(name: 'G', supertype: objectSuper, fileUri: library.fileUri));
 
     var h = addClass(new Class(
         name: 'H',
         supertype: g.asThisSupertype,
-        implementedTypes: [c.asThisSupertype, a.asThisSupertype]));
+        implementedTypes: [c.asThisSupertype, a.asThisSupertype],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {}
@@ -324,7 +352,8 @@
         name: name,
         typeParameters: typeParameters,
         supertype: supertype,
-        implementedTypes: implementedTypes));
+        implementedTypes: implementedTypes,
+        fileUri: library.fileUri));
   }
 
   Procedure newEmptyGetter(String name,
@@ -332,14 +361,15 @@
     var body =
         isAbstract ? null : new Block([new ReturnStatement(new NullLiteral())]);
     return new Procedure(new Name(name), ProcedureKind.Getter,
-        new FunctionNode(body, returnType: returnType));
+        new FunctionNode(body, returnType: returnType),
+        fileUri: library.fileUri);
   }
 
   Procedure newEmptyMethod(String name, {bool isAbstract: false}) {
     var body = isAbstract ? null : new Block([]);
     return new Procedure(new Name(name), ProcedureKind.Method,
         new FunctionNode(body, returnType: const VoidType()),
-        isAbstract: isAbstract);
+        isAbstract: isAbstract, fileUri: library.fileUri);
   }
 
   Procedure newEmptySetter(String name,
@@ -350,7 +380,8 @@
         ProcedureKind.Setter,
         new FunctionNode(body,
             returnType: const VoidType(),
-            positionalParameters: [new VariableDeclaration('_', type: type)]));
+            positionalParameters: [new VariableDeclaration('_', type: type)]),
+        fileUri: library.fileUri);
   }
 
   /// 2. A non-abstract member is inherited from a superclass, and in the
@@ -360,21 +391,26 @@
     var a = addClass(new Class(
         name: 'A',
         supertype: objectSuper,
-        procedures: [newEmptyMethod('foo'), newEmptyMethod('bar')]));
+        procedures: [newEmptyMethod('foo'), newEmptyMethod('bar')],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [newEmptyMethod('foo', isAbstract: true)]));
+        procedures: [newEmptyMethod('foo', isAbstract: true)],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: a.asThisSupertype,
-        implementedTypes: [b.asThisSupertype]));
-    var d = addClass(new Class(name: 'D', supertype: objectSuper));
+        implementedTypes: [b.asThisSupertype],
+        fileUri: library.fileUri));
+    var d = addClass(
+        new Class(name: 'D', supertype: objectSuper, fileUri: library.fileUri));
     var e = addClass(new Class(
         name: 'E',
         supertype: d.asThisSupertype,
         mixedInType: a.asThisSupertype,
-        implementedTypes: [b.asThisSupertype]));
+        implementedTypes: [b.asThisSupertype],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -399,18 +435,23 @@
     var a = addClass(new Class(
         name: 'A',
         supertype: objectSuper,
-        procedures: [newEmptyMethod('foo')]));
+        procedures: [newEmptyMethod('foo')],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [newEmptyMethod('foo', isAbstract: true)]));
+        procedures: [newEmptyMethod('foo', isAbstract: true)],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: a.asThisSupertype,
         procedures: [newEmptyMethod('foo', isAbstract: true)],
-        isAbstract: true));
-    var d = addClass(new Class(name: 'D', supertype: b.asThisSupertype));
-    var e = addClass(new Class(name: 'E', supertype: c.asThisSupertype));
+        isAbstract: true,
+        fileUri: library.fileUri));
+    var d = addClass(new Class(
+        name: 'D', supertype: b.asThisSupertype, fileUri: library.fileUri));
+    var e = addClass(new Class(
+        name: 'E', supertype: c.asThisSupertype, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -438,11 +479,13 @@
     var a = addClass(new Class(
         name: 'A',
         supertype: objectSuper,
-        procedures: [newEmptyMethod('foo'), newEmptyMethod('bar')]));
+        procedures: [newEmptyMethod('foo'), newEmptyMethod('bar')],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [newEmptyMethod('foo', isAbstract: true)]));
+        procedures: [newEmptyMethod('foo', isAbstract: true)],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -466,15 +509,18 @@
     var a = addClass(new Class(
         name: 'A',
         supertype: objectSuper,
-        procedures: [newEmptyMethod('foo'), newEmptyMethod('bar')]));
+        procedures: [newEmptyMethod('foo'), newEmptyMethod('bar')],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [newEmptyMethod('foo')]));
+        procedures: [newEmptyMethod('foo')],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: b.asThisSupertype,
-        procedures: [newEmptyMethod('bar')]));
+        procedures: [newEmptyMethod('bar')],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -499,15 +545,18 @@
     var a = addClass(new Class(
         name: 'A',
         supertype: objectSuper,
-        procedures: [newEmptySetter('foo'), newEmptySetter('bar')]));
+        procedures: [newEmptySetter('foo'), newEmptySetter('bar')],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [newEmptySetter('foo')]));
+        procedures: [newEmptySetter('foo')],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: b.asThisSupertype,
-        procedures: [newEmptySetter('bar')]));
+        procedures: [newEmptySetter('bar')],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -537,9 +586,13 @@
     var b = addClass(new Class(
         name: 'B',
         typeParameters: [bT],
-        supertype: new Supertype(a, [bTT, bool])));
+        supertype: new Supertype(a, [bTT, bool]),
+        fileUri: library.fileUri));
 
-    var c = addClass(new Class(name: 'C', supertype: new Supertype(b, [int])));
+    var c = addClass(new Class(
+        name: 'C',
+        supertype: new Supertype(b, [int]),
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A<T*, U*> {}
@@ -568,12 +621,16 @@
         supertype: objectSuper,
         implementedTypes: [
           new Supertype(a, [bTT, bool])
-        ]));
+        ],
+        fileUri: library.fileUri));
 
-    var c = addClass(
-        new Class(name: 'C', supertype: objectSuper, implementedTypes: [
-      new Supertype(b, [int])
-    ]));
+    var c = addClass(new Class(
+        name: 'C',
+        supertype: objectSuper,
+        implementedTypes: [
+          new Supertype(b, [int])
+        ],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A<T*, U*> {}
@@ -600,12 +657,14 @@
         name: 'B',
         typeParameters: [bT],
         supertype: objectSuper,
-        mixedInType: new Supertype(a, [bTT, bool])));
+        mixedInType: new Supertype(a, [bTT, bool]),
+        fileUri: library.fileUri));
 
     var c = addClass(new Class(
         name: 'C',
         supertype: objectSuper,
-        mixedInType: new Supertype(b, [int])));
+        mixedInType: new Supertype(b, [int]),
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A<T*, U*> {}
@@ -621,10 +680,14 @@
   }
 
   void test_getClassAsInstanceOf_notGeneric_extends() {
-    var a = addClass(new Class(name: 'A', supertype: objectSuper));
-    var b = addClass(new Class(name: 'B', supertype: a.asThisSupertype));
-    var c = addClass(new Class(name: 'C', supertype: b.asThisSupertype));
-    var z = addClass(new Class(name: 'Z', supertype: objectSuper));
+    var a = addClass(
+        new Class(name: 'A', supertype: objectSuper, fileUri: library.fileUri));
+    var b = addClass(new Class(
+        name: 'B', supertype: a.asThisSupertype, fileUri: library.fileUri));
+    var c = addClass(new Class(
+        name: 'C', supertype: b.asThisSupertype, fileUri: library.fileUri));
+    var z = addClass(
+        new Class(name: 'Z', supertype: objectSuper, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {}
@@ -643,21 +706,27 @@
   }
 
   void test_getClassAsInstanceOf_notGeneric_implements() {
-    var a = addClass(new Class(name: 'A', supertype: objectSuper));
-    var b = addClass(new Class(name: 'B', supertype: objectSuper));
+    var a = addClass(
+        new Class(name: 'A', supertype: objectSuper, fileUri: library.fileUri));
+    var b = addClass(
+        new Class(name: 'B', supertype: objectSuper, fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: objectSuper,
-        implementedTypes: [a.asThisSupertype]));
+        implementedTypes: [a.asThisSupertype],
+        fileUri: library.fileUri));
     var d = addClass(new Class(
         name: 'D',
         supertype: objectSuper,
-        implementedTypes: [c.asThisSupertype]));
+        implementedTypes: [c.asThisSupertype],
+        fileUri: library.fileUri));
     var e = addClass(new Class(
         name: 'D',
         supertype: a.asThisSupertype,
-        implementedTypes: [b.asThisSupertype]));
-    var z = addClass(new Class(name: 'Z', supertype: objectSuper));
+        implementedTypes: [b.asThisSupertype],
+        fileUri: library.fileUri));
+    var z = addClass(
+        new Class(name: 'Z', supertype: objectSuper, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {}
@@ -677,10 +746,15 @@
   }
 
   void test_getClassAsInstanceOf_notGeneric_with() {
-    var a = addClass(new Class(name: 'A', supertype: objectSuper));
+    var a = addClass(
+        new Class(name: 'A', supertype: objectSuper, fileUri: library.fileUri));
     var b = addClass(new Class(
-        name: 'B', supertype: objectSuper, mixedInType: a.asThisSupertype));
-    var z = addClass(new Class(name: 'Z', supertype: objectSuper));
+        name: 'B',
+        supertype: objectSuper,
+        mixedInType: a.asThisSupertype,
+        fileUri: library.fileUri));
+    var z = addClass(
+        new Class(name: 'Z', supertype: objectSuper, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {}
@@ -700,16 +774,15 @@
     var abstractMethod = newEmptyMethod('abstractMethod', isAbstract: true);
     var abstractGetter = newEmptyGetter('abstractGetter', isAbstract: true);
     var abstractSetter = newEmptySetter('abstractSetter', isAbstract: true);
-    var nonFinalField = new Field.mutable(new Name('nonFinalField'));
-    var finalField = new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
     var a = addClass(new Class(
         isAbstract: true,
         name: 'A',
         supertype: objectSuper,
-        fields: [
-          nonFinalField,
-          finalField
-        ],
+        fields: [nonFinalField, finalField],
         procedures: [
           method,
           getter,
@@ -717,9 +790,13 @@
           abstractMethod,
           abstractGetter,
           abstractSetter
-        ]));
-    var b = addClass(
-        new Class(isAbstract: true, name: 'B', supertype: a.asThisSupertype));
+        ],
+        fileUri: library.fileUri));
+    var b = addClass(new Class(
+        isAbstract: true,
+        name: 'B',
+        supertype: a.asThisSupertype,
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 abstract class A {
@@ -759,12 +836,17 @@
     var bMethod = newEmptyMethod('bMethod');
     var bSetter = newEmptySetter('bSetter');
     var a = addClass(new Class(
-        name: 'A', supertype: objectSuper, procedures: [aMethod, aSetter]));
+        name: 'A',
+        supertype: objectSuper,
+        procedures: [aMethod, aSetter],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [bMethod, bSetter]));
-    var c = addClass(new Class(name: 'C', supertype: b.asThisSupertype));
+        procedures: [bMethod, bSetter],
+        fileUri: library.fileUri));
+    var c = addClass(new Class(
+        name: 'C', supertype: b.asThisSupertype, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -805,13 +887,16 @@
         isAbstract: true,
         name: 'A',
         supertype: objectSuper,
-        procedures: [aFoo, aBar]));
+        procedures: [aFoo, aBar],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         isAbstract: true,
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [bFoo, bBar]));
-    var c = addClass(new Class(name: 'C', supertype: b.asThisSupertype));
+        procedures: [bFoo, bBar],
+        fileUri: library.fileUri));
+    var c = addClass(new Class(
+        name: 'C', supertype: b.asThisSupertype, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 abstract class A {
@@ -840,12 +925,17 @@
     var bMethod = newEmptyMethod('bMethod');
     var bSetter = newEmptySetter('bSetter');
     var a = addClass(new Class(
-        name: 'A', supertype: objectSuper, procedures: [aMethod, aSetter]));
+        name: 'A',
+        supertype: objectSuper,
+        procedures: [aMethod, aSetter],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
-        procedures: [bMethod, bSetter]));
-    var c = addClass(new Class(name: 'C', supertype: b.asThisSupertype));
+        procedures: [bMethod, bSetter],
+        fileUri: library.fileUri));
+    var c = addClass(new Class(
+        name: 'C', supertype: b.asThisSupertype, fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -883,16 +973,21 @@
     var bMethod = newEmptyMethod('bMethod');
     var bSetter = newEmptySetter('bSetter');
     var a = addClass(new Class(
-        name: 'A', supertype: objectSuper, procedures: [aMethod, aSetter]));
+        name: 'A',
+        supertype: objectSuper,
+        procedures: [aMethod, aSetter],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: objectSuper,
         implementedTypes: [a.asThisSupertype],
-        procedures: [bMethod, bSetter]));
+        procedures: [bMethod, bSetter],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         name: 'C',
         supertype: objectSuper,
-        implementedTypes: [b.asThisSupertype]));
+        implementedTypes: [b.asThisSupertype],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -931,16 +1026,15 @@
     var abstractMethod = newEmptyMethod('abstractMethod', isAbstract: true);
     var abstractGetter = newEmptyGetter('abstractGetter', isAbstract: true);
     var abstractSetter = newEmptySetter('abstractSetter', isAbstract: true);
-    var nonFinalField = new Field.mutable(new Name('nonFinalField'));
-    var finalField = new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
     var a = addClass(new Class(
         isAbstract: true,
         name: 'A',
         supertype: objectSuper,
-        fields: [
-          nonFinalField,
-          finalField
-        ],
+        fields: [nonFinalField, finalField],
         procedures: [
           method,
           getter,
@@ -948,7 +1042,8 @@
           abstractMethod,
           abstractGetter,
           abstractSetter
-        ]));
+        ],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 abstract class A {
@@ -986,28 +1081,37 @@
     var abstractMethod = newEmptyMethod('abstractMethod', isAbstract: true);
     var abstractGetter = newEmptyGetter('abstractGetter', isAbstract: true);
     var abstractSetter = newEmptySetter('abstractSetter', isAbstract: true);
-    var nonFinalField = new Field.mutable(new Name('nonFinalField'));
-    var finalField = new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
 
-    var a = addClass(new Class(name: 'A', supertype: objectSuper, fields: [
-      nonFinalField,
-      finalField
-    ], procedures: [
-      method,
-      getter,
-      setter,
-      abstractMethod,
-      abstractGetter,
-      abstractSetter
-    ]));
-    var b = addClass(new Class(name: 'B', supertype: a.asThisSupertype));
+    var a = addClass(new Class(
+        name: 'A',
+        supertype: objectSuper,
+        fields: [nonFinalField, finalField],
+        procedures: [
+          method,
+          getter,
+          setter,
+          abstractMethod,
+          abstractGetter,
+          abstractSetter
+        ],
+        fileUri: library.fileUri));
+    var b = addClass(new Class(
+        name: 'B', supertype: a.asThisSupertype, fileUri: library.fileUri));
     var c = addClass(new Class(
         isAbstract: true,
         name: 'C',
         supertype: objectSuper,
-        implementedTypes: [a.asThisSupertype]));
+        implementedTypes: [a.asThisSupertype],
+        fileUri: library.fileUri));
     var d = addClass(new Class(
-        name: 'D', supertype: objectSuper, mixedInType: a.asThisSupertype));
+        name: 'D',
+        supertype: objectSuper,
+        mixedInType: a.asThisSupertype,
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -1051,31 +1155,36 @@
     var method_a = newEmptyMethod('method');
     var getter_a = newEmptyGetter('getter');
     var setter_a = newEmptySetter('setter');
-    var nonFinalField_a = new Field.mutable(new Name('nonFinalField'));
-    var finalField_a =
-        new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField_a =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField_a = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
     var method_b = newEmptyMethod('method');
     var getter_b = newEmptyGetter('getter');
     var setter_b = newEmptySetter('setter');
-    var nonFinalField_b = new Field.mutable(new Name('nonFinalField'));
-    var finalField_b =
-        new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField_b =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField_b = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
 
     var a = addClass(new Class(
         name: 'A',
         supertype: objectSuper,
         fields: [nonFinalField_a, finalField_a],
-        procedures: [method_a, getter_a, setter_a]));
+        procedures: [method_a, getter_a, setter_a],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: objectSuper,
         fields: [nonFinalField_b, finalField_b],
-        procedures: [method_b, getter_b, setter_b]));
+        procedures: [method_b, getter_b, setter_b],
+        fileUri: library.fileUri));
     var c = addClass(new Class(
         isAbstract: true,
         name: 'C',
         supertype: objectSuper,
-        implementedTypes: [a.asThisSupertype, b.asThisSupertype]));
+        implementedTypes: [a.asThisSupertype, b.asThisSupertype],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -1123,31 +1232,36 @@
     var getter_a = newEmptyGetter('getter');
     var setter_a = newEmptySetter('setter');
     var nonShadowedSetter_a = newEmptySetter('nonShadowedSetter');
-    var nonFinalField_a = new Field.mutable(new Name('nonFinalField'));
-    var finalField_a =
-        new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField_a =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField_a = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
     var method_b = newEmptyMethod('method');
     var getter_b = newEmptyGetter('getter');
     var setter_b = newEmptySetter('setter');
-    var nonFinalField_b = new Field.mutable(new Name('nonFinalField'));
-    var finalField_b =
-        new Field.immutable(new Name('finalField'), isFinal: true);
+    var nonFinalField_b =
+        new Field.mutable(new Name('nonFinalField'), fileUri: library.fileUri);
+    var finalField_b = new Field.immutable(new Name('finalField'),
+        isFinal: true, fileUri: library.fileUri);
 
-    var a = addClass(new Class(name: 'A', supertype: objectSuper, fields: [
-      nonFinalField_a,
-      finalField_a
-    ], procedures: [
-      method_a,
-      nonShadowedMethod_a,
-      getter_a,
-      setter_a,
-      nonShadowedSetter_a
-    ]));
+    var a = addClass(new Class(
+        name: 'A',
+        supertype: objectSuper,
+        fields: [nonFinalField_a, finalField_a],
+        procedures: [
+          method_a,
+          nonShadowedMethod_a,
+          getter_a,
+          setter_a,
+          nonShadowedSetter_a
+        ],
+        fileUri: library.fileUri));
     var b = addClass(new Class(
         name: 'B',
         supertype: a.asThisSupertype,
         fields: [nonFinalField_b, finalField_b],
-        procedures: [method_b, getter_b, setter_b]));
+        procedures: [method_b, getter_b, setter_b],
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A {
@@ -1186,9 +1300,12 @@
   }
 
   void test_getOrderedClasses() {
-    var a = addClass(new Class(name: 'A', supertype: objectSuper));
-    var b = addClass(new Class(name: 'B', supertype: a.asThisSupertype));
-    var c = addClass(new Class(name: 'C', supertype: b.asThisSupertype));
+    var a = addClass(
+        new Class(name: 'A', supertype: objectSuper, fileUri: library.fileUri));
+    var b = addClass(new Class(
+        name: 'B', supertype: a.asThisSupertype, fileUri: library.fileUri));
+    var c = addClass(new Class(
+        name: 'C', supertype: b.asThisSupertype, fileUri: library.fileUri));
 
     void assertOrderOfClasses(List<Class> unordered, List<Class> expected) {
       var ordered = hierarchy.getOrderedClasses(unordered);
@@ -1215,7 +1332,8 @@
     var b = addClass(new Class(
         name: 'B',
         typeParameters: [bT],
-        supertype: new Supertype(a, [bTT, bool])));
+        supertype: new Supertype(a, [bTT, bool]),
+        fileUri: library.fileUri));
 
     _assertTestLibraryText('''
 class A<T*, U*> {}
diff --git a/pkg/kernel/test/convert_field_to_setter_getter.dart b/pkg/kernel/test/convert_field_to_setter_getter.dart
index fe37493..d7e7fd7 100644
--- a/pkg/kernel/test/convert_field_to_setter_getter.dart
+++ b/pkg/kernel/test/convert_field_to_setter_getter.dart
@@ -9,8 +9,9 @@
 import 'binary/utils.dart';
 
 main() {
-  final Library lib1 = new Library(Uri.parse('org-dartlang:///lib.dart'));
-  final Field field = new Field.mutable(new Name("f"));
+  final Uri lib1Uri = Uri.parse('org-dartlang:///lib.dart');
+  final Library lib1 = new Library(lib1Uri, fileUri: lib1Uri);
+  final Field field = new Field.mutable(new Name("f"), fileUri: lib1Uri);
   lib1.addField(field);
   final Block libProcedureBody = new Block([
     new ExpressionStatement(new StaticSet(field, new IntLiteral(42))),
@@ -19,10 +20,12 @@
   final Procedure libProcedure = new Procedure(
       new Name("method"),
       ProcedureKind.Method,
-      new FunctionNode(libProcedureBody, returnType: new DynamicType()));
+      new FunctionNode(libProcedureBody, returnType: new DynamicType()),
+      fileUri: lib1Uri);
   lib1.addProcedure(libProcedure);
 
-  final Library lib2 = new Library(Uri.parse('org-dartlang:///lib2.dart'));
+  final Uri lib2Uri = Uri.parse('org-dartlang:///lib2.dart');
+  final Library lib2 = new Library(lib2Uri, fileUri: lib2Uri);
   final Block lib2ProcedureBody = new Block([
     new ExpressionStatement(new StaticSet(field, new IntLiteral(43))),
     new ReturnStatement(new StaticGet(field)),
@@ -30,7 +33,8 @@
   final Procedure lib2Procedure = new Procedure(
       new Name("method"),
       ProcedureKind.Method,
-      new FunctionNode(lib2ProcedureBody, returnType: new DynamicType()));
+      new FunctionNode(lib2ProcedureBody, returnType: new DynamicType()),
+      fileUri: lib2Uri);
   lib2.addProcedure(lib2Procedure);
 
   verifyTargets(libProcedure, lib2Procedure, field, field);
@@ -53,7 +57,7 @@
   FunctionNode getterFunction = new FunctionNode(new Block([]));
   Procedure getter = new Procedure(
       new Name("f"), ProcedureKind.Getter, getterFunction,
-      reference: field.getterReference);
+      reference: field.getterReference, fileUri: lib1Uri);
   // Important: Unbind any old canonical name
   // (nulling out the canonical name is not enough because it leaves the old
   // canonical name (which always stays alive) with a pointer to the reference,
@@ -68,7 +72,7 @@
       positionalParameters: [new VariableDeclaration("foo")]);
   Procedure setter = new Procedure(
       new Name("f"), ProcedureKind.Setter, setterFunction,
-      reference: field.setterReference);
+      reference: field.setterReference, fileUri: lib1Uri);
   // Important: Unbind any old canonical name
   // (nulling out the canonical name is not enough, see above).
   field.setterReference?.canonicalName?.unbind();
@@ -101,7 +105,9 @@
   lib1.procedures.remove(getter);
   lib1.procedures.remove(setter);
   final Field fieldReplacement = new Field.mutable(new Name("f"),
-      getterReference: getter.reference, setterReference: setter.reference);
+      getterReference: getter.reference,
+      setterReference: setter.reference,
+      fileUri: lib1Uri);
   // Important: Unbind any old canonical name
   // (nulling out the canonical name is not enough, see above).
   fieldReplacement.getterReference?.canonicalName?.unbind();
diff --git a/pkg/kernel/test/load_concat_dill_keeps_source_test.dart b/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
index 60af31f..0c2dc97 100644
--- a/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
+++ b/pkg/kernel/test/load_concat_dill_keeps_source_test.dart
@@ -16,14 +16,14 @@
 Uri uri2 = Uri.parse("foo://lib2.dart");
 
 main() {
-  Library library1 = new Library(uri1)..fileUri = uri1;
-  Library library2 = new Library(uri2)..fileUri = uri2;
+  Library library1 = new Library(uri1, fileUri: uri1);
+  Library library2 = new Library(uri2, fileUri: uri2);
   Procedure p1 = new Procedure(new Name("p1"), ProcedureKind.Method,
-      new FunctionNode(new ReturnStatement()))
-    ..fileUri = uri2;
+      new FunctionNode(new ReturnStatement()),
+      fileUri: uri2);
   Procedure p2 = new Procedure(new Name("p2"), ProcedureKind.Method,
-      new FunctionNode(new ReturnStatement()))
-    ..fileUri = uri1;
+      new FunctionNode(new ReturnStatement()),
+      fileUri: uri1);
   library1.addProcedure(p1);
   library2.addProcedure(p2);
 
diff --git a/pkg/kernel/test/relink_test.dart b/pkg/kernel/test/relink_test.dart
index b50be8e..3f4c9be 100644
--- a/pkg/kernel/test/relink_test.dart
+++ b/pkg/kernel/test/relink_test.dart
@@ -149,16 +149,19 @@
 }
 
 Component createComponent(int literal) {
-  final Library lib = new Library(Uri.parse('org-dartlang:///lib.dart'));
+  final Uri libUri = Uri.parse('org-dartlang:///lib.dart');
+  final Library lib = new Library(libUri, fileUri: libUri);
   final Block libProcedureBody =
       new Block([new ReturnStatement(new IntLiteral(literal))]);
   final Procedure libProcedure = new Procedure(
       new Name("method"),
       ProcedureKind.Method,
-      new FunctionNode(libProcedureBody, returnType: new DynamicType()));
+      new FunctionNode(libProcedureBody, returnType: new DynamicType()),
+      fileUri: libUri);
   lib.addProcedure(libProcedure);
 
-  final Library main = new Library(Uri.parse('org-dartlang:///main.dart'));
+  final Uri mainUri = Uri.parse('org-dartlang:///main.dart');
+  final Library main = new Library(mainUri, fileUri: mainUri);
   final Block mainProcedureBody = new Block([
     new ReturnStatement(
         new StaticInvocation(libProcedure, new Arguments.empty()))
@@ -166,7 +169,8 @@
   final Procedure mainProcedure = new Procedure(
       new Name("method"),
       ProcedureKind.Method,
-      new FunctionNode(mainProcedureBody, returnType: new DynamicType()));
+      new FunctionNode(mainProcedureBody, returnType: new DynamicType()),
+      fileUri: mainUri);
   main.addProcedure(mainProcedure);
   return new Component(libraries: [main, lib])
     ..setMainMethodAndMode(null, false, NonNullableByDefaultCompiledMode.Weak);
diff --git a/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart b/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart
index df7b9ff..ddc5c9f 100644
--- a/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart
+++ b/pkg/kernel/test/text_serializer_from_kernel_nodes_test.dart
@@ -122,11 +122,10 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field =
-          new Field.immutable(new Name('field'), type: const DynamicType());
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          fields: <Field>[field]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Field field = new Field.immutable(new Name('field'),
+          type: const DynamicType(), fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, fields: <Field>[field]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -140,11 +139,10 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field =
-          new Field.mutable(new Name('field'), type: const DynamicType());
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          fields: <Field>[field]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Field field = new Field.mutable(new Name('field'),
+          type: const DynamicType(), fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, fields: <Field>[field]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -158,11 +156,10 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field =
-          new Field.mutable(new Name('field'), type: const DynamicType());
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          fields: <Field>[field]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Field field = new Field.mutable(new Name('field'),
+          type: const DynamicType(), fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, fields: <Field>[field]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -178,16 +175,17 @@
           serializer: statementSerializer);
     }(),
     () {
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
       Procedure topLevelProcedure = new Procedure(
           new Name('foo'),
           ProcedureKind.Method,
           new FunctionNode(null, positionalParameters: <VariableDeclaration>[
             new VariableDeclaration('x', type: const DynamicType())
           ]),
-          isStatic: true);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          procedures: <Procedure>[topLevelProcedure]);
+          isStatic: true,
+          fileUri: uri);
+      Library library = new Library(uri,
+          fileUri: uri, procedures: <Procedure>[topLevelProcedure]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -205,14 +203,13 @@
           serializer: statementSerializer);
     }(),
     () {
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
       Procedure factoryConstructor = new Procedure(
           new Name('foo'), ProcedureKind.Factory, new FunctionNode(null),
-          isStatic: true, isConst: true);
-      Class klass =
-          new Class(name: 'A', procedures: <Procedure>[factoryConstructor]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+          isStatic: true, isConst: true, fileUri: uri);
+      Class klass = new Class(
+          name: 'A', procedures: <Procedure>[factoryConstructor], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -231,12 +228,11 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field =
-          new Field.immutable(new Name('field'), type: const DynamicType());
-      Class klass = new Class(name: 'A', fields: <Field>[field]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Field field = new Field.immutable(new Name('field'),
+          type: const DynamicType(), fileUri: uri);
+      Class klass = new Class(name: 'A', fields: <Field>[field], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
 
@@ -260,12 +256,11 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field =
-          new Field.mutable(new Name('field'), type: const DynamicType());
-      Class klass = new Class(name: 'A', fields: <Field>[field]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Field field = new Field.mutable(new Name('field'),
+          type: const DynamicType(), fileUri: uri);
+      Class klass = new Class(name: 'A', fields: <Field>[field], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
 
@@ -289,12 +284,11 @@
           serializer: statementSerializer);
     }(),
     () {
-      Field field =
-          new Field.mutable(new Name('field'), type: const DynamicType());
-      Class klass = new Class(name: 'A', fields: <Field>[field]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Field field = new Field.mutable(new Name('field'),
+          type: const DynamicType(), fileUri: uri);
+      Class klass = new Class(name: 'A', fields: <Field>[field], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
 
@@ -321,13 +315,13 @@
           serializer: statementSerializer);
     }(),
     () {
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
       Procedure method = new Procedure(
           new Name('foo'), ProcedureKind.Method, new FunctionNode(null),
-          isStatic: true, isConst: true);
-      Class klass = new Class(name: 'A', procedures: <Procedure>[method]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+          isStatic: true, isConst: true, fileUri: uri);
+      Class klass =
+          new Class(name: 'A', procedures: <Procedure>[method], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
 
@@ -355,13 +349,12 @@
           serializer: statementSerializer);
     }(),
     () {
-      Constructor constructor =
-          new Constructor(new FunctionNode(null), name: new Name('foo'));
-      Class klass =
-          new Class(name: 'A', constructors: <Constructor>[constructor]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
+      Constructor constructor = new Constructor(new FunctionNode(null),
+          name: new Name('foo'), fileUri: uri);
+      Class klass = new Class(
+          name: 'A', constructors: <Constructor>[constructor], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -378,13 +371,12 @@
           serializer: statementSerializer);
     }(),
     () {
+      Uri uri = new Uri(scheme: 'package', path: 'foo/bar.dart');
       Constructor constructor = new Constructor(new FunctionNode(null),
-          name: new Name('foo'), isConst: true);
-      Class klass =
-          new Class(name: 'A', constructors: <Constructor>[constructor]);
-      Library library = new Library(
-          new Uri(scheme: 'package', path: 'foo/bar.dart'),
-          classes: <Class>[klass]);
+          name: new Name('foo'), isConst: true, fileUri: uri);
+      Class klass = new Class(
+          name: 'A', constructors: <Constructor>[constructor], fileUri: uri);
+      Library library = new Library(uri, fileUri: uri, classes: <Class>[klass]);
       Component component = new Component(libraries: <Library>[library]);
       component.computeCanonicalNames();
       return new TestCase<Statement>(
@@ -456,15 +448,16 @@
           serializer: statementSerializer);
     }(),
     () {
+      Uri uri = Uri(scheme: 'package', path: 'foo/bar.dart');
       VariableDeclaration x = VariableDeclaration('x', type: DynamicType());
       Procedure foo = Procedure(
           Name('foo'),
           ProcedureKind.Method,
           FunctionNode(ReturnStatement(VariableGet(x)),
               positionalParameters: [x]),
-          isStatic: true);
-      Library library = Library(Uri(scheme: 'package', path: 'foo/bar.dart'),
-          procedures: [foo]);
+          isStatic: true,
+          fileUri: uri);
+      Library library = Library(uri, fileUri: uri, procedures: [foo]);
       Component component = Component(libraries: [library]);
       component.computeCanonicalNames();
       return new TestCase<Member>(
@@ -473,7 +466,8 @@
           expectation: ''
               '(method (public "foo") ((static))'
               ' (sync) () () () ("x^0" () (dynamic) _ ()) () ()'
-              ' (dynamic) _ (ret (get-var "x^0" _)))',
+              ' (dynamic) _ (ret (get-var "x^0" _))'
+              ' "package:foo/bar.dart")',
           makeSerializationState: () =>
               new SerializationState(new SerializationEnvironment(null)),
           makeDeserializationState: () => new DeserializationState(
@@ -481,6 +475,7 @@
           serializer: memberSerializer);
     }(),
     () {
+      Uri uri = Uri(scheme: 'package', path: 'foo/bar.dart');
       VariableDeclaration x1 = VariableDeclaration('x', type: DynamicType());
       VariableDeclaration x2 = VariableDeclaration('x', type: DynamicType());
       Procedure foo = Procedure(
@@ -488,7 +483,8 @@
           ProcedureKind.Method,
           FunctionNode(ReturnStatement(VariableGet(x1)),
               positionalParameters: [x1]),
-          isStatic: true);
+          isStatic: true,
+          fileUri: uri);
       Procedure bar = Procedure(
           Name('bar'),
           ProcedureKind.Method,
@@ -496,9 +492,9 @@
               ReturnStatement(
                   StaticInvocation(foo, Arguments([VariableGet(x2)]))),
               positionalParameters: [x2]),
-          isStatic: true);
-      Library library = Library(Uri(scheme: 'package', path: 'foo/bar.dart'),
-          procedures: [foo, bar]);
+          isStatic: true,
+          fileUri: uri);
+      Library library = Library(uri, fileUri: uri, procedures: [foo, bar]);
       Component component = Component(libraries: [library]);
       component.computeCanonicalNames();
       return new TestCase<Library>(
@@ -509,19 +505,23 @@
               ''
               ' ((method (public "foo") ((static))'
               ' (sync) () () () ("x^0" () (dynamic) _ ()) () () (dynamic)'
-              ' _ (ret (get-var "x^0" _)))'
+              ' _ (ret (get-var "x^0" _))'
+              ' "package:foo/bar.dart")'
               ''
               ' (method (public "bar") ((static))'
               ' (sync) () () () ("x^0" () (dynamic) _ ()) () () (dynamic)'
               ' _ (ret'
               ' (invoke-static "package:foo/bar.dart::@methods::foo"'
-              ' () ((get-var "x^0" _)) ()))))'
+              ' () ((get-var "x^0" _)) ()))'
+              ' "package:foo/bar.dart"))'
               ''
               ' ()'
               ''
               ' ()'
               ''
-              ' ()',
+              ' ()'
+              ''
+              ' "package:foo/bar.dart"',
           makeSerializationState: () =>
               new SerializationState(new SerializationEnvironment(null)),
           makeDeserializationState: () => new DeserializationState(
@@ -529,15 +529,17 @@
           serializer: librarySerializer);
     }(),
     () {
-      Class a = Class(name: "A");
+      Uri uri = Uri(scheme: "package", path: "foo/bar.dart");
+      Class a = Class(name: "A", fileUri: uri);
       Procedure foo = Procedure(
           Name("foo"),
           ProcedureKind.Method,
           FunctionNode(ReturnStatement(NullLiteral()),
               returnType: InterfaceType(a, Nullability.legacy)),
-          isStatic: true);
-      Library library = Library(Uri(scheme: "package", path: "foo/bar.dart"),
-          classes: [a], procedures: [foo]);
+          isStatic: true,
+          fileUri: uri);
+      Library library =
+          Library(uri, fileUri: uri, classes: [a], procedures: [foo]);
       Component component = Component(libraries: [library]);
       component.computeCanonicalNames();
       return new TestCase<Library>(
@@ -548,13 +550,16 @@
               ''
               ' ((method (public "foo") ((static))'
               ' (sync) () () () () () () (interface "package:foo/bar.dart::A" ())'
-              ' _ (ret (null))))'
+              ' _ (ret (null))'
+              ' "package:foo/bar.dart"))'
               ''
-              ' ("A" () () () () _ _ () ())'
+              ' ("A" () "package:foo/bar.dart" () () () _ _ () ())'
               ''
               ' ()'
               ''
-              ' ()',
+              ' ()'
+              ''
+              ' "package:foo/bar.dart"',
           makeSerializationState: () =>
               new SerializationState(new SerializationEnvironment(null)),
           makeDeserializationState: () => new DeserializationState(
@@ -579,8 +584,8 @@
     if (roundTripInput != testCase.expectation) {
       failures.add(''
           "* initial serialization for test '${testCase.name}'"
-          " gave output '${roundTripInput}'"
-          " but expected '${testCase.expectation}'");
+          " gave output:\n    ${roundTripInput}\n"
+          "  but expected:\n    ${testCase.expectation}");
     }
 
     TreeNode deserialized =
diff --git a/pkg/kernel/test/type_parser.dart b/pkg/kernel/test/type_parser.dart
index f2fac0e..67a4c05 100644
--- a/pkg/kernel/test/type_parser.dart
+++ b/pkg/kernel/test/type_parser.dart
@@ -326,7 +326,8 @@
   final Component component = new Component();
 
   LazyTypeEnvironment() {
-    dummyLibrary = new Library(Uri.parse('file://dummy.dart'))
+    Uri uri = Uri.parse('file://dummy.dart');
+    dummyLibrary = new Library(uri, fileUri: uri)
       ..isNonNullableByDefault = true;
     component.libraries.add(dummyLibrary..parent = component);
     dummyLibrary.name = 'lib';
@@ -346,7 +347,7 @@
   }
 
   Class makeClass(String name) {
-    var class_ = new Class(name: name);
+    var class_ = new Class(name: name, fileUri: dummyLibrary.fileUri);
     dummyLibrary.addClass(class_);
     return class_;
   }
diff --git a/pkg/kernel/test/typedef_unalias_test.dart b/pkg/kernel/test/typedef_unalias_test.dart
index 18be629..aded3c3 100644
--- a/pkg/kernel/test/typedef_unalias_test.dart
+++ b/pkg/kernel/test/typedef_unalias_test.dart
@@ -18,7 +18,7 @@
 
 main() {
   harnessTest('`Foo` where typedef Foo = C', (TestHarness harness) {
-    var foo = new Typedef('Foo', harness.otherLegacyRawType);
+    var foo = new Typedef('Foo', harness.otherLegacyRawType, fileUri: dummyUri);
     harness.enclosingLibrary.addTypedef(foo);
     var type = new TypedefType(foo, Nullability.legacy);
     expect(type.unalias, equals(harness.otherLegacyRawType));
@@ -29,7 +29,8 @@
         'Foo',
         new InterfaceType(harness.otherClass, Nullability.legacy,
             [new TypeParameterType(param, Nullability.legacy)]),
-        typeParameters: [param]);
+        typeParameters: [param],
+        fileUri: dummyUri);
     harness.enclosingLibrary.addTypedef(foo);
     var input =
         new TypedefType(foo, Nullability.legacy, [harness.objectLegacyRawType]);
@@ -44,13 +45,15 @@
         'Foo',
         new InterfaceType(harness.otherClass, Nullability.legacy,
             [new TypeParameterType(fooParam, Nullability.legacy)]),
-        typeParameters: [fooParam]);
+        typeParameters: [fooParam],
+        fileUri: dummyUri);
     var barParam = harness.makeTypeParameter('T');
     var bar = new Typedef(
         'Bar',
         new TypedefType(foo, Nullability.legacy,
             [new TypeParameterType(barParam, Nullability.legacy)]),
-        typeParameters: [barParam]);
+        typeParameters: [barParam],
+        fileUri: dummyUri);
     harness.enclosingLibrary.addTypedef(foo);
     harness.enclosingLibrary.addTypedef(bar);
     var input =
@@ -66,7 +69,8 @@
         'Foo',
         new InterfaceType(harness.otherClass, Nullability.legacy,
             [new TypeParameterType(param, Nullability.legacy)]),
-        typeParameters: [param]);
+        typeParameters: [param],
+        fileUri: dummyUri);
     harness.enclosingLibrary.addTypedef(foo);
     var input = new TypedefType(foo, Nullability.legacy, [
       new TypedefType(foo, Nullability.legacy, [harness.objectLegacyRawType])
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index f8b1718..9803f71 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -77,12 +77,13 @@
   negative1Test(
     'Member redeclared',
     (TestHarness test) {
-      Field field =
-          new Field.mutable(new Name('field'), initializer: new NullLiteral());
+      Field field = new Field.mutable(new Name('field'),
+          initializer: new NullLiteral(), fileUri: dummyUri);
       test.addNode(Class(
           name: 'Test',
           supertype: test.objectClass.asRawSupertype,
-          fields: [field, field]));
+          fields: [field, field],
+          fileUri: dummyUri));
       return field;
     },
     (Node node) => "Member '$node' has been declared more than once.",
@@ -104,7 +105,8 @@
       test.addNode(Class(
           name: 'Test',
           supertype: test.objectClass.asRawSupertype,
-          typeParameters: [parameter, parameter]));
+          typeParameters: [parameter, parameter],
+          fileUri: dummyUri));
       return parameter;
     },
     (Node node) => "Type parameter '$node' redeclared.",
@@ -117,7 +119,8 @@
           new Name('bar'),
           ProcedureKind.Method,
           new FunctionNode(new ReturnStatement(new NullLiteral()),
-              typeParameters: [parameter, parameter])));
+              typeParameters: [parameter, parameter]),
+          fileUri: dummyUri));
 
       return parameter;
     },
@@ -156,7 +159,8 @@
           ProcedureKind.Method,
           new FunctionNode(new ReturnStatement(new TypeLiteral(
               new TypeParameterType(node, Nullability.legacy)))),
-          isStatic: true));
+          isStatic: true,
+          fileUri: dummyUri));
 
       return [node, test.enclosingClass];
     },
@@ -171,7 +175,8 @@
       test.addNode(Field.mutable(new Name('field'),
           initializer:
               new TypeLiteral(new TypeParameterType(node, Nullability.legacy)),
-          isStatic: true));
+          isStatic: true,
+          fileUri: dummyUri));
       return [node, test.enclosingClass];
     },
     (Node node, Node parent) =>
@@ -188,13 +193,16 @@
           name: 'Test',
           supertype: test.objectClass.asRawSupertype,
           procedures: [
-            new Procedure(new Name('generic'), ProcedureKind.Method, parent),
+            new Procedure(new Name('generic'), ProcedureKind.Method, parent,
+                fileUri: dummyUri),
             new Procedure(
                 new Name('use'),
                 ProcedureKind.Method,
                 new FunctionNode(new ReturnStatement(new TypeLiteral(
-                    new TypeParameterType(parameter, Nullability.legacy)))))
-          ]));
+                    new TypeParameterType(parameter, Nullability.legacy)))),
+                fileUri: dummyUri)
+          ],
+          fileUri: dummyUri));
 
       return [parameter, parent];
     },
@@ -227,7 +235,7 @@
   negative1Test(
     'Dangling interface type',
     (TestHarness test) {
-      Class orphan = new Class(name: 'Class');
+      Class orphan = new Class(name: 'Class', fileUri: dummyUri);
       test.addNode(
           new TypeLiteral(new InterfaceType(orphan, Nullability.legacy)));
       return orphan;
@@ -237,7 +245,7 @@
   negative1Test(
     'Dangling field get',
     (TestHarness test) {
-      Field orphan = new Field.mutable(new Name('foo'));
+      Field orphan = new Field.mutable(new Name('foo'), fileUri: dummyUri);
       test.addNode(new PropertyGet(new NullLiteral(), orphan.name, orphan));
       return orphan;
     },
@@ -259,7 +267,8 @@
         " expected 'Procedure', but found: 'Null'.",
     (TestHarness test) {
       var procedure = new Procedure(
-          new Name('bar'), ProcedureKind.Method, dummyFunctionNode);
+          new Name('bar'), ProcedureKind.Method, dummyFunctionNode,
+          fileUri: dummyUri);
       procedure.function = new FunctionNode(new EmptyStatement());
       test.addNode(procedure);
     },
@@ -272,7 +281,8 @@
           ProcedureKind.Method,
           new FunctionNode(new EmptyStatement(),
               positionalParameters: [new VariableDeclaration('p')]),
-          isStatic: true);
+          isStatic: true,
+          fileUri: dummyUri);
       test.enclosingClass.addProcedure(method);
       test.addNode(
           StaticInvocation(method, new Arguments([new NullLiteral()])));
@@ -283,7 +293,7 @@
     (TestHarness test) {
       var method = new Procedure(new Name('bar'), ProcedureKind.Method,
           new FunctionNode(new EmptyStatement()),
-          isStatic: true);
+          isStatic: true, fileUri: dummyUri);
       test.enclosingClass.addProcedure(method);
       test.addNode(
           StaticInvocation(method, new Arguments([new NullLiteral()])));
@@ -300,7 +310,8 @@
           ProcedureKind.Method,
           new FunctionNode(new EmptyStatement(),
               positionalParameters: [new VariableDeclaration('p')]),
-          isStatic: true);
+          isStatic: true,
+          fileUri: dummyUri);
       test.enclosingClass.addProcedure(method);
       test.addNode(StaticInvocation(method, new Arguments.empty()));
       return method;
@@ -312,7 +323,7 @@
     (TestHarness test) {
       var method = new Procedure(new Name('bar'), ProcedureKind.Method,
           new FunctionNode(new EmptyStatement()),
-          isStatic: true);
+          isStatic: true, fileUri: dummyUri);
       test.enclosingClass.addProcedure(method);
       test.addNode(StaticInvocation(
           method,
@@ -331,7 +342,8 @@
           ProcedureKind.Method,
           new FunctionNode(new EmptyStatement(),
               typeParameters: [test.makeTypeParameter()]),
-          isStatic: true);
+          isStatic: true,
+          fileUri: dummyUri);
       test.enclosingClass.addProcedure(method);
       test.addNode(StaticInvocation(method, new Arguments.empty()));
       return method;
@@ -343,7 +355,7 @@
     'ConstructorInvocation with missing type argument',
     (TestHarness test) {
       var constructor = new Constructor(new FunctionNode(new EmptyStatement()),
-          name: new Name('foo'));
+          name: new Name('foo'), fileUri: dummyUri);
       test.enclosingClass.addConstructor(constructor);
       test.addNode(ConstructorInvocation(constructor, new Arguments.empty()));
       return constructor;
@@ -358,7 +370,8 @@
       var typedef_ = new Typedef(
           'Foo',
           new FunctionType(
-              [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
+              [test.otherLegacyRawType], const VoidType(), Nullability.legacy),
+          fileUri: dummyUri);
       test.addNode(typedef_);
     },
   );
@@ -368,15 +381,16 @@
       var typedef_ = new Typedef(
           'Foo',
           new InterfaceType(
-              test.otherClass, Nullability.legacy, [const DynamicType()]));
+              test.otherClass, Nullability.legacy, [const DynamicType()]),
+          fileUri: dummyUri);
       test.addNode(typedef_);
     },
   );
   positiveTest(
     'Valid typedefs Foo = Bar, Bar = C',
     (TestHarness test) {
-      var foo = new Typedef('Foo', null);
-      var bar = new Typedef('Bar', null);
+      var foo = new Typedef('Foo', null, fileUri: dummyUri);
+      var bar = new Typedef('Bar', null, fileUri: dummyUri);
       foo.type = new TypedefType(bar, Nullability.legacy);
       bar.type = test.otherLegacyRawType;
       test.enclosingLibrary.addTypedef(foo);
@@ -386,8 +400,8 @@
   positiveTest(
     'Valid typedefs Foo = C<Bar>, Bar = C',
     (TestHarness test) {
-      var foo = new Typedef('Foo', null);
-      var bar = new Typedef('Bar', null);
+      var foo = new Typedef('Foo', null, fileUri: dummyUri);
+      var bar = new Typedef('Bar', null, fileUri: dummyUri);
       foo.type = new InterfaceType(test.otherClass, Nullability.legacy,
           [new TypedefType(bar, Nullability.legacy)]);
       bar.type = test.otherLegacyRawType;
@@ -401,9 +415,12 @@
       var typedef_ = new Typedef(
           'Foo',
           new FunctionType(
-              [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
+              [test.otherLegacyRawType], const VoidType(), Nullability.legacy),
+          fileUri: dummyUri);
       var field = new Field.mutable(new Name('field'),
-          type: new TypedefType(typedef_, Nullability.legacy), isStatic: true);
+          type: new TypedefType(typedef_, Nullability.legacy),
+          isStatic: true,
+          fileUri: dummyUri);
       test.enclosingLibrary.addTypedef(typedef_);
       test.enclosingLibrary.addField(field);
     },
@@ -411,7 +428,7 @@
   negative1Test(
     'Invalid typedef Foo = Foo',
     (TestHarness test) {
-      var typedef_ = new Typedef('Foo', null);
+      var typedef_ = new Typedef('Foo', null, fileUri: dummyUri);
       typedef_.type = new TypedefType(typedef_, Nullability.legacy);
       test.addNode(typedef_);
       return typedef_;
@@ -421,7 +438,7 @@
   negative1Test(
     'Invalid typedef Foo = `(Foo) => void`',
     (TestHarness test) {
-      var typedef_ = new Typedef('Foo', null);
+      var typedef_ = new Typedef('Foo', null, fileUri: dummyUri);
       typedef_.type = new FunctionType(
           [new TypedefType(typedef_, Nullability.legacy)],
           const VoidType(),
@@ -434,7 +451,7 @@
   negative1Test(
     'Invalid typedef Foo = `() => Foo`',
     (TestHarness test) {
-      var typedef_ = new Typedef('Foo', null);
+      var typedef_ = new Typedef('Foo', null, fileUri: dummyUri);
       typedef_.type = new FunctionType([],
           new TypedefType(typedef_, Nullability.legacy), Nullability.legacy);
       test.addNode(typedef_);
@@ -445,7 +462,7 @@
   negative1Test(
     'Invalid typedef Foo = C<Foo>',
     (TestHarness test) {
-      var typedef_ = new Typedef('Foo', null);
+      var typedef_ = new Typedef('Foo', null, fileUri: dummyUri);
       typedef_.type = new InterfaceType(test.otherClass, Nullability.legacy,
           [new TypedefType(typedef_, Nullability.legacy)]);
       test.addNode(typedef_);
@@ -456,8 +473,8 @@
   negative1Test(
     'Invalid typedefs Foo = Bar, Bar = Foo',
     (TestHarness test) {
-      var foo = new Typedef('Foo', null);
-      var bar = new Typedef('Bar', null);
+      var foo = new Typedef('Foo', null, fileUri: dummyUri);
+      var bar = new Typedef('Bar', null, fileUri: dummyUri);
       foo.type = new TypedefType(bar, Nullability.legacy);
       bar.type = new TypedefType(foo, Nullability.legacy);
       test.enclosingLibrary.addTypedef(foo);
@@ -469,8 +486,8 @@
   negative1Test(
     'Invalid typedefs Foo = Bar, Bar = C<Foo>',
     (TestHarness test) {
-      var foo = new Typedef('Foo', null);
-      var bar = new Typedef('Bar', null);
+      var foo = new Typedef('Foo', null, fileUri: dummyUri);
+      var bar = new Typedef('Bar', null, fileUri: dummyUri);
       foo.type = new TypedefType(bar, Nullability.legacy);
       bar.type = new InterfaceType(test.otherClass, Nullability.legacy,
           [new TypedefType(foo, Nullability.legacy)]);
@@ -483,8 +500,8 @@
   negative1Test(
     'Invalid typedefs Foo = C<Bar>, Bar = C<Foo>',
     (TestHarness test) {
-      var foo = new Typedef('Foo', null);
-      var bar = new Typedef('Bar', null);
+      var foo = new Typedef('Foo', null, fileUri: dummyUri);
+      var bar = new Typedef('Bar', null, fileUri: dummyUri);
       foo.type = new InterfaceType(test.otherClass, Nullability.legacy,
           [new TypedefType(bar, Nullability.legacy)]);
       bar.type = new InterfaceType(test.otherClass, Nullability.legacy,
@@ -498,11 +515,12 @@
   positiveTest(
     'Valid long typedefs C20 = C19 = ... = C1 = C0 = dynamic',
     (TestHarness test) {
-      var typedef_ = new Typedef('C0', const DynamicType());
+      var typedef_ = new Typedef('C0', const DynamicType(), fileUri: dummyUri);
       test.enclosingLibrary.addTypedef(typedef_);
       for (int i = 1; i < 20; ++i) {
-        typedef_ =
-            new Typedef('C$i', new TypedefType(typedef_, Nullability.legacy));
+        typedef_ = new Typedef(
+            'C$i', new TypedefType(typedef_, Nullability.legacy),
+            fileUri: dummyUri);
         test.enclosingLibrary.addTypedef(typedef_);
       }
     },
@@ -510,13 +528,14 @@
   negative1Test(
     'Invalid long typedefs C20 = C19 = ... = C1 = C0 = C20',
     (TestHarness test) {
-      Typedef firstTypedef = new Typedef('C0', null);
+      Typedef firstTypedef = new Typedef('C0', null, fileUri: dummyUri);
       Typedef typedef_ = firstTypedef;
       test.enclosingLibrary.addTypedef(typedef_);
       var first = typedef_;
       for (int i = 1; i < 20; ++i) {
-        typedef_ =
-            new Typedef('C$i', new TypedefType(typedef_, Nullability.legacy));
+        typedef_ = new Typedef(
+            'C$i', new TypedefType(typedef_, Nullability.legacy),
+            fileUri: dummyUri);
         test.enclosingLibrary.addTypedef(typedef_);
       }
       first.type = new TypedefType(typedef_, Nullability.legacy);
@@ -532,7 +551,8 @@
           'Foo',
           new InterfaceType(test.otherClass, Nullability.legacy,
               [new TypeParameterType(param, Nullability.legacy)]),
-          typeParameters: [param]);
+          typeParameters: [param],
+          fileUri: dummyUri);
       test.addNode(foo);
     },
   );
@@ -546,7 +566,8 @@
           'Foo',
           new InterfaceType(test.otherClass, Nullability.legacy,
               [new TypeParameterType(param, Nullability.legacy)]),
-          typeParameters: [param]);
+          typeParameters: [param],
+          fileUri: dummyUri);
       test.addNode(foo);
     },
   );
@@ -554,8 +575,8 @@
     'Valid typedef Foo<T> = dynamic, Bar<T extends Foo<T>> = C<T>',
     (TestHarness test) {
       var fooParam = test.makeTypeParameter('T');
-      var foo =
-          new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
+      var foo = new Typedef('Foo', const DynamicType(),
+          typeParameters: [fooParam], fileUri: dummyUri);
       var barParam = new TypeParameter('T', null);
       barParam.bound = new TypedefType(foo, Nullability.legacy,
           [new TypeParameterType(barParam, Nullability.legacy)]);
@@ -563,7 +584,8 @@
           'Bar',
           new InterfaceType(test.otherClass, Nullability.legacy,
               [new TypeParameterType(barParam, Nullability.legacy)]),
-          typeParameters: [barParam]);
+          typeParameters: [barParam],
+          fileUri: dummyUri);
       test.enclosingLibrary.addTypedef(foo);
       test.enclosingLibrary.addTypedef(bar);
     },
@@ -572,8 +594,8 @@
     'Invalid typedefs Foo<T extends Bar<T>>, Bar<T extends Foo<T>>',
     (TestHarness test) {
       var fooParam = test.makeTypeParameter('T');
-      var foo =
-          new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
+      var foo = new Typedef('Foo', const DynamicType(),
+          typeParameters: [fooParam], fileUri: dummyUri);
       var barParam = new TypeParameter('T', null);
       barParam.bound = new TypedefType(foo, Nullability.legacy,
           [new TypeParameterType(barParam, Nullability.legacy)]);
@@ -581,7 +603,8 @@
           'Bar',
           new InterfaceType(test.otherClass, Nullability.legacy,
               [new TypeParameterType(barParam, Nullability.legacy)]),
-          typeParameters: [barParam]);
+          typeParameters: [barParam],
+          fileUri: dummyUri);
       fooParam.bound = new TypedefType(bar, Nullability.legacy,
           [new TypeParameterType(fooParam, Nullability.legacy)]);
       test.enclosingLibrary.addTypedef(foo);
@@ -598,7 +621,8 @@
           'Foo',
           new InterfaceType(test.otherClass, Nullability.legacy,
               [new TypeParameterType(param, Nullability.legacy)]),
-          typeParameters: [param]);
+          typeParameters: [param],
+          fileUri: dummyUri);
       param.bound =
           new TypedefType(foo, Nullability.legacy, [const DynamicType()]);
       test.addNode(foo);
@@ -610,11 +634,11 @@
     'Typedef arity error',
     (TestHarness test) {
       var param = test.makeTypeParameter('T');
-      var foo =
-          new Typedef('Foo', test.otherLegacyRawType, typeParameters: [param]);
+      var foo = new Typedef('Foo', test.otherLegacyRawType,
+          typeParameters: [param], fileUri: dummyUri);
       var typedefType = new TypedefType(foo, Nullability.legacy, []);
       var field = new Field.mutable(new Name('field'),
-          type: typedefType, isStatic: true);
+          type: typedefType, isStatic: true, fileUri: dummyUri);
       test.enclosingLibrary.addTypedef(foo);
       test.enclosingLibrary.addField(field);
       return typedefType;
@@ -626,9 +650,12 @@
   negative1Test(
     'Dangling typedef reference',
     (TestHarness test) {
-      var foo = new Typedef('Foo', test.otherLegacyRawType, typeParameters: []);
+      var foo = new Typedef('Foo', test.otherLegacyRawType,
+          typeParameters: [], fileUri: dummyUri);
       var field = new Field.mutable(new Name('field'),
-          type: new TypedefType(foo, Nullability.legacy, []), isStatic: true);
+          type: new TypedefType(foo, Nullability.legacy, []),
+          isStatic: true,
+          fileUri: dummyUri);
       test.enclosingLibrary.addField(field);
       return foo;
     },
@@ -637,7 +664,7 @@
   negative1Test(
     'Non-static top-level field',
     (TestHarness test) {
-      var field = new Field.mutable(new Name('field'));
+      var field = new Field.mutable(new Name('field'), fileUri: dummyUri);
       test.enclosingLibrary.addField(field);
       return null;
     },
@@ -739,31 +766,36 @@
 
   void setupComponent() {
     component = new Component();
-    stubLibrary = new Library(Uri.parse('dart:core'));
+    Uri dartCoreUri = Uri.parse('dart:core');
+    stubLibrary = new Library(dartCoreUri, fileUri: dartCoreUri);
     component.libraries.add(stubLibrary..parent = component);
     stubLibrary.name = 'dart.core';
-    objectClass = new Class(name: 'Object');
+    objectClass = new Class(name: 'Object', fileUri: dartCoreUri);
     objectLegacyRawType =
         new InterfaceType(objectClass, Nullability.legacy, const <DartType>[]);
     stubLibrary.addClass(objectClass);
-    enclosingLibrary = new Library(Uri.parse('file://test.dart'));
+    Uri testUri = Uri.parse('file://test.dart');
+    enclosingLibrary = new Library(testUri, fileUri: testUri);
     component.libraries.add(enclosingLibrary..parent = component);
     enclosingLibrary.name = 'test_lib';
     classTypeParameter = makeTypeParameter('T');
     enclosingClass = new Class(
         name: 'TestClass',
         typeParameters: [classTypeParameter],
-        supertype: objectClass.asRawSupertype);
+        supertype: objectClass.asRawSupertype,
+        fileUri: testUri);
     enclosingLegacyRawType = new InterfaceType(enclosingClass,
         Nullability.legacy, const <DartType>[const DynamicType()]);
     enclosingLibrary.addClass(enclosingClass);
     enclosingMember = new Procedure(new Name('test'), ProcedureKind.Method,
-        new FunctionNode(new EmptyStatement()));
+        new FunctionNode(new EmptyStatement()),
+        fileUri: dummyUri);
     enclosingClass.addProcedure(enclosingMember);
     otherClass = new Class(
         name: 'OtherClass',
         typeParameters: [makeTypeParameter('OtherT')],
-        supertype: objectClass.asRawSupertype);
+        supertype: objectClass.asRawSupertype,
+        fileUri: testUri);
     otherLegacyRawType = new InterfaceType(
         otherClass, Nullability.legacy, const <DartType>[const DynamicType()]);
     enclosingLibrary.addClass(otherClass);
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index b22fa57..502fe14 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -374,7 +374,8 @@
 
   /// Marker for noSuchMethod() invocation in the map of invocation targets.
   static final Member kNoSuchMethodMarker = new Procedure(
-      new Name('noSuchMethod&&'), ProcedureKind.Method, new FunctionNode(null));
+      new Name('noSuchMethod&&'), ProcedureKind.Method, new FunctionNode(null),
+      fileUri: dummyUri);
 
   _DispatchableInvocation(Selector selector, Args<Type> args)
       : super(selector, args) {
diff --git a/pkg/vm/test/transformations/type_flow/types_test.dart b/pkg/vm/test/transformations/type_flow/types_test.dart
index b848dc8..0945917 100644
--- a/pkg/vm/test/transformations/type_flow/types_test.dart
+++ b/pkg/vm/test/transformations/type_flow/types_test.dart
@@ -54,9 +54,11 @@
   final CoreTypes coreTypes = new CoreTypes(component);
 
   test('types-builder', () {
-    final Class c1 = new Class(name: 'C1');
-    final Class c2 =
-        new Class(name: 'C2', typeParameters: [new TypeParameter('E')]);
+    final Class c1 = new Class(name: 'C1', fileUri: dummyUri);
+    final Class c2 = new Class(
+        name: 'C2',
+        typeParameters: [new TypeParameter('E')],
+        fileUri: dummyUri);
 
     final TypesBuilder tb = new TestTypeHierarchy(coreTypes, {}, {});
     final tfc1 = tb.getTFClass(c1);
@@ -100,10 +102,10 @@
   test('union-intersection', () {
     // T1 <: T3, T2 <: T3
 
-    final c1 = new Class(name: 'T1');
-    final c2 = new Class(name: 'T2');
-    final c3 = new Class(name: 'T3');
-    final c4 = new Class(name: 'T4');
+    final c1 = new Class(name: 'T1', fileUri: dummyUri);
+    final c2 = new Class(name: 'T2', fileUri: dummyUri);
+    final c3 = new Class(name: 'T3', fileUri: dummyUri);
+    final c4 = new Class(name: 'T4', fileUri: dummyUri);
 
     final tfc1 = new TFClass(1, c1);
     final tfc2 = new TFClass(2, c2);
@@ -291,9 +293,9 @@
   });
 
   test('hashcode-equals', () {
-    final c1 = new Class(name: 'C1');
-    final c2 = new Class(name: 'C2');
-    final c3 = new Class(name: 'C3');
+    final c1 = new Class(name: 'C1', fileUri: dummyUri);
+    final c2 = new Class(name: 'C2', fileUri: dummyUri);
+    final c3 = new Class(name: 'C3', fileUri: dummyUri);
 
     final tfc1 = new TFClass(1, c1);
     final tfc2 = new TFClass(2, c2);
diff --git a/runtime/vm/compiler/compiler_sources.gni b/runtime/vm/compiler/compiler_sources.gni
index 9135f50..1b237e9 100644
--- a/runtime/vm/compiler/compiler_sources.gni
+++ b/runtime/vm/compiler/compiler_sources.gni
@@ -175,6 +175,7 @@
   "backend/typed_data_aot_test.cc",
   "backend/yield_position_test.cc",
   "cha_test.cc",
+  "relocation_test.cc",
   "ffi/native_type_vm_test.cc",
   "frontend/kernel_binary_flowgraph_test.cc",
   "write_barrier_elimination_test.cc",
diff --git a/runtime/vm/compiler/relocation.cc b/runtime/vm/compiler/relocation.cc
index ff5ea61..e2f44aa 100644
--- a/runtime/vm/compiler/relocation.cc
+++ b/runtime/vm/compiler/relocation.cc
@@ -20,6 +20,47 @@
             false,
             "Generate always trampolines (for testing purposes).");
 
+DEFINE_FLAG(int,
+            lower_tail_pc_relative_call_distance,
+            -1,
+            "Lower tail call distance.");
+DEFINE_FLAG(int,
+            upper_tail_pc_relative_call_distance,
+            -1,
+            "Upper tail call distance.");
+DEFINE_FLAG(int, lower_pc_relative_call_distance, -1, "Lower call distance.");
+DEFINE_FLAG(int, upper_pc_relative_call_distance, -1, "Upper call distance.");
+
+struct TailCallDistanceLimits {
+  static intptr_t Lower() {
+    if (FLAG_lower_tail_pc_relative_call_distance != -1) {
+      return FLAG_lower_tail_pc_relative_call_distance;
+    }
+    return PcRelativeTailCallPattern::kLowerCallingRange;
+  }
+  static intptr_t Upper() {
+    if (FLAG_upper_tail_pc_relative_call_distance != -1) {
+      return FLAG_upper_tail_pc_relative_call_distance;
+    }
+    return PcRelativeTailCallPattern::kUpperCallingRange;
+  }
+};
+
+struct CallDistanceLimits {
+  static intptr_t Lower() {
+    if (FLAG_lower_pc_relative_call_distance != -1) {
+      return FLAG_lower_pc_relative_call_distance;
+    }
+    return PcRelativeCallPattern::kLowerCallingRange;
+  }
+  static intptr_t Upper() {
+    if (FLAG_upper_pc_relative_call_distance != -1) {
+      return FLAG_upper_pc_relative_call_distance;
+    }
+    return PcRelativeCallPattern::kUpperCallingRange;
+  }
+};
+
 const intptr_t kTrampolineSize =
     Utils::RoundUp(PcRelativeTrampolineJumpPattern::kLengthInBytes,
                    compiler::target::Instructions::kBarePayloadAlignment);
@@ -46,7 +87,7 @@
   //    * the maximum number of calls
   //    * the maximum offset into a target instruction
   //
-  FindInstructionAndCallLimits();
+  FindLargestInstruction();
 
   // Emit all instructions and do relocations on the way.
   for (intptr_t i = 0; i < code_objects_->length(); ++i) {
@@ -65,7 +106,8 @@
 
     // If we have forward/backwards calls which are almost out-of-range, we'll
     // create trampolines now.
-    BuildTrampolinesForAlmostOutOfRangeCalls();
+    BuildTrampolinesForAlmostOutOfRangeCalls(
+        /*force=*/(i == (code_objects_->length() - 1)));
   }
 
   // We're guaranteed to have all calls resolved, since
@@ -101,7 +143,7 @@
   // however we might need it to write information into V8 snapshot profile.
 }
 
-void CodeRelocator::FindInstructionAndCallLimits() {
+void CodeRelocator::FindLargestInstruction() {
   auto zone = thread_->zone();
   auto& current_caller = Code::Handle(zone);
   auto& call_targets = Array::Handle(zone);
@@ -122,48 +164,10 @@
         kind_type_and_offset_ = call.Get<Code::kSCallTableKindAndOffset>();
         const auto kind =
             Code::KindField::decode(kind_type_and_offset_.Value());
-        const auto return_pc_offset =
-            Code::OffsetField::decode(kind_type_and_offset_.Value());
-        const auto call_entry_point =
-            Code::EntryPointField::decode(kind_type_and_offset_.Value());
-
         if (kind == Code::kCallViaCode) {
           continue;
         }
-
-        destination_ = GetTarget(call);
         num_calls++;
-
-        // A call site can decide to jump not to the beginning of a function but
-        // rather jump into it at a certain (positive) offset.
-        int32_t offset_into_target = 0;
-        if (kind == Code::kPcRelativeCall || kind == Code::kPcRelativeTTSCall) {
-          const intptr_t call_instruction_offset =
-              return_pc_offset - PcRelativeCallPattern::kLengthInBytes;
-          PcRelativeCallPattern call(current_caller.PayloadStart() +
-                                     call_instruction_offset);
-          ASSERT(call.IsValid());
-          offset_into_target = call.distance();
-        } else {
-          ASSERT(kind == Code::kPcRelativeTailCall);
-          const intptr_t call_instruction_offset =
-              return_pc_offset - PcRelativeTailCallPattern::kLengthInBytes;
-          PcRelativeTailCallPattern call(current_caller.PayloadStart() +
-                                         call_instruction_offset);
-          ASSERT(call.IsValid());
-          offset_into_target = call.distance();
-        }
-
-        const uword destination_payload = destination_.PayloadStart();
-        const uword entry_point = call_entry_point == Code::kUncheckedEntry
-                                      ? destination_.UncheckedEntryPoint()
-                                      : destination_.EntryPoint();
-
-        offset_into_target += (entry_point - destination_payload);
-
-        if (offset_into_target > max_offset_into_target_) {
-          max_offset_into_target_ = offset_into_target;
-        }
       }
 
       if (num_calls > max_calls_) {
@@ -323,8 +327,11 @@
   auto map_entry = text_offsets_.Lookup(callee);
   if (map_entry == nullptr) return false;
 
-  ResolveCall(unresolved_call);
-  return true;
+  if (IsTargetInRangeFor(unresolved_call, map_entry->value)) {
+    ResolveCall(unresolved_call);
+    return true;
+  }
+  return false;
 }
 
 void CodeRelocator::ResolveUnresolvedCallsTargeting(
@@ -411,11 +418,11 @@
   const auto forward_distance =
       target_text_offset - unresolved_call->text_offset;
   if (unresolved_call->is_tail_call) {
-    return PcRelativeTailCallPattern::kLowerCallingRange < forward_distance &&
-           forward_distance < PcRelativeTailCallPattern::kUpperCallingRange;
+    return TailCallDistanceLimits::Lower() < forward_distance &&
+           forward_distance < TailCallDistanceLimits::Upper();
   } else {
-    return PcRelativeCallPattern::kLowerCallingRange < forward_distance &&
-           forward_distance < PcRelativeCallPattern::kUpperCallingRange;
+    return CallDistanceLimits::Lower() < forward_distance &&
+           forward_distance < CallDistanceLimits::Upper();
   }
 }
 
@@ -471,7 +478,7 @@
   return destination_.ptr();
 }
 
-void CodeRelocator::BuildTrampolinesForAlmostOutOfRangeCalls() {
+void CodeRelocator::BuildTrampolinesForAlmostOutOfRangeCalls(bool force) {
   while (!all_unresolved_calls_.IsEmpty()) {
     UnresolvedCall* unresolved_call = all_unresolved_calls_.First();
 
@@ -484,7 +491,7 @@
         kTrampolineSize *
             (unresolved_calls_by_destination_.Length() + max_calls_);
     if (IsTargetInRangeFor(unresolved_call, future_boundary) &&
-        !FLAG_always_generate_trampolines_for_testing) {
+        !FLAG_always_generate_trampolines_for_testing && !force) {
       break;
     }
 
diff --git a/runtime/vm/compiler/relocation.h b/runtime/vm/compiler/relocation.h
index 948dffc..bd9cc15 100644
--- a/runtime/vm/compiler/relocation.h
+++ b/runtime/vm/compiler/relocation.h
@@ -161,7 +161,7 @@
 
   void Relocate(bool is_vm_isolate);
 
-  void FindInstructionAndCallLimits();
+  void FindLargestInstruction();
 
   bool AddInstructionsToText(CodePtr code);
   void ScanCallTargets(const Code& code,
@@ -183,7 +183,7 @@
                                 intptr_t destination_text);
   void ResolveTrampoline(UnresolvedTrampoline* unresolved_trampoline);
 
-  void BuildTrampolinesForAlmostOutOfRangeCalls();
+  void BuildTrampolinesForAlmostOutOfRangeCalls(bool force);
 
   intptr_t FindDestinationInText(const InstructionsPtr destination,
                                  intptr_t offset_into_target);
@@ -207,7 +207,6 @@
   intptr_t max_instructions_size_ = 0;
   // The maximum number of pc-relative calls in an instructions object.
   intptr_t max_calls_ = 0;
-  intptr_t max_offset_into_target_ = 0;
 
   // Data structures used for relocation.
   intptr_t next_text_offset_ = 0;
diff --git a/runtime/vm/compiler/relocation_test.cc b/runtime/vm/compiler/relocation_test.cc
new file mode 100644
index 0000000..9e101cb
--- /dev/null
+++ b/runtime/vm/compiler/relocation_test.cc
@@ -0,0 +1,406 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+#include "platform/assert.h"
+
+#include "vm/allocation.h"
+#include "vm/code_patcher.h"
+#include "vm/compiler/assembler/assembler.h"
+#include "vm/compiler/relocation.h"
+#include "vm/instructions.h"
+#include "vm/longjump.h"
+#include "vm/unit_test.h"
+
+#define __ assembler->
+
+namespace dart {
+
+#if defined(DART_PRECOMPILER) && !defined(TARGET_ARCH_IA32)
+
+DECLARE_FLAG(bool, dual_map_code);
+DECLARE_FLAG(int, lower_pc_relative_call_distance);
+DECLARE_FLAG(int, upper_pc_relative_call_distance);
+
+struct RelocatorTestHelper {
+  explicit RelocatorTestHelper(Thread* thread)
+      : thread(thread),
+        locker(thread, thread->isolate_group()->program_lock()),
+        safepoint_and_growth_scope(thread) {
+    // So the relocator uses the correct instruction size layout.
+    FLAG_precompiled_mode = true;
+    FLAG_use_bare_instructions = true;
+
+    FLAG_lower_pc_relative_call_distance = -128;
+    FLAG_upper_pc_relative_call_distance = 128;
+  }
+  ~RelocatorTestHelper() {
+    FLAG_use_bare_instructions = false;
+    FLAG_precompiled_mode = false;
+  }
+
+  void CreateInstructions(std::initializer_list<intptr_t> sizes) {
+    for (auto size : sizes) {
+      codes.Add(&Code::Handle(AllocationInstruction(size)));
+    }
+  }
+
+  CodePtr AllocationInstruction(uintptr_t size) {
+    const auto& instructions = Instructions::Handle(
+        Instructions::New(size, /*has_monomorphic=*/false));
+
+    uword addr = instructions.PayloadStart();
+    for (uintptr_t i = 0; i < (size / 4); ++i) {
+      *reinterpret_cast<uint32_t*>(addr + 4 * i) =
+          static_cast<uint32_t>(kBreakInstructionFiller);
+    }
+
+    const auto& code = Code::Handle(Code::New(0));
+    code.SetActiveInstructions(instructions, 0);
+    code.set_instructions(instructions);
+    return code.ptr();
+  }
+
+  void EmitPcRelativeCallFunction(intptr_t idx, intptr_t to_idx) {
+    const Code& code = *codes[idx];
+    const Code& target = *codes[to_idx];
+
+    EmitCodeFor(code, [&](compiler::Assembler* assembler) {
+#if defined(TARGET_ARCH_ARM64)
+      __ SetupDartSP();
+      __ EnterFrame(0);
+#elif defined(TARGET_ARCH_ARM)
+    SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(
+      __ EnterFrame((1 << LR), 0));
+#endif
+      __ GenerateUnRelocatedPcRelativeCall();
+      AddPcRelativeCallTargetAt(__ CodeSize(), code, target);
+#if defined(TARGET_ARCH_ARM64)
+      __ LeaveFrame();
+#elif defined(TARGET_ARCH_ARM)
+    RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(
+      __ LeaveFrame((1 << LR)));
+#endif
+      __ Ret();
+    });
+  }
+
+  void EmitReturn42Function(intptr_t idx) {
+    const Code& code = *codes[idx];
+    EmitCodeFor(code, [&](compiler::Assembler* assembler) {
+#if defined(TARGET_ARCH_X64)
+      __ LoadImmediate(RAX, 42);
+#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+      __ LoadImmediate(R0, 42);
+#endif
+      __ Ret();
+    });
+  }
+
+  void EmitCodeFor(const Code& code,
+                   std::function<void(compiler::Assembler* assembler)> fun) {
+    const auto& inst = Instructions::Handle(code.instructions());
+
+    compiler::Assembler assembler(nullptr);
+    fun(&assembler);
+
+    const uword addr = inst.PayloadStart();
+    memmove(reinterpret_cast<void*>(addr),
+            reinterpret_cast<void*>(assembler.CodeAddress(0)),
+            assembler.CodeSize());
+
+    if (FLAG_write_protect_code && FLAG_dual_map_code) {
+      auto& instructions = Instructions::Handle(code.instructions());
+      instructions ^= OldPage::ToExecutable(instructions.ptr());
+      code.set_instructions(instructions);
+    }
+  }
+
+  void AddPcRelativeCallTargetAt(intptr_t offset,
+                                 const Code& code,
+                                 const Code& target) {
+    const auto& kind_and_offset = Smi::Handle(
+        Smi::New(Code::KindField::encode(Code::kPcRelativeCall) |
+                 Code::EntryPointField::encode(Code::kDefaultEntry) |
+                 Code::OffsetField::encode(offset)));
+    AddCall(code, target, kind_and_offset);
+  }
+
+  void AddCall(const Code& code,
+               const Code& target,
+               const Smi& kind_and_offset) {
+    auto& call_targets = Array::Handle(code.static_calls_target_table());
+    if (call_targets.IsNull()) {
+      call_targets = Array::New(Code::kSCallTableEntryLength);
+    } else {
+      call_targets = Array::Grow(
+          call_targets, call_targets.Length() + Code::kSCallTableEntryLength);
+    }
+
+    StaticCallsTable table(call_targets);
+    auto entry = table[table.Length() - 1];
+    entry.Set<Code::kSCallTableKindAndOffset>(kind_and_offset);
+    entry.Set<Code::kSCallTableCodeOrTypeTarget>(target);
+    entry.Set<Code::kSCallTableFunctionTarget>(
+        Function::Handle(Function::null()));
+    code.set_static_calls_target_table(call_targets);
+  }
+
+  void BuildImageAndRunTest(
+      std::function<void(const GrowableArray<ImageWriterCommand>&, uword*)>
+          fun) {
+    auto& image = Instructions::Handle();
+    uword entrypoint = 0;
+    {
+      GrowableArray<CodePtr> raw_codes;
+      for (auto code : codes) {
+        raw_codes.Add(code->ptr());
+      }
+
+      GrowableArray<ImageWriterCommand> commands;
+      CodeRelocator::Relocate(thread, &raw_codes, &commands,
+                              /*is_vm_isolate=*/false);
+
+      uword expected_offset = 0;
+      fun(commands, &expected_offset);
+
+      image = BuildImage(&commands);
+      entrypoint = image.EntryPoint() + expected_offset;
+
+      for (intptr_t i = 0; i < commands.length(); ++i) {
+        if (commands[i].op == ImageWriterCommand::InsertBytesOfTrampoline) {
+          delete[] commands[i].insert_trampoline_bytes.buffer;
+          commands[i].insert_trampoline_bytes.buffer = nullptr;
+        }
+      }
+    }
+    typedef intptr_t (*Fun)() DART_UNUSED;
+#if defined(TARGET_ARCH_X64)
+    EXPECT_EQ(42, reinterpret_cast<Fun>(entrypoint)());
+#elif defined(TARGET_ARCH_ARM)
+    EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Fun, entrypoint));
+#elif defined(TARGET_ARCH_ARM64)
+    EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Fun, entrypoint));
+#endif
+  }
+
+  InstructionsPtr BuildImage(GrowableArray<ImageWriterCommand>* commands) {
+    intptr_t size = 0;
+    for (intptr_t i = 0; i < commands->length(); ++i) {
+      switch ((*commands)[i].op) {
+        case ImageWriterCommand::InsertBytesOfTrampoline:
+          size += (*commands)[i].insert_trampoline_bytes.buffer_length;
+          break;
+        case ImageWriterCommand::InsertInstructionOfCode:
+          size += ImageWriter::SizeInSnapshot(Code::InstructionsOf(
+              (*commands)[i].insert_instruction_of_code.code));
+          break;
+      }
+    }
+
+    auto& instructions = Instructions::Handle(
+        Instructions::New(size, /*has_monomorphic=*/false));
+    {
+      uword addr = instructions.PayloadStart();
+      for (intptr_t i = 0; i < commands->length(); ++i) {
+        switch ((*commands)[i].op) {
+          case ImageWriterCommand::InsertBytesOfTrampoline: {
+            const auto entry = (*commands)[i].insert_trampoline_bytes;
+            const auto current_size = entry.buffer_length;
+            memmove(reinterpret_cast<void*>(addr), entry.buffer, current_size);
+            addr += current_size;
+            break;
+          }
+          case ImageWriterCommand::InsertInstructionOfCode: {
+            const auto entry = (*commands)[i].insert_instruction_of_code;
+            const auto current_size =
+                ImageWriter::SizeInSnapshot(Code::InstructionsOf(entry.code));
+            const auto alias_offset =
+                OldPage::Of(Code::InstructionsOf(entry.code))->AliasOffset();
+            memmove(
+                reinterpret_cast<void*>(addr),
+                reinterpret_cast<void*>(Instructions::PayloadStart(
+                                            Code::InstructionsOf(entry.code)) -
+                                        alias_offset),
+                current_size);
+            addr += current_size;
+            break;
+          }
+        }
+      }
+
+      if (FLAG_write_protect_code) {
+        const uword address = UntaggedObject::ToAddr(instructions.ptr());
+        const auto size = instructions.ptr()->untag()->HeapSize();
+        instructions =
+            Instructions::RawCast(OldPage::ToExecutable(instructions.ptr()));
+
+        const auto prot = FLAG_dual_map_code ? VirtualMemory::kReadOnly
+                                             : VirtualMemory::kReadExecute;
+        VirtualMemory::Protect(reinterpret_cast<void*>(address), size, prot);
+      }
+      CPU::FlushICache(instructions.PayloadStart(), instructions.Size());
+    }
+    return instructions.ptr();
+  }
+
+  Thread* thread;
+  SafepointWriteRwLocker locker;
+  ForceGrowthSafepointOperationScope safepoint_and_growth_scope;
+  GrowableArray<const Code*> codes;
+};
+
+ISOLATE_UNIT_TEST_CASE(CodeRelocator_DirectForwardCall) {
+  RelocatorTestHelper helper(thread);
+  helper.CreateInstructions({32, 36, 32});
+  helper.EmitPcRelativeCallFunction(0, 2);
+  helper.EmitReturn42Function(2);
+  helper.BuildImageAndRunTest(
+      [&](const GrowableArray<ImageWriterCommand>& commands,
+          uword* entry_point) {
+        EXPECT_EQ(3, commands.length());
+
+        // This makes an in-range forward call.
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[0].op);
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[1].op);
+        // This is is the target of the forwards call.
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[2].op);
+
+        *entry_point = commands[0].expected_offset;
+      });
+}
+
+ISOLATE_UNIT_TEST_CASE(CodeRelocator_OutOfRangeForwardCall) {
+  RelocatorTestHelper helper(thread);
+  helper.CreateInstructions(
+      {32, FLAG_upper_pc_relative_call_distance - 32 + 4, 32});
+  helper.EmitPcRelativeCallFunction(0, 2);
+  helper.EmitReturn42Function(2);
+  helper.BuildImageAndRunTest([&](const GrowableArray<ImageWriterCommand>&
+                                      commands,
+                                  uword* entry_point) {
+    EXPECT_EQ(4, commands.length());
+
+    // This makes an out-of-range forward call.
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[0].op);
+    // This is the last change the relocator thinks it can ensure the
+    // out-of-range call above can call a trampoline - so it injets it here and
+    // no later.
+    EXPECT_EQ(ImageWriterCommand::InsertBytesOfTrampoline, commands[1].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[2].op);
+    // This is the target of the forwwards call.
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[3].op);
+
+    *entry_point = commands[0].expected_offset;
+  });
+}
+
+ISOLATE_UNIT_TEST_CASE(CodeRelocator_DirectBackwardCall) {
+  RelocatorTestHelper helper(thread);
+  helper.CreateInstructions({32, 32, 32});
+  helper.EmitReturn42Function(0);
+  helper.EmitPcRelativeCallFunction(2, 0);
+  helper.BuildImageAndRunTest(
+      [&](const GrowableArray<ImageWriterCommand>& commands,
+          uword* entry_point) {
+        EXPECT_EQ(3, commands.length());
+
+        // This is the backwards call target.
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[0].op);
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[1].op);
+        // This makes an in-range backwards call.
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[2].op);
+
+        *entry_point = commands[2].expected_offset;
+      });
+}
+
+ISOLATE_UNIT_TEST_CASE(CodeRelocator_OutOfRangeBackwardCall) {
+  RelocatorTestHelper helper(thread);
+  helper.CreateInstructions({32, 32, 32, 32 + 4, 32, 32, 32, 32, 32});
+  helper.EmitReturn42Function(0);
+  helper.EmitPcRelativeCallFunction(4, 0);
+  helper.BuildImageAndRunTest([&](const GrowableArray<ImageWriterCommand>&
+                                      commands,
+                                  uword* entry_point) {
+    EXPECT_EQ(10, commands.length());
+
+    // This is the backwards call target.
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[0].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[1].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[2].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[3].op);
+    // This makes an out-of-range backwards call. The relocator will make the
+    // call go to a trampoline instead. It will delay insertion of the
+    // trampoline until it almost becomes out-of-range.
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[4].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[5].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[6].op);
+    // This is the last change the relocator thinks it can ensure the
+    // out-of-range call above can call a trampoline - so it injets it here and
+    // no later.
+    EXPECT_EQ(ImageWriterCommand::InsertBytesOfTrampoline, commands[7].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[8].op);
+    EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[9].op);
+
+    *entry_point = commands[4].expected_offset;
+  });
+}
+
+ISOLATE_UNIT_TEST_CASE(CodeRelocator_OutOfRangeBackwardCall2) {
+  RelocatorTestHelper helper(thread);
+  helper.CreateInstructions({32, 32, 32, 32 + 4, 32});
+  helper.EmitReturn42Function(0);
+  helper.EmitPcRelativeCallFunction(4, 0);
+  helper.BuildImageAndRunTest(
+      [&](const GrowableArray<ImageWriterCommand>& commands,
+          uword* entry_point) {
+        EXPECT_EQ(6, commands.length());
+
+        // This is the backwards call target.
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[0].op);
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[1].op);
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[2].op);
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[3].op);
+        // This makes an out-of-range backwards call. The relocator will make
+        // the call go to a trampoline instead. It will delay insertion of the
+        // trampoline until it almost becomes out-of-range.
+        EXPECT_EQ(ImageWriterCommand::InsertInstructionOfCode, commands[4].op);
+        // There's no other instructions coming, so the relocator will resolve
+        // any pending out-of-range calls by inserting trampolines at the end.
+        EXPECT_EQ(ImageWriterCommand::InsertBytesOfTrampoline, commands[5].op);
+
+        *entry_point = commands[4].expected_offset;
+      });
+}
+
+UNIT_TEST_CASE(PCRelativeCallPatterns) {
+  {
+    uint8_t instruction[PcRelativeCallPattern::kLengthInBytes];
+
+    PcRelativeCallPattern pattern(reinterpret_cast<uword>(&instruction));
+
+    pattern.set_distance(PcRelativeCallPattern::kLowerCallingRange);
+    EXPECT_EQ(PcRelativeCallPattern::kLowerCallingRange, pattern.distance());
+
+    pattern.set_distance(PcRelativeCallPattern::kUpperCallingRange);
+    EXPECT_EQ(PcRelativeCallPattern::kUpperCallingRange, pattern.distance());
+  }
+  {
+    uint8_t instruction[PcRelativeTailCallPattern::kLengthInBytes];
+
+    PcRelativeTailCallPattern pattern(reinterpret_cast<uword>(&instruction));
+
+    pattern.set_distance(PcRelativeTailCallPattern::kLowerCallingRange);
+    EXPECT_EQ(PcRelativeTailCallPattern::kLowerCallingRange,
+              pattern.distance());
+
+    pattern.set_distance(PcRelativeTailCallPattern::kUpperCallingRange);
+    EXPECT_EQ(PcRelativeTailCallPattern::kUpperCallingRange,
+              pattern.distance());
+  }
+}
+
+#endif  // defined(DART_PRECOMPILER) && !defined(TARGET_ARCH_IA32)
+
+}  // namespace dart
diff --git a/runtime/vm/instructions_arm.h b/runtime/vm/instructions_arm.h
index a1e1f9b..5bfc9bd 100644
--- a/runtime/vm/instructions_arm.h
+++ b/runtime/vm/instructions_arm.h
@@ -193,8 +193,10 @@
 class PcRelativeCallPatternBase : public ValueObject {
  public:
   // 24 bit signed integer which will get multiplied by 4.
-  static const intptr_t kLowerCallingRange = -(1 << 25) + Instr::kPCReadOffset;
-  static const intptr_t kUpperCallingRange = (1 << 25) - 1;
+  static constexpr intptr_t kLowerCallingRange =
+      -(1 << 25) + Instr::kPCReadOffset;
+  static constexpr intptr_t kUpperCallingRange =
+      (1 << 25) - Instr::kInstrSize + Instr::kPCReadOffset;
 
   explicit PcRelativeCallPatternBase(uword pc) : pc_(pc) {}
 
diff --git a/runtime/vm/instructions_arm64.h b/runtime/vm/instructions_arm64.h
index b450522..ecfecb6 100644
--- a/runtime/vm/instructions_arm64.h
+++ b/runtime/vm/instructions_arm64.h
@@ -203,8 +203,8 @@
 class PcRelativePatternBase : public ValueObject {
  public:
   // 26 bit signed integer which will get multiplied by 4.
-  static const intptr_t kLowerCallingRange = -(1 << 27);
-  static const intptr_t kUpperCallingRange = (1 << 27) - 1;
+  static constexpr intptr_t kLowerCallingRange = -(1 << 27);
+  static constexpr intptr_t kUpperCallingRange = (1 << 27) - Instr::kInstrSize;
 
   explicit PcRelativePatternBase(uword pc) : pc_(pc) {}
 
diff --git a/runtime/vm/instructions_x64.h b/runtime/vm/instructions_x64.h
index efc8abd..ce23054 100644
--- a/runtime/vm/instructions_x64.h
+++ b/runtime/vm/instructions_x64.h
@@ -110,8 +110,8 @@
 // callq *[rip+offset]
 class PcRelativeCallPattern : public InstructionPattern<PcRelativeCallPattern> {
  public:
-  static const intptr_t kLowerCallingRange = -(DART_UINT64_C(1) << 31);
-  static const intptr_t kUpperCallingRange = (DART_UINT64_C(1) << 31) - 1;
+  static constexpr intptr_t kLowerCallingRange = -(DART_UINT64_C(1) << 31);
+  static constexpr intptr_t kUpperCallingRange = (DART_UINT64_C(1) << 31) - 1;
 
   explicit PcRelativeCallPattern(uword pc) : InstructionPattern(pc) {}
 
@@ -169,11 +169,11 @@
            kLengthInBytes;
   }
 
-  void set_distance(int32_t distance) {
+  void set_distance(intptr_t distance) {
     // [distance] is relative to the start of the instruction, x64 considers the
     // offset relative to next PC.
     StoreUnaligned(reinterpret_cast<int32_t*>(pattern_start_ + 1),
-                   distance - kLengthInBytes);
+                   static_cast<int32_t>(distance - kLengthInBytes));
   }
 
   bool IsValid() const {
@@ -187,8 +187,8 @@
 
 class PcRelativeTailCallPattern : public PcRelativeTrampolineJumpPattern {
  public:
-  static const intptr_t kLowerCallingRange = -(1ul << 31) + kLengthInBytes;
-  static const intptr_t kUpperCallingRange = (1ul << 31) - 1;
+  static constexpr intptr_t kLowerCallingRange = -(1ul << 31) + kLengthInBytes;
+  static constexpr intptr_t kUpperCallingRange = (1ul << 31) - 1;
 
   explicit PcRelativeTailCallPattern(uword pc)
       : PcRelativeTrampolineJumpPattern(pc) {}
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 2a78176..6259fe8 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 61;
-static const uint32_t kMaxSupportedKernelFormatVersion = 61;
+static const uint32_t kMinSupportedKernelFormatVersion = 62;
+static const uint32_t kMaxSupportedKernelFormatVersion = 62;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 9eb6bed..b936691 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -5343,6 +5343,8 @@
   void set_stats(CodeStatistics* stats) const;
 
  private:
+  friend struct RelocatorTestHelper;
+
   void SetSize(intptr_t value) const {
     ASSERT(value >= 0);
     StoreNonPointer(&untag()->size_and_flags_,
@@ -6500,6 +6502,8 @@
 
   friend class UntaggedObject;  // For UntaggedObject::SizeFromClass().
   friend class UntaggedCode;
+  friend struct RelocatorTestHelper;
+
   enum {
     kOptimizedBit = 0,
     kForceOptimizedBit = 1,
diff --git a/tools/VERSION b/tools/VERSION
index cde3d7a..b42b43f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 14
+PRERELEASE 15
 PRERELEASE_PATCH 0
\ No newline at end of file
