diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 90d894f..b88605d 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -26,7 +26,7 @@
           persist-credentials: false
 
       - name: "Run analysis"
-        uses: ossf/scorecard-action@3e15ea8318eee9b333819ec77a36aca8d39df13e
+        uses: ossf/scorecard-action@ce330fde6b1a5c9c75b417e7efc510b822a35564
         with:
           results_file: results.sarif
           results_format: sarif
@@ -49,6 +49,6 @@
 
       # Upload the results to GitHub's code scanning dashboard.
       - name: "Upload to code-scanning"
-        uses: github/codeql-action/upload-sarif@27ea8f8fe5977c00f5b37e076ab846c5bd783b96
+        uses: github/codeql-action/upload-sarif@3e7e3b32d0fb8283594bb0a76cc60a00918b0969
         with:
           sarif_file: results.sarif
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_assertion.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_assertion.dart
new file mode 100644
index 0000000..be0ff14
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_assertion.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2022, 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.
+
+import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class RemoveAssertion extends CorrectionProducer {
+  @override
+  FixKind get fixKind => DartFixKind.REMOVE_ASSERTION;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var parent = node.parent;
+    if (parent is! ConstructorDeclaration) return;
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addDeletion(range.nodeInList(parent.initializers, node));
+    });
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index 103aa35..00fc90a 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -91,10 +91,7 @@
 CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
   status: hasFix
 CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER:
-  status: needsFix
-  notes: |-
-    1. Remove the initializer.
-    2. Remove the `abstract` keyword.
+  status: hasFix
 CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE:
   status: noFix
   notes: |-
@@ -128,9 +125,7 @@
 CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE:
   status: hasFix
 CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR:
-  status: needsFix
-  notes: |-
-    Remove the assert.
+  status: hasFix
 CompileTimeErrorCode.ASSIGNMENT_TO_CONST:
   status: noFix
   notes: |-
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 74cce40..df9a57f 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -864,6 +864,11 @@
     DartFixKindPriority.IN_FILE,
     'Remove arguments in file',
   );
+  static const REMOVE_ASSERTION = FixKind(
+    'dart.fix.remove.assertion',
+    DartFixKindPriority.DEFAULT,
+    'Remove the assertion',
+  );
   static const REMOVE_ASSIGNMENT = FixKind(
     'dart.fix.remove.assignment',
     DartFixKindPriority.DEFAULT,
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 0d781fb..0b9cd4f 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -109,6 +109,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_abstract.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_argument.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_assertion.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_assignment.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_await.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_comparison.dart';
@@ -864,10 +865,17 @@
   /// those diagnostics. The generators used for lint rules are in the
   /// [lintProducerMap].
   static const Map<ErrorCode, List<ProducerGenerator>> nonLintProducerMap = {
+    CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER: [
+      RemoveAbstract.new,
+      RemoveInitializer.new,
+    ],
     CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER: [
       RemoveAbstract.new,
       RemoveInitializer.new,
     ],
+    CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR: [
+      RemoveAssertion.new,
+    ],
     CompileTimeErrorCode.ASSIGNMENT_TO_FINAL: [
       MakeFieldNotFinal.new,
       AddLate.new,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart
index 8f96f4e..9864555 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart
@@ -82,6 +82,19 @@
 ''');
   }
 
+  Future<void> test_abstract_field_initializer() async {
+    await resolveTestCode('''
+abstract class A {
+  abstract int x = 0;
+}
+''');
+    await assertHasFix('''
+abstract class A {
+  int x = 0;
+}
+''');
+  }
+
   Future<void> test_extension() async {
     await resolveTestCode('''
 extension E on String {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_assertion_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_assertion_test.dart
new file mode 100644
index 0000000..e75dbbe
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_assertion_test.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2022, 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.
+
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RemoveAssertionTest);
+  });
+}
+
+@reflectiveTest
+class RemoveAssertionTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_ASSERTION;
+
+  Future<void> test_class() async {
+    await resolveTestCode('''
+class A {
+  A(int x) : assert(x > 0), this.name();
+  A.name() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x) : this.name();
+  A.name() {}
+}
+''');
+  }
+
+  Future<void> test_enum() async {
+    await resolveTestCode('''
+enum E {
+  v(42);
+  const E(int x) : this.name(), assert(x > 0);
+  const E.name();
+}
+''');
+    await assertHasFix('''
+enum E {
+  v(42);
+  const E(int x) : this.name();
+  const E.name();
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
index e461671..170b257 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
@@ -100,6 +100,19 @@
 ''');
   }
 
+  Future<void> test_abstract_field_initializer() async {
+    await resolveTestCode('''
+abstract class A {
+  abstract int x = 0;
+}
+''');
+    await assertHasFix('''
+abstract class A {
+  abstract int x;
+}
+''');
+  }
+
   Future<void> test_field() async {
     await resolveTestCode('''
 class Test {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
index 71a3037..2760dbe 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
@@ -135,6 +135,7 @@
 import 'remove_abstract_test.dart' as remove_abstract;
 import 'remove_annotation_test.dart' as remove_annotation;
 import 'remove_argument_test.dart' as remove_argument;
+import 'remove_assertion_test.dart' as remove_assertion;
 import 'remove_assignment_test.dart' as remove_assignment;
 import 'remove_await_test.dart' as remove_await;
 import 'remove_comparison_test.dart' as remove_comparison;
@@ -356,6 +357,7 @@
     remove_abstract.main();
     remove_annotation.main();
     remove_argument.main();
+    remove_assertion.main();
     remove_assignment.main();
     remove_await.main();
     remove_comparison.main();
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index de3a78c..742a16a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -280,10 +280,6 @@
     required this.relativeUri,
   });
 
-  bool get isValid {
-    return relativeUri.path.isNotEmpty;
-  }
-
   @override
   String toString() => '$relativeUri';
 }
@@ -1624,7 +1620,7 @@
 
 /// [LibraryExportState] that has a valid URI.
 class LibraryExportWithUri<U extends DirectiveUriWithUri>
-    extends LibraryExportState<U> {
+    extends LibraryExportWithUriStr<U> {
   LibraryExportWithUri({
     required super.unlinked,
     required super.selectedUri,
@@ -1632,6 +1628,16 @@
   });
 }
 
+/// [LibraryExportState] that has a relative URI string.
+class LibraryExportWithUriStr<U extends DirectiveUriWithString>
+    extends LibraryExportState<U> {
+  LibraryExportWithUriStr({
+    required super.unlinked,
+    required super.selectedUri,
+    required super.uris,
+  });
+}
+
 class LibraryFileKind extends LibraryOrAugmentationFileKind {
   /// The name of the library from the `library` directive.
   /// Or `null` if no `library` directive.
@@ -1714,6 +1720,12 @@
           unlinked: unlinked,
           uri: uri,
         );
+      } else if (uri is DirectiveUriWithString) {
+        return PartWithUriStr(
+          library: this,
+          unlinked: unlinked,
+          uri: uri,
+        );
       } else {
         return PartState(
           library: this,
@@ -1860,7 +1872,7 @@
 
 /// [LibraryImportState] that has a valid URI.
 class LibraryImportWithUri<U extends DirectiveUriWithUri>
-    extends LibraryImportState<U> {
+    extends LibraryImportWithUriStr<U> {
   LibraryImportWithUri({
     required super.unlinked,
     required super.selectedUri,
@@ -1868,6 +1880,16 @@
   });
 }
 
+/// [LibraryImportState] that has a relative URI string.
+class LibraryImportWithUriStr<U extends DirectiveUriWithString>
+    extends LibraryImportState<U> {
+  LibraryImportWithUriStr({
+    required super.unlinked,
+    required super.selectedUri,
+    required super.uris,
+  });
+}
+
 abstract class LibraryOrAugmentationFileKind extends FileKind {
   List<AugmentationImportState>? _augmentationImports;
   List<LibraryExportState>? _libraryExports;
@@ -1930,6 +1952,12 @@
           selectedUri: selectedUri,
           uris: uris,
         );
+      } else if (selectedUri is DirectiveUriWithString) {
+        return LibraryExportWithUriStr(
+          unlinked: unlinked,
+          selectedUri: selectedUri,
+          uris: uris,
+        );
       } else {
         return LibraryExportState(
           unlinked: unlinked,
@@ -1964,6 +1992,12 @@
           selectedUri: selectedUri,
           uris: uris,
         );
+      } else if (selectedUri is DirectiveUriWithString) {
+        return LibraryImportWithUriStr(
+          unlinked: unlinked,
+          selectedUri: selectedUri,
+          uris: uris,
+        );
       } else {
         return LibraryImportState(
           unlinked: unlinked,
@@ -2249,7 +2283,7 @@
 }
 
 /// [PartState] that has a valid URI.
-class PartWithUri<U extends DirectiveUriWithUri> extends PartState<U> {
+class PartWithUri<U extends DirectiveUriWithUri> extends PartWithUriStr<U> {
   PartWithUri({
     required super.library,
     required super.unlinked,
@@ -2257,6 +2291,15 @@
   });
 }
 
+/// [PartState] that has a relative URI string.
+class PartWithUriStr<U extends DirectiveUriWithString> extends PartState<U> {
+  PartWithUriStr({
+    required super.library,
+    required super.unlinked,
+    required super.uri,
+  });
+}
+
 class StoredFileContent implements FileContent {
   @override
   final String content;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 9d7a8ac..c36fadc 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -671,16 +671,16 @@
         final index = libraryExportIndex++;
         _resolveLibraryExportDirective(
           directive: directive,
-          exportElement: containerElement.libraryExports[index],
-          exportState: containerKind.libraryExports[index],
+          element: containerElement.libraryExports[index],
+          state: containerKind.libraryExports[index],
           errorReporter: containerErrorReporter,
         );
       } else if (directive is ImportDirectiveImpl) {
         final index = libraryImportIndex++;
         _resolveLibraryImportDirective(
           directive: directive,
-          importElement: containerElement.libraryImports[index],
-          importState: containerKind.libraryImports[index],
+          element: containerElement.libraryImports[index],
+          state: containerKind.libraryImports[index],
           errorReporter: containerErrorReporter,
         );
       } else if (directive is LibraryAugmentationDirectiveImpl) {
@@ -746,38 +746,34 @@
 
   void _resolveLibraryExportDirective({
     required ExportDirectiveImpl directive,
-    required LibraryExportElement exportElement,
-    required LibraryExportState exportState,
+    required LibraryExportElement element,
+    required LibraryExportState state,
     required ErrorReporter errorReporter,
   }) {
-    directive.element = exportElement;
+    directive.element = element;
     _resolveNamespaceDirective(
       directive: directive,
       primaryUriNode: directive.uri,
-      primaryUriState: exportState.uris.primary,
+      primaryUriState: state.uris.primary,
       configurationNodes: directive.configurations,
-      configurationUris: exportState.uris.configurations,
-      selectedUriState: exportState.selectedUri,
+      configurationUris: state.uris.configurations,
+      selectedUriState: state.selectedUri,
     );
-    if (exportState is LibraryExportWithUri) {
-      final selectedUriStr = exportState.selectedUri.relativeUriStr;
+    if (state is LibraryExportWithUri) {
+      final selectedUriStr = state.selectedUri.relativeUriStr;
       if (selectedUriStr.startsWith('dart-ext:')) {
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION,
           directive.uri,
         );
-      } else if (exportState.exportedSource == null) {
-        final errorCode = exportState.selectedUri.isValid
-            ? CompileTimeErrorCode.URI_DOES_NOT_EXIST
-            : CompileTimeErrorCode.INVALID_URI;
+      } else if (state.exportedSource == null) {
         errorReporter.reportErrorForNode(
-          errorCode,
+          CompileTimeErrorCode.URI_DOES_NOT_EXIST,
           directive.uri,
           [selectedUriStr],
         );
-      } else if (exportState is LibraryExportWithFile &&
-          !exportState.exportedFile.exists) {
-        final errorCode = isGeneratedSource(exportState.exportedSource)
+      } else if (state is LibraryExportWithFile && !state.exportedFile.exists) {
+        final errorCode = isGeneratedSource(state.exportedSource)
             ? CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED
             : CompileTimeErrorCode.URI_DOES_NOT_EXIST;
         errorReporter.reportErrorForNode(
@@ -785,13 +781,19 @@
           directive.uri,
           [selectedUriStr],
         );
-      } else if (exportState.exportedLibrarySource == null) {
+      } else if (state.exportedLibrarySource == null) {
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
           directive.uri,
           [selectedUriStr],
         );
       }
+    } else if (state is LibraryExportWithUriStr) {
+      errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.INVALID_URI,
+        directive.uri,
+        [state.selectedUri.relativeUriStr],
+      );
     } else {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.URI_WITH_INTERPOLATION,
@@ -802,39 +804,35 @@
 
   void _resolveLibraryImportDirective({
     required ImportDirectiveImpl directive,
-    required LibraryImportElement importElement,
-    required LibraryImportState importState,
+    required LibraryImportElement element,
+    required LibraryImportState state,
     required ErrorReporter errorReporter,
   }) {
-    directive.element = importElement;
-    directive.prefix?.staticElement = importElement.prefix?.element;
+    directive.element = element;
+    directive.prefix?.staticElement = element.prefix?.element;
     _resolveNamespaceDirective(
       directive: directive,
       primaryUriNode: directive.uri,
-      primaryUriState: importState.uris.primary,
+      primaryUriState: state.uris.primary,
       configurationNodes: directive.configurations,
-      configurationUris: importState.uris.configurations,
-      selectedUriState: importState.selectedUri,
+      configurationUris: state.uris.configurations,
+      selectedUriState: state.selectedUri,
     );
-    if (importState is LibraryImportWithUri) {
-      final selectedUriStr = importState.selectedUri.relativeUriStr;
+    if (state is LibraryImportWithUri) {
+      final selectedUriStr = state.selectedUri.relativeUriStr;
       if (selectedUriStr.startsWith('dart-ext:')) {
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION,
           directive.uri,
         );
-      } else if (importState.importedSource == null) {
-        final errorCode = importState.selectedUri.isValid
-            ? CompileTimeErrorCode.URI_DOES_NOT_EXIST
-            : CompileTimeErrorCode.INVALID_URI;
+      } else if (state.importedSource == null) {
         errorReporter.reportErrorForNode(
-          errorCode,
+          CompileTimeErrorCode.URI_DOES_NOT_EXIST,
           directive.uri,
           [selectedUriStr],
         );
-      } else if (importState is LibraryImportWithFile &&
-          !importState.importedFile.exists) {
-        final errorCode = isGeneratedSource(importState.importedSource)
+      } else if (state is LibraryImportWithFile && !state.importedFile.exists) {
+        final errorCode = isGeneratedSource(state.importedSource)
             ? CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED
             : CompileTimeErrorCode.URI_DOES_NOT_EXIST;
         errorReporter.reportErrorForNode(
@@ -842,13 +840,19 @@
           directive.uri,
           [selectedUriStr],
         );
-      } else if (importState.importedLibrarySource == null) {
+      } else if (state.importedLibrarySource == null) {
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY,
           directive.uri,
           [selectedUriStr],
         );
       }
+    } else if (state is LibraryImportWithUriStr) {
+      errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.INVALID_URI,
+        directive.uri,
+        [state.selectedUri.relativeUriStr],
+      );
     } else {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.URI_WITH_INTERPOLATION,
@@ -896,7 +900,7 @@
     directive.uriSource = partState.includedSource;
     directive.element = partElement;
 
-    if (partState is! PartWithUri) {
+    if (partState is! PartWithUriStr) {
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.URI_WITH_INTERPOLATION,
         directive.uri,
@@ -904,37 +908,41 @@
       return;
     }
 
-    if (partState is! PartWithFile) {
-      final errorCode = partState.uri.isValid
-          ? CompileTimeErrorCode.URI_DOES_NOT_EXIST
-          : CompileTimeErrorCode.INVALID_URI;
+    if (partState is! PartWithUri) {
       errorReporter.reportErrorForNode(
-        errorCode,
+        CompileTimeErrorCode.INVALID_URI,
         directive.uri,
         [partState.uri.relativeUriStr],
       );
       return;
     }
+
+    if (partState is! PartWithFile) {
+      errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.URI_DOES_NOT_EXIST,
+        directive.uri,
+        [partState.uri.relativeUriStr],
+      );
+      return;
+    }
+
     final includedFile = partState.includedFile;
     final includedKind = includedFile.kind;
 
     if (includedKind is! PartFileKind) {
+      final ErrorCode errorCode;
       if (includedFile.exists) {
-        errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.PART_OF_NON_PART,
-          partUri,
-          [partUri.toSource()],
-        );
+        errorCode = CompileTimeErrorCode.PART_OF_NON_PART;
+      } else if (isGeneratedSource(includedFile.source)) {
+        errorCode = CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED;
       } else {
-        final errorCode = isGeneratedSource(includedFile.source)
-            ? CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED
-            : CompileTimeErrorCode.URI_DOES_NOT_EXIST;
-        errorReporter.reportErrorForNode(
-          errorCode,
-          directive.uri,
-          [partUri.toSource()],
-        );
+        errorCode = CompileTimeErrorCode.URI_DOES_NOT_EXIST;
       }
+      errorReporter.reportErrorForNode(
+        errorCode,
+        partUri,
+        [includedFile.uriStr],
+      );
       return;
     }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart b/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart
index 1c394c3..585c3bb 100644
--- a/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart
+++ b/pkg/analyzer/test/src/dart/analysis/analyzer_state_printer.dart
@@ -481,10 +481,12 @@
           }
           sink.writeln();
         } else if (export is LibraryExportWithUri) {
+          _writelnWithIndent('uri: ${export.selectedUri.relativeUri}');
+        } else if (export is LibraryExportWithUriStr) {
           final uriStr = _stringOfUriStr(export.selectedUri.relativeUriStr);
-          _writelnWithIndent('uri: $uriStr');
+          _writelnWithIndent('uriStr: $uriStr');
         } else {
-          _writelnWithIndent('noUri');
+          _writelnWithIndent('noUriStr');
         }
       },
     );
@@ -532,15 +534,22 @@
           }
           sink.writeln();
         } else if (import is LibraryImportWithUri) {
+          sink.write(_indent);
+          sink.write('uri: ${import.selectedUri.relativeUri}');
+          if (import.isSyntheticDartCore) {
+            sink.write(' synthetic');
+          }
+          sink.writeln();
+        } else if (import is LibraryImportWithUriStr) {
           final uriStr = _stringOfUriStr(import.selectedUri.relativeUriStr);
           sink.write(_indent);
-          sink.write('uri: $uriStr');
+          sink.write('uriStr: $uriStr');
           if (import.isSyntheticDartCore) {
             sink.write(' synthetic');
           }
           sink.writeln();
         } else {
-          _writelnWithIndent('noUri');
+          _writelnWithIndent('noUriStr');
         }
       },
     );
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 02bf723..e2c62ee 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -2023,9 +2023,9 @@
 ''');
   }
 
-  test_newFile_library_exports_invalidUri_cannotParse() async {
+  test_newFile_library_exports_noRelativeUri() async {
     final a = newFile('$testPackageLibPath/a.dart', r'''
-export 'net:';
+export ':net';
 ''');
 
     fileStateFor(a);
@@ -2040,7 +2040,7 @@
         libraryImports
           library_1 dart:core synthetic
         libraryExports
-          uri: net:
+          uriStr: :net
         cycle_0
           dependencies: dart:core
           libraries: library_0
@@ -2051,7 +2051,7 @@
 ''');
   }
 
-  test_newFile_library_exports_invalidUri_interpolation() async {
+  test_newFile_library_exports_noRelativeUriStr() async {
     final a = newFile('$testPackageLibPath/a.dart', r'''
 export '${'foo.dart'}';
 ''');
@@ -2068,7 +2068,35 @@
         libraryImports
           library_1 dart:core synthetic
         libraryExports
-          noUri
+          noUriStr
+        cycle_0
+          dependencies: dart:core
+          libraries: library_0
+          apiSignature_0
+      unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
+  }
+
+  test_newFile_library_exports_noSource() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+export 'foo:bar';
+''');
+
+    fileStateFor(a);
+
+    assertDriverStateString(testFile, r'''
+files
+  /home/test/lib/a.dart
+    uri: package:test/a.dart
+    current
+      id: file_0
+      kind: library_0
+        libraryImports
+          library_1 dart:core synthetic
+        libraryExports
+          uri: foo:bar
         cycle_0
           dependencies: dart:core
           libraries: library_0
@@ -2258,60 +2286,6 @@
 ''');
   }
 
-  test_newFile_library_imports_invalidUri_cannotParse() async {
-    final a = newFile('$testPackageLibPath/a.dart', r'''
-import 'da:';
-''');
-
-    fileStateFor(a);
-
-    assertDriverStateString(testFile, r'''
-files
-  /home/test/lib/a.dart
-    uri: package:test/a.dart
-    current
-      id: file_0
-      kind: library_0
-        libraryImports
-          uri: da:
-          library_1 dart:core synthetic
-        cycle_0
-          dependencies: dart:core
-          libraries: library_0
-          apiSignature_0
-      unlinkedKey: k00
-libraryCycles
-elementFactory
-''');
-  }
-
-  test_newFile_library_imports_invalidUri_interpolation() async {
-    final a = newFile('$testPackageLibPath/a.dart', r'''
-import '${'foo.dart'}';
-''');
-
-    fileStateFor(a);
-
-    assertDriverStateString(testFile, r'''
-files
-  /home/test/lib/a.dart
-    uri: package:test/a.dart
-    current
-      id: file_0
-      kind: library_0
-        libraryImports
-          noUri
-          library_1 dart:core synthetic
-        cycle_0
-          dependencies: dart:core
-          libraries: library_0
-          apiSignature_0
-      unlinkedKey: k00
-libraryCycles
-elementFactory
-''');
-  }
-
   test_newFile_library_imports_library_dart() async {
     final a = newFile('$testPackageLibPath/a.dart', r'''
 import 'dart:async';
@@ -2650,6 +2624,87 @@
 ''');
   }
 
+  test_newFile_library_imports_noRelativeUri() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+import ':net';
+''');
+
+    fileStateFor(a);
+
+    assertDriverStateString(testFile, r'''
+files
+  /home/test/lib/a.dart
+    uri: package:test/a.dart
+    current
+      id: file_0
+      kind: library_0
+        libraryImports
+          uriStr: :net
+          library_1 dart:core synthetic
+        cycle_0
+          dependencies: dart:core
+          libraries: library_0
+          apiSignature_0
+      unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
+  }
+
+  test_newFile_library_imports_noRelativeUriStr() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+import '${'foo.dart'}';
+''');
+
+    fileStateFor(a);
+
+    assertDriverStateString(testFile, r'''
+files
+  /home/test/lib/a.dart
+    uri: package:test/a.dart
+    current
+      id: file_0
+      kind: library_0
+        libraryImports
+          noUriStr
+          library_1 dart:core synthetic
+        cycle_0
+          dependencies: dart:core
+          libraries: library_0
+          apiSignature_0
+      unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
+  }
+
+  test_newFile_library_imports_noSource() async {
+    final a = newFile('$testPackageLibPath/a.dart', r'''
+import 'foo:bar';
+''');
+
+    fileStateFor(a);
+
+    assertDriverStateString(testFile, r'''
+files
+  /home/test/lib/a.dart
+    uri: package:test/a.dart
+    current
+      id: file_0
+      kind: library_0
+        libraryImports
+          uri: foo:bar
+          library_1 dart:core synthetic
+        cycle_0
+          dependencies: dart:core
+          libraries: library_0
+          apiSignature_0
+      unlinkedKey: k00
+libraryCycles
+elementFactory
+''');
+  }
+
   test_newFile_library_imports_part() async {
     newFile('$testPackageLibPath/a.dart', r'''
 part of my.lib;
diff --git a/pkg/analyzer/test/src/dart/resolution/library_export_test.dart b/pkg/analyzer/test/src/dart/resolution/library_export_test.dart
index d1116c0..9022bf9 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_export_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_export_test.dart
@@ -49,6 +49,148 @@
 ''');
   }
 
+  test_inAugmentation_library_fileDoesNotExist() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+export 'c.dart';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 33, 8),
+    ]);
+
+    final node = findNode.export('c.dart');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: SimpleStringLiteral
+    literal: 'c.dart'
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUriWithLibrary
+      uri: package:test/c.dart
+  selectedSource: package:test/c.dart
+  selectedUriContent: c.dart
+  uriContent: c.dart
+  uriElement: package:test/c.dart
+  uriSource: package:test/c.dart
+''');
+  }
+
+  test_inAugmentation_noRelativeUri() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+export ':net';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.INVALID_URI, 33, 6),
+    ]);
+
+    final node = findNode.export('export');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: SimpleStringLiteral
+    literal: ':net'
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUriWithRelativeUriString
+      relativeUriString: :net
+  selectedSource: <null>
+  selectedUriContent: :net
+  uriContent: :net
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
+  test_inAugmentation_noRelativeUriStr() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+export '${'foo'}.dart';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.URI_WITH_INTERPOLATION, 33, 15),
+    ]);
+
+    final node = findNode.export('export');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: StringInterpolation
+    elements
+      InterpolationString
+        contents: '
+      InterpolationExpression
+        leftBracket: ${
+        expression: SimpleStringLiteral
+          literal: 'foo'
+        rightBracket: }
+      InterpolationString
+        contents: .dart'
+    staticType: String
+    stringValue: null
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUri
+  selectedSource: <null>
+  selectedUriContent: null
+  uriContent: null
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
+  test_inAugmentation_noSource() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+export 'foo:bar';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 33, 9),
+    ]);
+
+    final node = findNode.export('export');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: SimpleStringLiteral
+    literal: 'foo:bar'
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUriWithRelativeUri
+      relativeUri: foo:bar
+  selectedSource: <null>
+  selectedUriContent: foo:bar
+  uriContent: foo:bar
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
   test_inAugmentation_notLibrary_augmentation() async {
     newFile('$testPackageLibPath/a.dart', r'''
 import augment 'b.dart';
@@ -385,6 +527,56 @@
 ''');
   }
 
+  test_inLibrary_library() async {
+    newFile('$testPackageLibPath/a.dart', '');
+
+    await assertNoErrorsInCode(r'''
+export 'a.dart';
+''');
+
+    final node = findNode.export('a.dart');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: SimpleStringLiteral
+    literal: 'a.dart'
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUriWithLibrary
+      uri: package:test/a.dart
+  selectedSource: package:test/a.dart
+  selectedUriContent: a.dart
+  uriContent: a.dart
+  uriElement: package:test/a.dart
+  uriSource: package:test/a.dart
+''');
+  }
+
+  test_inLibrary_library_fileDoesNotExist() async {
+    await assertErrorsInCode(r'''
+export 'a.dart';
+''', [
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 7, 8),
+    ]);
+
+    final node = findNode.export('a.dart');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: SimpleStringLiteral
+    literal: 'a.dart'
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUriWithLibrary
+      uri: package:test/a.dart
+  selectedSource: package:test/a.dart
+  selectedUriContent: a.dart
+  uriContent: a.dart
+  uriElement: package:test/a.dart
+  uriSource: package:test/a.dart
+''');
+  }
+
   /// Test that both getter and setter are in the export namespace.
   test_inLibrary_namespace_getter_setter() async {
     newFile('$testPackageLibPath/a.dart', r'''
@@ -399,6 +591,31 @@
     expect(exportNamespace.get('f='), isNotNull);
   }
 
+  test_inLibrary_noRelativeUri() async {
+    await assertErrorsInCode(r'''
+export ':net';
+''', [
+      error(CompileTimeErrorCode.INVALID_URI, 7, 6),
+    ]);
+
+    final node = findNode.export('export');
+    assertResolvedNodeText(node, r'''
+ExportDirective
+  exportKeyword: export
+  uri: SimpleStringLiteral
+    literal: ':net'
+  semicolon: ;
+  element: LibraryExportElement
+    uri: DirectiveUriWithRelativeUriString
+      relativeUriString: :net
+  selectedSource: <null>
+  selectedUriContent: :net
+  uriContent: :net
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
   test_inLibrary_noRelativeUriStr() async {
     await assertErrorsInCode(r'''
 export '${'foo'}.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
index 1dbaafc..2549157 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
@@ -50,6 +50,148 @@
 ''');
   }
 
+  test_inAugmentation_library_fileDoesNotExist() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+import 'c.dart';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 33, 8),
+    ]);
+
+    final node = findNode.import('c.dart');
+    assertResolvedNodeText(node, r'''
+ImportDirective
+  importKeyword: import
+  uri: SimpleStringLiteral
+    literal: 'c.dart'
+  semicolon: ;
+  element: LibraryImportElement
+    uri: DirectiveUriWithLibrary
+      uri: package:test/c.dart
+  selectedSource: package:test/c.dart
+  selectedUriContent: c.dart
+  uriContent: c.dart
+  uriElement: package:test/c.dart
+  uriSource: package:test/c.dart
+''');
+  }
+
+  test_inAugmentation_noRelativeUri() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+import ':net';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.INVALID_URI, 33, 6),
+    ]);
+
+    final node = findNode.import('import');
+    assertResolvedNodeText(node, r'''
+ImportDirective
+  importKeyword: import
+  uri: SimpleStringLiteral
+    literal: ':net'
+  semicolon: ;
+  element: LibraryImportElement
+    uri: DirectiveUriWithRelativeUriString
+      relativeUriString: :net
+  selectedSource: <null>
+  selectedUriContent: :net
+  uriContent: :net
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
+  test_inAugmentation_noRelativeUriStr() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+import '${'foo'}.dart';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.URI_WITH_INTERPOLATION, 33, 15),
+    ]);
+
+    final node = findNode.import('import');
+    assertResolvedNodeText(node, r'''
+ImportDirective
+  importKeyword: import
+  uri: StringInterpolation
+    elements
+      InterpolationString
+        contents: '
+      InterpolationExpression
+        leftBracket: ${
+        expression: SimpleStringLiteral
+          literal: 'foo'
+        rightBracket: }
+      InterpolationString
+        contents: .dart'
+    staticType: String
+    stringValue: null
+  semicolon: ;
+  element: LibraryImportElement
+    uri: DirectiveUri
+  selectedSource: <null>
+  selectedUriContent: null
+  uriContent: null
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
+  test_inAugmentation_noSource() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import augment 'b.dart';
+''');
+
+    final b = newFile('$testPackageLibPath/b.dart', r'''
+library augment 'a.dart';
+import 'foo:bar';
+''');
+
+    await resolveFile2(b.path);
+    assertErrorsInResult([
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 33, 9),
+    ]);
+
+    final node = findNode.import('import');
+    assertResolvedNodeText(node, r'''
+ImportDirective
+  importKeyword: import
+  uri: SimpleStringLiteral
+    literal: 'foo:bar'
+  semicolon: ;
+  element: LibraryImportElement
+    uri: DirectiveUriWithRelativeUri
+      relativeUri: foo:bar
+  selectedSource: <null>
+  selectedUriContent: foo:bar
+  uriContent: foo:bar
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
   test_inAugmentation_notLibrary_augmentation() async {
     newFile('$testPackageLibPath/a.dart', r'''
 import augment 'b.dart';
@@ -505,6 +647,56 @@
 ''');
   }
 
+  test_inLibrary_library_fileDoesNotExist() async {
+    await assertErrorsInCode(r'''
+import 'a.dart';
+''', [
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 7, 8),
+    ]);
+
+    final node = findNode.import('import');
+    assertResolvedNodeText(node, r'''
+ImportDirective
+  importKeyword: import
+  uri: SimpleStringLiteral
+    literal: 'a.dart'
+  semicolon: ;
+  element: LibraryImportElement
+    uri: DirectiveUriWithLibrary
+      uri: package:test/a.dart
+  selectedSource: package:test/a.dart
+  selectedUriContent: a.dart
+  uriContent: a.dart
+  uriElement: package:test/a.dart
+  uriSource: package:test/a.dart
+''');
+  }
+
+  test_inLibrary_noRelativeUri() async {
+    await assertErrorsInCode(r'''
+import ':net';
+''', [
+      error(CompileTimeErrorCode.INVALID_URI, 7, 6),
+    ]);
+
+    final node = findNode.import('import');
+    assertResolvedNodeText(node, r'''
+ImportDirective
+  importKeyword: import
+  uri: SimpleStringLiteral
+    literal: ':net'
+  semicolon: ;
+  element: LibraryImportElement
+    uri: DirectiveUriWithRelativeUriString
+      relativeUriString: :net
+  selectedSource: <null>
+  selectedUriContent: :net
+  uriContent: :net
+  uriElement: <null>
+  uriSource: <null>
+''');
+  }
+
   test_inLibrary_noRelativeUriStr() async {
     await assertErrorsInCode(r'''
 import '${'foo'}.dart';
diff --git a/pkg/analyzer/test/src/dart/resolution/part_test.dart b/pkg/analyzer/test/src/dart/resolution/part_test.dart
index 2afd418..2f9c069 100644
--- a/pkg/analyzer/test/src/dart/resolution/part_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/part_test.dart
@@ -15,14 +15,59 @@
 
 @reflectiveTest
 class PartDirectiveResolutionTest extends PubPackageResolutionTest {
-  test_withoutString() async {
+  test_fileDoesNotExist() async {
+    await assertErrorsInCode(r'''
+part 'a.dart';
+''', [
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 5, 8),
+    ]);
+
+    final node = findNode.part('part');
+    assertResolvedNodeText(node, r'''
+PartDirective
+  partKeyword: part
+  uri: SimpleStringLiteral
+    literal: 'a.dart'
+  semicolon: ;
+  element: DirectiveUriWithSource
+    source: package:test/a.dart
+  uriContent: null
+  uriElement: notUnitElement
+  uriSource: package:test/a.dart
+''');
+  }
+
+  test_noRelativeUri() async {
+    await assertErrorsInCode(r'''
+part ':net';
+''', [
+      error(CompileTimeErrorCode.INVALID_URI, 5, 6),
+    ]);
+
+    final node = findNode.part('part');
+    assertResolvedNodeText(node, r'''
+PartDirective
+  partKeyword: part
+  uri: SimpleStringLiteral
+    literal: ':net'
+  semicolon: ;
+  element: DirectiveUriWithRelativeUriString
+    relativeUriString: :net
+  uriContent: null
+  uriElement: notUnitElement
+  uriSource: <null>
+''');
+  }
+
+  test_noRelativeUriStr() async {
     await assertErrorsInCode(r'''
 part '${'foo'}.dart';
 ''', [
       error(CompileTimeErrorCode.URI_WITH_INTERPOLATION, 5, 15),
     ]);
 
-    assertResolvedNodeText(findNode.part('.dart'), r'''
+    final node = findNode.part('part');
+    assertResolvedNodeText(node, r'''
 PartDirective
   partKeyword: part
   uri: StringInterpolation
@@ -46,6 +91,28 @@
 ''');
   }
 
+  test_noSource() async {
+    await assertErrorsInCode(r'''
+part 'foo:bar';
+''', [
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 5, 9),
+    ]);
+
+    final node = findNode.part('part');
+    assertResolvedNodeText(node, r'''
+PartDirective
+  partKeyword: part
+  uri: SimpleStringLiteral
+    literal: 'foo:bar'
+  semicolon: ;
+  element: DirectiveUriWithRelativeUri
+    relativeUri: foo:bar
+  uriContent: null
+  uriElement: notUnitElement
+  uriSource: <null>
+''');
+  }
+
   test_withPart_partOfName() async {
     newFile('$testPackageLibPath/a.dart', r'''
 part of my.lib;
diff --git a/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart
index 93ccda1..527d2f5 100644
--- a/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart
@@ -17,42 +17,38 @@
 class AssertInRedirectingConstructorTest extends PubPackageResolutionTest {
   test_class_assertBeforeRedirection() async {
     await assertErrorsInCode(r'''
-class A {}
-class B {
-  B(int x) : assert(x > 0), this.name();
-  B.name() {}
+class A {
+  A(int x) : assert(x > 0), this.name();
+  A.name() {}
 }
-''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 34, 13)]);
+''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 23, 13)]);
   }
 
   test_class_justAssert() async {
     await assertNoErrorsInCode(r'''
-class A {}
-class B {
-  B(int x) : assert(x > 0);
-  B.name() {}
+class A {
+  A(int x) : assert(x > 0);
+  A.name() {}
 }
 ''');
   }
 
   test_class_justRedirection() async {
     await assertNoErrorsInCode(r'''
-class A {}
-class B {
-  B(int x) : this.name();
-  B.name() {}
+class A {
+  A(int x) : this.name();
+  A.name() {}
 }
 ''');
   }
 
   test_class_redirectionBeforeAssert() async {
     await assertErrorsInCode(r'''
-class A {}
-class B {
-  B(int x) : this.name(), assert(x > 0);
-  B.name() {}
+class A {
+  A(int x) : this.name(), assert(x > 0);
+  A.name() {}
 }
-''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 47, 13)]);
+''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 36, 13)]);
   }
 
   test_enum_assertBeforeRedirection() async {
diff --git a/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart b/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
index 129320e..bae166e 100644
--- a/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
@@ -71,12 +71,4 @@
 }
 ''');
   }
-
-  test_invalidUri() {
-    assertErrorsInCode('''
-import 'ht:' deferred as foo;
-''', [
-      error(CompileTimeErrorCode.INVALID_URI, 7, 5),
-    ]);
-  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart
index d63fc0a..71eb92d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_uri_test.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -15,22 +14,6 @@
 
 @reflectiveTest
 class InvalidUriTest extends PubPackageResolutionTest {
-  test_augmentationImport_invalidScheme() async {
-    await assertErrorsInCode('''
-import augment ':da';
-''', [
-      error(CompileTimeErrorCode.INVALID_URI, 15, 5),
-    ]);
-  }
-
-  test_libraryExport_invalidScheme() async {
-    await assertErrorsInCode('''
-export 'ht:';
-''', [
-      error(CompileTimeErrorCode.INVALID_URI, 7, 5),
-    ]);
-  }
-
   test_libraryImport_emptyUri() async {
     await assertNoErrorsInCode('''
 import '' as top;
@@ -42,20 +25,4 @@
 ''');
     assertElement(findNode.simple('x; // ref'), findElement.topGet('x'));
   }
-
-  test_libraryImport_invalidScheme() async {
-    await assertErrorsInCode('''
-import 'ht:';
-''', [
-      error(CompileTimeErrorCode.INVALID_URI, 7, 5),
-    ]);
-  }
-
-  test_part_invalidScheme() async {
-    await assertErrorsInCode(r'''
-part 'ht:';
-''', [
-      error(CompileTimeErrorCode.INVALID_URI, 5, 5),
-    ]);
-  }
 }
diff --git a/pkg/compiler/test/serialization/data/unordered_indices.dart b/pkg/compiler/test/serialization/data/unordered_indices.dart
index 09c3234..3a49b94 100644
--- a/pkg/compiler/test/serialization/data/unordered_indices.dart
+++ b/pkg/compiler/test/serialization/data/unordered_indices.dart
@@ -1,5 +1,4 @@
 // @dart=2.7
-// @doCodegen
 
 // Introduce a named parameter with a given string name.
 typedef Bar = String Function({String someString});
diff --git a/pkg/compiler/test/serialization/serialization_test.dart b/pkg/compiler/test/serialization/serialization_test.dart
index 3ce5512..3b052f5 100644
--- a/pkg/compiler/test/serialization/serialization_test.dart
+++ b/pkg/compiler/test/serialization/serialization_test.dart
@@ -64,7 +64,6 @@
         Uri.parse('memory:$commonTestPath/dart2js_native/main.dart');
     String mainCode = await new File.fromUri(entity.uri).readAsString();
     Map<String, String> memorySourceFiles = {entryPoint.path: mainCode};
-    final doCodegen = mainCode.contains('@doCodegen');
 
     if (libDirectory != null) {
       print('Supporting libraries:');
@@ -85,8 +84,7 @@
         entryPoint: entryPoint,
         memorySourceFiles: memorySourceFiles,
         options: testOptions,
-        strategy: strategy,
-        doCodegen: doCodegen);
+        strategy: strategy);
   }
   Expect.isFalse(hasFailures, 'Errors found.');
   Expect.isTrue(testCount > 0, "No files were tested.");
diff --git a/pkg/compiler/test/serialization/serialization_test_helper.dart b/pkg/compiler/test/serialization/serialization_test_helper.dart
index ace4373..6b86a60 100644
--- a/pkg/compiler/test/serialization/serialization_test_helper.dart
+++ b/pkg/compiler/test/serialization/serialization_test_helper.dart
@@ -107,8 +107,7 @@
     Uri librariesSpecificationUri,
     List<String> options,
     SerializationStrategy strategy: const BytesInMemorySerializationStrategy(),
-    bool useDataKinds: false,
-    bool doCodegen: false}) async {
+    bool useDataKinds: false}) async {
   var commonOptions = options + ['--out=out.js'];
   OutputCollector collector = new OutputCollector();
   CompilationResult result = await runCompiler(
@@ -183,17 +182,15 @@
         compiler.stopAfterGlobalTypeInferenceForTesting = true;
       });
   Expect.isTrue(result3b.isSuccess);
+  Expect.isTrue(collector3b.binaryOutputMap.containsKey(globalDataUri));
 
   final globalDataFileUri = dir.uri.resolve('global.data');
 
   // We must write the global data bytes before calling
   // `finishCompileAndCompare` below as that clears the collector.
-  if (doCodegen) {
-    Expect.isTrue(collector3b.binaryOutputMap.containsKey(globalDataUri));
 
-    final globalDataBytes = collector3b.binaryOutputMap[globalDataUri].list;
-    File(globalDataFileUri.path).writeAsBytesSync(globalDataBytes);
-  }
+  final globalDataBytes = collector3b.binaryOutputMap[globalDataUri].list;
+  File(globalDataFileUri.path).writeAsBytesSync(globalDataBytes);
 
   await finishCompileAndCompare(
       expectedOutput, collector2, result2.compiler, strategy,
@@ -202,26 +199,25 @@
       expectedOutput, collector3b, result3b.compiler, strategy,
       stoppedAfterTypeInference: true);
 
-  if (doCodegen) {
-    OutputCollector collector4 = new OutputCollector();
-    CompilationResult result4 = await runCompiler(
-        entryPoint: entryPoint,
-        memorySourceFiles: memorySourceFiles,
-        packageConfig: packageConfig,
-        librariesSpecificationUri: librariesSpecificationUri,
-        options: commonOptions +
-            [
-              '${Flags.inputDill}=$dillFileUri',
-              '${Flags.readClosedWorld}=$closedWorldFileUri',
-              '${Flags.readData}=$globalDataFileUri',
-              '--out=out.js'
-            ],
-        outputProvider: collector4,
-        beforeRun: (Compiler compiler) {
-          compiler.forceSerializationForTesting = true;
-        });
-    Expect.isTrue(result4.isSuccess);
-  }
+  final jsOutUri = Uri.parse('out.js');
+  OutputCollector collector4 = new OutputCollector();
+  CompilationResult result4 = await runCompiler(
+      entryPoint: entryPoint,
+      memorySourceFiles: memorySourceFiles,
+      packageConfig: packageConfig,
+      librariesSpecificationUri: librariesSpecificationUri,
+      options: commonOptions +
+          [
+            '${Flags.inputDill}=$dillFileUri',
+            '${Flags.readClosedWorld}=$closedWorldFileUri',
+            '${Flags.readData}=$globalDataFileUri',
+            '--out=$jsOutUri'
+          ],
+      outputProvider: collector4,
+      beforeRun: (Compiler compiler) {
+        compiler.forceSerializationForTesting = true;
+      });
+  Expect.isTrue(result4.isSuccess);
 
   await dir.delete(recursive: true);
 }
diff --git a/runtime/docs/glossary.md b/runtime/docs/glossary.md
new file mode 100644
index 0000000..1264136
--- /dev/null
+++ b/runtime/docs/glossary.md
@@ -0,0 +1,175 @@
+# Glossary
+
+## Small integer, Smi (/smaɪ/)
+
+A signed integer with one bit less than a full word (i.e., 31 or 63). An [immediate object](gc.md#object-representation).
+
+## Medium integer, Mint
+
+A signed 64-bit integer. A [heap object](gc.md#object-representation). Mints never represent a value that can be represented as a Smi.
+
+## Class id, class index, CID
+
+An integer that uniquely identifies a class within an isolate. It has the virtues of being smaller than a full pointer to the class, never changing due to GC, and being a build-time constant for well-known classes.
+
+An object's reference to its class, type feedback collected by ICData, and various optimizations are represented with CIDs instead of full pointers to classes.
+
+In other VMs, this is also called the _class tag_.
+
+## [Object pool, literal pool](../vm/object.h#:~:text=class%20ObjectPool)
+
+A set of objects and raw bits used by generated code as constants.
+
+## Pool pointer, PP
+
+A fixed register containing the address of the current function's (JIT) or global (AOT) [literal pool](#object-pool-literal-pool).
+
+## [Instruction pointer, IP, program counter, PC](https://en.wikipedia.org/wiki/Program_counter)
+
+The address of the currently executing instruction.
+
+## [Garbage collection, GC](gc.md)
+
+Automatic memory management that reclaims objects known to be unreachable via tracing.
+
+## [Safepoint](gc.md#safepoints)
+
+A point at which all pointers into the Dart heap can be precisely identified.
+
+## [Handle](gc.md#handles)
+
+An indirect pointer to a Dart object.
+
+## [Stack map](../vm/object.h#:~:text=class%20CompressedStackMaps)
+
+Identifies which slots in a stack frame contain objects (to be visited by the GC) and which contain raw bits (to be ignored by the GC) for each return address.
+
+## [Inline cache, IC](https://en.wikipedia.org/wiki/Inline_caching)
+
+A cache of method lookup results specific to one call-site. It both speeds up method invocation by avoiding repeated lookups and records type feedback that is used by the optimizer. In the Dart VM,
+these are not literally inline in the machine code as they were in [early Smalltalk JITs](https://dl.acm.org/doi/10.1145/800017.800542), but the name has stuck.
+
+## Monomorphic
+
+Having exactly one possible type (in the context of a conservative optimization) or one observed type (in the context of a speculative optimization).
+
+## Polymorphic
+
+Having a small number of possible types.
+
+## Megamorphic
+
+Having a large number of possible types.
+
+## [Ahead-of-time compilation, AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation)
+
+Compiling an program in a separate process from its execution. Uses conservative optimizations based on a closed-world assumption and whole-program analysis.
+
+## [Just-in-time compilation, JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation)
+
+Compiling a program as it executes in the same process. Uses speculative optimizations based on type feedback and usage feedback.
+
+## Conservative optimization
+
+An optimization based on some property that is true for all possible executions of a program.
+
+## Speculative optimization
+
+An optimization based on some property that has held so far in the execution of a program, but may fail to hold as part of future execution. Speculative optimizations must add checks that their assumptions continue to hold and be able deoptimize if and when their assumptions no longer hold.
+
+## Deoptimization
+
+Transitioning from a stack frame running optimized code to a frame or multiple frames running the corresponding unoptimized code. Usually because a speculative assumption made by the optimized code has been discovered to no longer hold.
+
+## Deopt id
+
+An identifier that matches a position in optimized code to a position in unoptimized code.
+
+## On-stack replacement, OSR
+
+Switching an active stack frame from unoptimized code to optimize code. This is an uncommon case; the common case of optimization only causes new invocations of the function to run the new,
+optimized code.
+
+## Token position
+
+A source position within a script, usually a file. It is a UTF-8 offset unrelated to tokenization. The name dates from the VM's frontend, where it was an index into a [token](https://en.wikipedia.org/wiki/Lexical_analysis#Token) list.
+
+## [Executable and Linkable Format, ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format)
+
+The format of executables on Linux, Android and Fuchsia. The Dart AOT compiler can directly produce an ELF shared library as output.
+
+## [Mach-O](https://en.wikipedia.org/wiki/Mach-O)
+
+The format of executables on macOS and iOS. The Dart AOT compiler can produce assembly that the GCC or LLVM assemblers can translate into Mach-O.
+
+## [DWARF](https://en.wikipedia.org/wiki/DWARF)
+
+The format of debugging information included in [ELF](#elf) or [Mach-O](#mach-o) files. The Dart AOT compiler can directly produce DWARF, which contains information on how to unwind Dart frames and how to map machine code addresses back to source positions.
+
+## Isolate
+
+The unit of concurrency in Dart. Each isolate has an independent set of globals and message queue. Isolates communicate with each other via [asynchronous message passing](https://en.wikipedia.org/wiki/Actor_model) rather than shared mutable memory like threads do.
+
+## Isolate group
+
+A set of isolates that are sharing the same program and the same heap. Isolates in the same isolate group can send more types of objects to each other because the sender can rely on the receiver having the classes needed to represent any object it might send. Messages sent within an isolate group can also be more efficient because they are in the same heap.
+
+## Out-of-band message, OOB message
+
+A message that is deliveried at any interrupt check, such as at function entry or the back-edge of a loop, rather than only when returning to the message loop.
+
+## [Hot reload](https://github.com/dart-lang/sdk/wiki/Hot-reload)
+
+Changing a running program while retaining its current state: globals, frames, and objects transitively reachable from such.
+
+## [AddressSanitizer, ASAN](https://github.com/dart-lang/sdk/wiki/Debugging-Dart-VM-with-AddressSanitizer)
+
+Instrumentation to detect use-after-free and other similar issues.
+
+## [MemorySanitizer, MSAN](https://github.com/dart-lang/sdk/wiki/Debugging-Dart-VM-with-AddressSanitizer)
+
+Instrumentation to detect use of uninitialized memory and other similar issues.
+
+## [ThreadSanitizer, TSAN](https://github.com/dart-lang/sdk/wiki/Debugging-Dart-VM-with-AddressSanitizer)
+
+Instrumentation to detect use of data races and other similar issues.
+
+## [UndefinedBehaviorSanitizer, UBSAN](https://github.com/dart-lang/sdk/wiki/Debugging-Dart-VM-with-AddressSanitizer)
+
+Instrumentation to detect undefined behavior such as signed integer overflow.
+
+## [Common front end, CFE, Dart front end, DFE](../../pkg/front_end/README.md)
+
+A tool that handles the early phases of compilation, shared between the Dart VM and dart2js. It takes Dart source as input and produces [kernel](#kernel-dart-intermediate-language-dil-dill).
+
+## [Kernel, Dart intermediate language, DIL, DILL](../../pkg/kernel/README.md)
+
+A representation of a Dart program at the level of a resolved [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree).
+
+## [Intermediate Language, IL, intermediate representation, IR](../vm/compiler/backend/il.h)
+
+A representation of a Dart function between kernel and machine code. Most optimizations happen at this level.
+
+Not to be confused with [DIL](#kernel-dart-intermediate-language-dil-dill).
+
+## [Control flow graph, CFG, flow graph](https://en.wikipedia.org/wiki/Control-flow_graph)
+
+## [Loop-invariant code mode, LICM](../vm/compiler/backend/redundancy_elimination.h#:~:text=class%20LICM)
+
+## Common subexpression elimination, CSE
+
+## [Static single-assignment form, SSA](https://en.wikipedia.org/wiki/Static_single-assignment_form)
+
+## [Class hierarchy analysis, CHA](../vm/compiler/cha.h)
+
+## Simulator, SIMARM, SIMARM64, SIMRISCV32, SIMRISCV64
+
+An interpreter to enable running Dart code compiled for some target architecture on hardware of a different architecture. For example, one can run Dart code compiled for ARM64 on a X64 host machine. This allows compiler developers to test changes without needing hardware for each architecture.
+
+The Dart VM has simulators for ARM, ARM64, RV32GC and RV64GC, but not for IA32 or X64.
+
+## Stub
+
+A commonly used sequence of machine code that has been factored out into a separate procedure to be called when needed instead of being repeated inline.
+
+## [Type arguments, type argument vector](types.md#typearguments)
diff --git a/tools/VERSION b/tools/VERSION
index e499039..9bb2099 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 23
+PRERELEASE 24
 PRERELEASE_PATCH 0
\ No newline at end of file
