Version 2.19.0-24.0.dev

Merge commit 'eefbe1fd148dc7f306aeb5944391fe024092d085' into 'dev'
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