diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 9b829c7..7f8d2e5 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart' as engine;
 import 'package:analyzer/error/error.dart' as engine;
-import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/generated/source.dart' as engine;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -299,25 +298,16 @@
 /// Creates a new [Location].
 Location _locationForArgs(
     engine.CompilationUnitElement unitElement, engine.SourceRange range) {
-  var startLine = 0;
-  var startColumn = 0;
-  var endLine = 0;
-  var endColumn = 0;
-  try {
-    var lineInfo = unitElement.lineInfo;
-    if (lineInfo != null) {
-      var startLocation = lineInfo.getLocation(range.offset);
-      startLine = startLocation.lineNumber;
-      startColumn = startLocation.columnNumber;
+  var lineInfo = unitElement.lineInfo;
 
-      var endLocation = lineInfo.getLocation(range.end);
-      endLine = endLocation.lineNumber;
-      endColumn = endLocation.columnNumber;
-    }
-  } on AnalysisException {
-    // TODO(brianwilkerson) It doesn't look like the code in the try block
-    //  should be able to throw an exception. Try removing the try statement.
-  }
+  var startLocation = lineInfo.getLocation(range.offset);
+  var endLocation = lineInfo.getLocation(range.end);
+
+  var startLine = startLocation.lineNumber;
+  var startColumn = startLocation.columnNumber;
+  var endLine = endLocation.lineNumber;
+  var endColumn = endLocation.columnNumber;
+
   return Location(unitElement.source.fullName, range.offset, range.length,
       startLine, startColumn,
       endLine: endLine, endColumn: endColumn);
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 f818710..0a88729 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
@@ -1956,13 +1956,6 @@
   notes: |-
     We can't guess at the names or number of the enum constants that should be
     added.
-ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS:
-  status: noFix
-  since: 2.17
-  notes: |-
-    We could potentially add `()`, but we generally don't have fixes for parse
-    errors because we assume the user is still typing and will soon fix the
-    problem.
 ParserErrorCode.ENUM_IN_CLASS:
   status: needsEvaluation
 ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND:
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart b/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart
index d066ac5..8a49420 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart
@@ -2,12 +2,208 @@
 // 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/util.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
 import 'package:analysis_server/src/services/snippets/dart/snippet_manager.dart';
 import 'package:analyzer/src/dart/analysis/session_helper.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/lint/linter.dart' show LinterContextImpl;
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 
+/// Produces a [Snippet] that creates a `do while` loop.
+class DartDoWhileLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'do';
+  static const label = 'do while';
+
+  DartDoWhileLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.writeln('do {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('} while (');
+        builder.addEmptyLinkedEdit('expression');
+        builder.write(');');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a do-while loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartDoWhileLoopSnippetProducer newInstance(
+          DartSnippetRequest request) =>
+      DartDoWhileLoopSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `for in` loop.
+class DartForInLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'forin';
+  static const label = 'for in';
+
+  DartForInLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+    final varOrFinal =
+        isLintEnabled(LintNames.prefer_final_locals) ? 'final' : 'var';
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('for ($varOrFinal ');
+        builder.addEmptyLinkedEdit('variableName');
+        builder.write(' in ');
+        builder.addEmptyLinkedEdit('collectionName');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a for-in loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartForInLoopSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartForInLoopSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `for` loop.
+class DartForLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'for';
+  static const label = 'for';
+
+  DartForLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('for (var i = 0; i < ');
+        builder.addEmptyLinkedEdit('count');
+        builder.writeln('; i++) {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a for loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartForLoopSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartForLoopSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates an if/else statement.
+class DartIfElseSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'ife';
+  static const label = 'ife';
+
+  DartIfElseSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        void writeIndentedln(String string) =>
+            builder.writeln('$indent$string');
+        builder.write('if (');
+        builder.addEmptyLinkedEdit('condition');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndentedln('} else {');
+        writeIndentedln('  ');
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert an if/else statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartIfElseSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartIfElseSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates an if statement.
+class DartIfSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'if';
+  static const label = 'if';
+
+  DartIfSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('if (');
+        builder.addEmptyLinkedEdit('condition');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert an if statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartIfSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartIfSnippetProducer._(request);
+}
+
 /// Produces a [Snippet] that creates a top-level `main` function.
 ///
 /// A `List<String> args` parameter will be included when generating inside a
@@ -16,7 +212,8 @@
   static const prefix = 'main';
   static const label = 'main()';
 
-  DartMainFunctionSnippetProducer(DartSnippetRequest request) : super(request);
+  DartMainFunctionSnippetProducer._(DartSnippetRequest request)
+      : super(request);
 
   /// Whether to insert a `List<String> args` parameter in the generated
   /// function.
@@ -64,13 +261,144 @@
 
   static DartMainFunctionSnippetProducer newInstance(
           DartSnippetRequest request) =>
-      DartMainFunctionSnippetProducer(request);
+      DartMainFunctionSnippetProducer._(request);
 }
 
 abstract class DartSnippetProducer extends SnippetProducer {
   final AnalysisSessionHelper sessionHelper;
+  final CorrectionUtils utils;
 
   DartSnippetProducer(DartSnippetRequest request)
       : sessionHelper = AnalysisSessionHelper(request.analysisSession),
+        utils = CorrectionUtils(request.unit),
         super(request);
+
+  bool isLintEnabled(String name) {
+    var analysisOptions = sessionHelper.session.analysisContext.analysisOptions;
+    return analysisOptions.isLintEnabled(name);
+  }
+}
+
+/// Produces a [Snippet] that creates an if statement.
+class DartSwitchSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'switch';
+  static const label = 'switch case';
+
+  DartSwitchSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        void writeIndentedln(String string) =>
+            builder.writeln('$indent$string');
+        builder.write('switch (');
+        builder.addEmptyLinkedEdit('expression');
+        builder.writeln(') {');
+        writeIndented('  case ');
+        builder.addEmptyLinkedEdit('value');
+        builder.writeln(':');
+        writeIndented('    ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndentedln('    break;');
+        writeIndentedln('  default:');
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a switch statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartSwitchSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartSwitchSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a try/catch statement.
+class DartTryCatchSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'try';
+  static const label = 'try';
+
+  DartTryCatchSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        void writeIndentedln(String string) =>
+            builder.writeln('$indent$string');
+        builder.writeln('try {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('} catch (');
+        builder.addLinkedEdit('exceptionName', (builder) {
+          builder.write('e');
+        });
+        builder.writeln(') {');
+        writeIndentedln('  ');
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a try/catch statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartTryCatchSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartTryCatchSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `while` loop.
+class DartWhileLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'while';
+  static const label = 'while';
+
+  DartWhileLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('while (');
+        builder.addEmptyLinkedEdit('expression');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a while loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartWhileLoopSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartWhileLoopSnippetProducer._(request);
 }
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
index 9792d8e..90b520d 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
@@ -53,7 +53,7 @@
   late ClassElement? classBuildContext;
   late ClassElement? classKey;
 
-  FlutterStatefulWidgetSnippetProducer(DartSnippetRequest request)
+  FlutterStatefulWidgetSnippetProducer._(DartSnippetRequest request)
       : super(request);
 
   @override
@@ -172,7 +172,7 @@
 
   static FlutterStatefulWidgetSnippetProducer newInstance(
           DartSnippetRequest request) =>
-      FlutterStatefulWidgetSnippetProducer(request);
+      FlutterStatefulWidgetSnippetProducer._(request);
 }
 
 /// Produces a [Snippet] that creates a Flutter StatefulWidget with a
@@ -189,7 +189,7 @@
   late ClassElement? classAnimationController;
   late ClassElement? classSingleTickerProviderStateMixin;
 
-  FlutterStatefulWidgetWithAnimationControllerSnippetProducer(
+  FlutterStatefulWidgetWithAnimationControllerSnippetProducer._(
       DartSnippetRequest request)
       : super(request);
 
@@ -358,7 +358,8 @@
 
   static FlutterStatefulWidgetWithAnimationControllerSnippetProducer
       newInstance(DartSnippetRequest request) =>
-          FlutterStatefulWidgetWithAnimationControllerSnippetProducer(request);
+          FlutterStatefulWidgetWithAnimationControllerSnippetProducer._(
+              request);
 }
 
 /// Produces a [Snippet] that creates a Flutter StatelessWidget.
@@ -370,7 +371,7 @@
   late ClassElement? classBuildContext;
   late ClassElement? classKey;
 
-  FlutterStatelessWidgetSnippetProducer(DartSnippetRequest request)
+  FlutterStatelessWidgetSnippetProducer._(DartSnippetRequest request)
       : super(request);
 
   @override
@@ -465,5 +466,5 @@
 
   static FlutterStatelessWidgetSnippetProducer newInstance(
           DartSnippetRequest request) =>
-      FlutterStatelessWidgetSnippetProducer(request);
+      FlutterStatelessWidgetSnippetProducer._(request);
 }
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart b/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
index 5c6d87d..4972b2d 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
@@ -28,7 +28,17 @@
       FlutterStatefulWidgetSnippetProducer.newInstance,
       FlutterStatefulWidgetWithAnimationControllerSnippetProducer.newInstance,
       FlutterStatelessWidgetSnippetProducer.newInstance,
-    ]
+    ],
+    SnippetContext.inBlock: [
+      DartDoWhileLoopSnippetProducer.newInstance,
+      DartForInLoopSnippetProducer.newInstance,
+      DartForLoopSnippetProducer.newInstance,
+      DartIfElseSnippetProducer.newInstance,
+      DartIfSnippetProducer.newInstance,
+      DartSwitchSnippetProducer.newInstance,
+      DartTryCatchSnippetProducer.newInstance,
+      DartWhileLoopSnippetProducer.newInstance,
+    ],
   };
 
   Future<List<Snippet>> computeSnippets(
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index e2aa4c7..491d5b9 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -92,9 +92,12 @@
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
 
     // Write a package file that allows resolving the include.
-    newDotPackagesFile(projectPath, content: '''
-pedantic:${pedanticFolder.toUri()}
-''');
+    newPackageConfigJsonFile(
+      projectPath,
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'pedantic', rootPath: pedanticFolder.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
 
     // Ensure the errors disappear.
     await waitForTasksFinished();
diff --git a/pkg/analysis_server/test/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
index c39b2c1..9d3c505 100644
--- a/pkg/analysis_server/test/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
@@ -83,8 +83,8 @@
   }
 
   Future<void> test_ignoredInAnalysisOptions_inChildContext() async {
-    newDotPackagesFile(projectPath);
-    newDotPackagesFile('$projectPath/child');
+    newPackageConfigJsonFile(projectPath);
+    newPackageConfigJsonFile('$projectPath/child');
     var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
     newFile('$projectPath/child/${file_paths.analysisOptionsYaml}',
         content: r'''
@@ -99,8 +99,8 @@
   }
 
   Future<void> test_ignoredInAnalysisOptions_inRootContext() async {
-    newDotPackagesFile(projectPath);
-    newDotPackagesFile('$projectPath/child');
+    newPackageConfigJsonFile(projectPath);
+    newPackageConfigJsonFile('$projectPath/child');
     var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
     newFile('$projectPath/${file_paths.analysisOptionsYaml}', content: r'''
 analyzer:
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index e2b363c..229f1ca 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -236,41 +236,6 @@
     assertNoErrors(b_path);
   }
 
-  Future<void> test_fileSystem_addFile_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We cannot resolve `package:aaa/a.dart`
-    assertHasErrors(testFilePath);
-
-    // Write `.packages`, recreate analysis contexts.
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    await pumpEventQueue();
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_fileSystem_addFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
@@ -564,44 +529,6 @@
     assertNoErrors(b_path);
   }
 
-  Future<void> test_fileSystem_changeFile_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    // Write `.packages` empty, without `package:aaa`.
-    newDotPackagesFile(testPackageRootPath, content: '');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We cannot resolve `package:aaa/a.dart`
-    assertHasErrors(testFilePath);
-
-    // Write `.packages`, recreate analysis contexts.
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    await pumpEventQueue();
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_fileSystem_changeFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
@@ -833,43 +760,6 @@
     assertHasErrors(b_path);
   }
 
-  Future<void> test_fileSystem_deleteFile_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // Write `.packages`, recreate analysis contexts.
-    deleteFile('$testPackageRootPath/.packages');
-
-    await pumpEventQueue();
-    await server.onAnalysisComplete;
-
-    // We cannot resolve `package:aaa/a.dart`
-    assertHasErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_fileSystem_deleteFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
@@ -987,35 +877,6 @@
     );
   }
 
-  Future<void> test_setRoots_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    // create project and wait for analysis
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_setRoots_excluded_notAbsolute() async {
     var response = await handleRequest(
       AnalysisSetAnalysisRootsParams(
@@ -1468,7 +1329,12 @@
 library lib_a;
 class A {}
 ''').path;
-    newDotPackagesFile('/project', content: 'pkgA:file:///packages/pkgA/lib');
+    newPackageConfigJsonFile(
+      '/project',
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     //
     addTestFile('''
 import 'package:pkgA/libA.dart';
@@ -1518,7 +1384,12 @@
 library lib_a;
 class A {}
 ''').path;
-    newDotPackagesFile('/project', content: 'pkgA:/packages/pkgA/lib');
+    newPackageConfigJsonFile(
+      '/project',
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     //
     addTestFile('// no "pkgA" reference');
     await createProject();
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 8ffe486..b84a06c 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analyzer/instrumentation/service.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -149,20 +150,23 @@
   }
 
   Future<void> test_suggestImportFromDifferentAnalysisRoot() async {
-    newFolder('/aaa');
-    newDotPackagesFile('/aaa', content: '''
-aaa:${toUri('/aaa/lib')}
-bbb:${toUri('/bbb/lib')}
-''');
+    newPackageConfigJsonFile(
+      '/aaa',
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'aaa', rootPath: '/aaa')
+            ..add(name: 'bbb', rootPath: '/bbb'))
+          .toContent(toUriStr: toUriStr),
+    );
     newPubspecYamlFile('/aaa', r'''
 dependencies:
   bbb: any
 ''');
 
-    newFolder('/bbb');
-    newDotPackagesFile('/bbb', content: '''
-bbb:${toUri('/bbb/lib')}
-''');
+    newPackageConfigJsonFile(
+      '/bbb',
+      content: (PackageConfigFileBuilder()..add(name: 'bbb', rootPath: '/bbb'))
+          .toContent(toUriStr: toUriStr),
+    );
     newFile('/bbb/lib/target.dart', content: 'class Foo() {}');
     newFile('/bbb/lib/target.generated.dart', content: 'class Foo() {}');
     newFile('/bbb/lib/target.template.dart', content: 'class Foo() {}');
diff --git a/pkg/analysis_server/test/lsp/completion_dart_test.dart b/pkg/analysis_server/test/lsp/completion_dart_test.dart
index 3e0b30e..17744ff 100644
--- a/pkg/analysis_server/test/lsp/completion_dart_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_dart_test.dart
@@ -2392,6 +2392,29 @@
     );
   }
 
+  Future<void> test_snippets_doWhile() async {
+    final content = '''
+void f() {
+  do^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartDoWhileLoopSnippetProducer.prefix,
+      label: DartDoWhileLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  do {
+    $0
+  } while ($1);
+}
+''');
+  }
+
   Future<void>
       test_snippets_flutterStateless_notAvailable_notFlutterProject() async {
     final content = '''
@@ -2409,6 +2432,100 @@
     );
   }
 
+  Future<void> test_snippets_for() async {
+    final content = '''
+void f() {
+  for^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartForLoopSnippetProducer.prefix,
+      label: DartForLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  for (var i = 0; i < $1; i++) {
+    $0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_forIn() async {
+    final content = '''
+void f() {
+  forin^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartForInLoopSnippetProducer.prefix,
+      label: DartForInLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  for (var $1 in $2) {
+    $0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_if() async {
+    final content = '''
+void f() {
+  if^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartIfSnippetProducer.prefix,
+      label: DartIfSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  if ($1) {
+    $0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_ifElse() async {
+    final content = '''
+void f() {
+  if^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartIfElseSnippetProducer.prefix,
+      label: DartIfElseSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  if ($1) {
+    $0
+  } else {
+    
+  }
+}
+''');
+  }
+
   Future<void> test_snippets_mainFunction() async {
     final content = '''
 class A {}
@@ -2446,6 +2563,80 @@
     final res = await getCompletion(mainFileUri, positionFromMarker(content));
     expect(res.any((c) => c.kind == CompletionItemKind.Snippet), isFalse);
   }
+
+  Future<void> test_snippets_switch() async {
+    final content = '''
+void f() {
+  swi^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartSwitchSnippetProducer.prefix,
+      label: DartSwitchSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  switch ($1) {
+    case $2:
+      $0
+      break;
+    default:
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_tryCatch() async {
+    final content = '''
+void f() {
+  tr^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartTryCatchSnippetProducer.prefix,
+      label: DartTryCatchSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  try {
+    $0
+  } catch (${1:e}) {
+    
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_while() async {
+    final content = '''
+void f() {
+  while^
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartWhileLoopSnippetProducer.prefix,
+      label: DartWhileLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  while ($1) {
+    $0
+  }
+}
+''');
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index c0d0616..2b1903c 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/search/search_domain.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -168,11 +169,19 @@
 class A {}
 class B extends A {}
 ''');
-    newDotPackagesFile('/packages/pkgA',
-        content: 'pkgA:${toUriStr('/packages/pkgA/lib')}');
+    newPackageConfigJsonFile(
+      '/packages/pkgA',
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     // reference the package from a project
-    newDotPackagesFile(projectPath,
-        content: 'pkgA:${toUriStr('/packages/pkgA/lib')}');
+    newPackageConfigJsonFile(
+      projectPath,
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     addTestFile('''
 import 'package:pkgA/libA.dart';
 class C extends A {}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
index 5ebb1ac..42fafb8 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
@@ -335,4 +335,23 @@
 
     check(response).suggestions.isEmpty;
   }
+
+  Future<void> test_constantName_typeArguments_dot_x_semicolon_named() async {
+    var response = await getTestCodeSuggestions('''
+enum E<T> {
+  v<int>.^;
+  const E.foo01();
+  const E.foo02();
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo01')
+        ..isConstructorInvocation,
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo02')
+        ..isConstructorInvocation,
+    ]);
+  }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
index ea4ec7e..efc5a00 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
@@ -2,6 +2,7 @@
 // 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/test_utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../../../client/completion_driver_test.dart';
@@ -34,11 +35,10 @@
   Future<void> setUp() async {
     var metaLibFolder = MockPackages.instance.addMeta(resourceProvider);
 
-    // TODO(scheglov) Use `writeTestPackageConfig` instead
-    newDotPackagesFile(testPackageRootPath, content: '''
-meta:${metaLibFolder.toUri()}
-project:${toUri(testPackageLibPath)}
-''');
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'meta', rootPath: metaLibFolder.parent.path),
+    );
 
     await super.setUp();
   }
diff --git a/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart b/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart
index ac446c3..5482204 100644
--- a/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart
+++ b/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart
@@ -13,11 +13,315 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(DartDoWhileLoopSnippetProducerTest);
+    defineReflectiveTests(DartForInLoopSnippetProducerTest);
+    defineReflectiveTests(DartForLoopSnippetProducerTest);
+    defineReflectiveTests(DartIfElseSnippetProducerTest);
+    defineReflectiveTests(DartIfSnippetProducerTest);
     defineReflectiveTests(DartMainFunctionSnippetProducerTest);
+    defineReflectiveTests(DartSwitchSnippetProducerTest);
+    defineReflectiveTests(DartTryCatchSnippetProducerTest);
+    defineReflectiveTests(DartWhileLoopSnippetProducerTest);
   });
 }
 
 @reflectiveTest
+class DartDoWhileLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartDoWhileLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartDoWhileLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartDoWhileLoopSnippetProducer.prefix;
+
+  Future<void> test_for() async {
+    var code = r'''
+void f() {
+  do^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  do {
+    
+  } while ();
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 22);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 34},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartForInLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartForInLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartForInLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartForInLoopSnippetProducer.prefix;
+
+  Future<void> test_for() async {
+    var code = r'''
+void f() {
+  forin^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  for (var  in ) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 34);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 22},
+        ],
+        'length': 0,
+        'suggestions': []
+      },
+      {
+        'positions': [
+          {'file': testFile, 'offset': 26},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartForLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartForLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartForLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartForLoopSnippetProducer.prefix;
+
+  Future<void> test_for() async {
+    var code = r'''
+void f() {
+  for^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  for (var i = 0; i < ; i++) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 46);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartIfElseSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartIfElseSnippetProducer.newInstance;
+
+  @override
+  String get label => DartIfElseSnippetProducer.label;
+
+  @override
+  String get prefix => DartIfElseSnippetProducer.prefix;
+
+  Future<void> test_ifElse() async {
+    var code = r'''
+void f() {
+  if^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if () {
+    
+  } else {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 25);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 17},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_ifElse_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    if^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    if () {
+      
+    } else {
+      
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 43);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartIfSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartIfSnippetProducer.newInstance;
+
+  @override
+  String get label => DartIfSnippetProducer.label;
+
+  @override
+  String get prefix => DartIfSnippetProducer.prefix;
+
+  Future<void> test_if() async {
+    var code = r'''
+void f() {
+  if^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if () {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 25);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 17},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_if_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    if^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    if () {
+      
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 43);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
 class DartMainFunctionSnippetProducerTest extends DartSnippetProducerTest {
   @override
   final generator = DartMainFunctionSnippetProducer.newInstance;
@@ -116,3 +420,230 @@
     return producer.compute();
   }
 }
+
+@reflectiveTest
+class DartSwitchSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartSwitchSnippetProducer.newInstance;
+
+  @override
+  String get label => DartSwitchSnippetProducer.label;
+
+  @override
+  String get prefix => DartSwitchSnippetProducer.prefix;
+
+  Future<void> test_switch() async {
+    var code = r'''
+void f() {
+  sw^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  switch () {
+    case :
+      
+      break;
+    default:
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 42);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      // expression
+      {
+        'positions': [
+          {'file': testFile, 'offset': 21},
+        ],
+        'length': 0,
+        'suggestions': []
+      },
+      // value
+      {
+        'positions': [
+          {'file': testFile, 'offset': 34},
+        ],
+        'length': 0,
+        'suggestions': []
+      },
+    ]);
+  }
+
+  Future<void> test_switch_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    sw^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    switch () {
+      case :
+        
+        break;
+      default:
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 62);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      // expression
+      {
+        'positions': [
+          {'file': testFile, 'offset': 37},
+        ],
+        'length': 0,
+        'suggestions': []
+      },
+      // value
+      {
+        'positions': [
+          {'file': testFile, 'offset': 52},
+        ],
+        'length': 0,
+        'suggestions': []
+      },
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartTryCatchSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartTryCatchSnippetProducer.newInstance;
+
+  @override
+  String get label => DartTryCatchSnippetProducer.label;
+
+  @override
+  String get prefix => DartTryCatchSnippetProducer.prefix;
+
+  Future<void> test_tryCatch() async {
+    var code = r'''
+void f() {
+  tr^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  try {
+    
+  } catch (e) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 23);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 35},
+        ],
+        'length': 1,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_tryCatch_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    tr^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    try {
+      
+    } catch (e) {
+      
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 41);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 55},
+        ],
+        'length': 1,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartWhileLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartWhileLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartWhileLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartWhileLoopSnippetProducer.prefix;
+
+  Future<void> test_for() async {
+    var code = r'''
+void f() {
+  while^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  while () {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 28);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 20},
+        ],
+        'length': 0,
+        'suggestions': []
+      }
+    ]);
+  }
+}
diff --git a/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart b/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
index 622d84f..c5ffb8a 100644
--- a/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
+++ b/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
@@ -69,7 +69,7 @@
 /// A snippet producer that always returns `false` from [isValid] and throws
 /// if [compute] is called.
 class _NotValidSnippetProducer extends SnippetProducer {
-  _NotValidSnippetProducer(DartSnippetRequest request) : super(request);
+  _NotValidSnippetProducer._(DartSnippetRequest request) : super(request);
 
   @override
   Future<Snippet> compute() {
@@ -83,7 +83,7 @@
   Future<bool> isValid() async => false;
 
   static _NotValidSnippetProducer newInstance(DartSnippetRequest request) =>
-      _NotValidSnippetProducer(request);
+      _NotValidSnippetProducer._(request);
 }
 
 class _TestDartSnippetManager extends DartSnippetManager {
@@ -96,7 +96,7 @@
 /// A snippet producer that always returns `true` from [isValid] and a simple
 /// snippet from [compute].
 class _ValidSnippetProducer extends SnippetProducer {
-  _ValidSnippetProducer(DartSnippetRequest request) : super(request);
+  _ValidSnippetProducer._(DartSnippetRequest request) : super(request);
 
   @override
   Future<Snippet> compute() async {
@@ -112,5 +112,5 @@
   Future<bool> isValid() async => true;
 
   static _ValidSnippetProducer newInstance(DartSnippetRequest request) =>
-      _ValidSnippetProducer(request);
+      _ValidSnippetProducer._(request);
 }
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
index 25d24d3..d528d5f 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -78,9 +79,12 @@
     testFile = convertPath('/home/test/lib/test.dart');
 
     newPubspecYamlFile('/home/test', '');
-    newDotPackagesFile('/home/test', content: '''
-test:${toUri('/home/test/lib')}
-''');
+    newPackageConfigJsonFile(
+      '/home/test',
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'test', rootPath: '/home/test'))
+          .toContent(toUriStr: toUriStr),
+    );
 
     await createProject();
     handler = server.handlers.whereType<CompletionDomainHandler>().single;
diff --git a/pkg/analysis_server/test/src/domains/flutter/base.dart b/pkg/analysis_server/test/src/domains/flutter/base.dart
index 3a9360a..659378f 100644
--- a/pkg/analysis_server/test/src/domains/flutter/base.dart
+++ b/pkg/analysis_server/test/src/domains/flutter/base.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/flutter/flutter_domain.dart';
 import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -44,40 +45,19 @@
     testFile = convertPath('/home/test/lib/test.dart');
 
     newPubspecYamlFile('/home/test', '');
-    newDotPackagesFile('/home/test', content: '''
-test:${toUri('/home/test/lib')}
-''');
 
-    _addFlutterPackage();
+    var metaLib = MockPackages.instance.addMeta(resourceProvider);
+    var flutterLib = MockPackages.instance.addFlutter(resourceProvider);
+    newPackageConfigJsonFile(
+      '/home/test',
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'test', rootPath: '/home/test')
+            ..add(name: 'meta', rootPath: metaLib.parent.path)
+            ..add(name: 'flutter', rootPath: flutterLib.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
 
     await createProject();
     handler = server.handlers.whereType<FlutterDomainHandler>().single;
   }
-
-  void _addFlutterPackage() {
-    _addMetaPackage();
-    var libFolder = MockPackages.instance.addFlutter(resourceProvider);
-    _addPackageDependency('flutter', libFolder.parent.path);
-  }
-
-  void _addMetaPackage() {
-    var libFolder = MockPackages.instance.addMeta(resourceProvider);
-    _addPackageDependency('meta', libFolder.parent.path);
-  }
-
-  void _addPackageDependency(String name, String rootPath) {
-    var packagesFile = getFile('/home/test/.packages');
-    var packagesContent =
-        packagesFile.exists ? packagesFile.readAsStringSync() : '';
-
-    // Ignore if there is already the same package dependency.
-    if (packagesContent.contains('$name:file://')) {
-      return;
-    }
-
-    rootPath = convertPath(rootPath);
-    packagesContent += '$name:${toUri('$rootPath/lib')}\n';
-
-    packagesFile.writeAsStringSync(packagesContent);
-  }
 }
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
index 25c479b..58b7f0e 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/flutter/flutter_domain.dart';
 import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -72,9 +73,12 @@
   }
 
   Future<void> test_children() async {
-    newDotPackagesFile(projectPath, content: '''
-flutter:${flutterFolder.toUri()}
-''');
+    newPackageConfigJsonFile(
+      projectPath,
+      content: (PackageConfigFileBuilder()
+            ..add(name: 'flutter', rootPath: flutterFolder.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
     newAnalysisOptionsYamlFile(projectPath, content: '''
 analyzer:
   strong-mode: true
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 5692f14..ccc51f6 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -8,6 +8,8 @@
 * Deprecated `AnalysisDriver.getParsedLibraryByUri`, use `getParsedLibraryByUri2` instead.
 * Deprecated `AnalysisDriver.parseFileSync`, use `parseFile` instead.
 * Deprecated `astFactory`, clients should not create AST nodes manually.
+* Changed `CompilationUnit.lineInfo` to be non-nullable.
+* Changed `CompilationUnitElement.lineInfo` to be non-nullable.
 
 ## 3.3.1
 * Report HintCode.OVERRIDE_ON_NON_OVERRIDING_xyz on enum.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index e0478a0..9c73621 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -413,8 +413,8 @@
   @Deprecated('Not useful for clients')
   bool get hasLoadLibraryFunction;
 
-  /// Return the [LineInfo] for the [source], or `null` if not computed yet.
-  LineInfo? get lineInfo;
+  /// Return the [LineInfo] for the [source].
+  LineInfo get lineInfo;
 
   /// Return a list containing all of the mixins contained in this compilation
   /// unit.
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 1e78252..b28918d 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -735,7 +735,6 @@
   ParserErrorCode.DUPLICATE_PREFIX,
   ParserErrorCode.DUPLICATED_MODIFIER,
   ParserErrorCode.EMPTY_ENUM_BODY,
-  ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
   ParserErrorCode.ENUM_IN_CLASS,
   ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND,
   ParserErrorCode.EXPECTED_BODY,
diff --git a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
index 2667185..f32b90b 100644
--- a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
+++ b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
@@ -46,7 +46,7 @@
     ...uriResolvers,
   ]);
 
-  var dataStore = SummaryDataStore.tmp();
+  var dataStore = SummaryDataStore();
   dataStore.addBundle('', sdkBundle);
 
   var logger = PerformanceLog(null);
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index 2cd6b2e..d3a04fe 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -72,7 +72,7 @@
 
     SummaryDataStore? summaryData;
     if (librarySummaryPaths != null) {
-      summaryData = SummaryDataStore.tmp();
+      summaryData = SummaryDataStore();
       for (var summaryPath in librarySummaryPaths) {
         var bytes = resourceProvider.getFile(summaryPath).readAsBytesSync();
         var bundle = PackageBundleReader(bytes);
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 6ec80ea..53cdde8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -39,7 +39,7 @@
   final LibraryContextTestView testView;
   final PerformanceLog logger;
   final ByteStore byteStore;
-  final SummaryDataStore store = SummaryDataStore.tmp();
+  final SummaryDataStore store = SummaryDataStore();
 
   late final AnalysisContextImpl analysisContext;
   late LinkedElementFactory elementFactory;
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 6df7913..988d60f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -259,7 +259,7 @@
           try {
             unitElement.accept(
               _FunctionElementVisitor((element) {
-                addDeclaration(unitElement.lineInfo!, element);
+                addDeclaration(unitElement.lineInfo, element);
               }),
             );
           } on _MaxNumberOfDeclarationsError {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 060903e..0f0720a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -974,7 +974,7 @@
   late Source source;
 
   @override
-  LineInfo? lineInfo;
+  late LineInfo lineInfo;
 
   /// The source of the library containing this compilation unit.
   ///
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 06dc036..1b0f41c 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -461,13 +461,6 @@
     correctionMessage: "Try declaring a constant.",
   );
 
-  static const ParserErrorCode
-      ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS = ParserErrorCode(
-    'ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS',
-    "Missing arguments in enum constructor invocation.",
-    correctionMessage: "Try adding an argument list.",
-  );
-
   static const ParserErrorCode ENUM_IN_CLASS = ParserErrorCode(
     'ENUM_IN_CLASS',
     "Enums can't be declared inside classes.",
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 9526d94..18f6f4c 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -78,7 +78,6 @@
         TypeArgumentListImpl,
         TypeParameterImpl;
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/fasta/error_converter.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
@@ -2915,18 +2914,6 @@
           name: constructorNameId,
         );
       }
-      // enum E { v<int> }
-      if (typeArguments != null && argumentList == null) {
-        errorReporter.errorReporter?.reportErrorForNode(
-          ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
-          typeArguments,
-        );
-        argumentList = _syntheticArgumentList(typeArguments.endToken);
-      }
-      // enum E { v.^ }
-      if (constructorSelector != null) {
-        argumentList ??= _syntheticArgumentList(constructorSelector.endToken);
-      }
     }
 
     // Replace the constant to include arguments.
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index cd89eef..5492b85 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -91,12 +91,12 @@
       classTypeAlias(typeName, objectType, parameterNames);
 
   static CompilationUnitElementImpl compilationUnit(String fileName,
-      [Source? librarySource]) {
+      [Source? librarySource, LineInfo? lineInfo]) {
     Source source = NonExistingSource(fileName, toUri(fileName));
     CompilationUnitElementImpl unit = CompilationUnitElementImpl();
     unit.source = source;
-    librarySource ??= source;
-    unit.librarySource = librarySource;
+    unit.librarySource = librarySource ?? source;
+    unit.lineInfo = lineInfo ?? LineInfo([0]);
     return unit;
   }
 
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index f9c96037..6b789f1 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -4,9 +4,7 @@
 
 import 'dart:io' as io;
 import 'dart:math' show min;
-import 'dart:typed_data';
 
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
@@ -121,14 +119,9 @@
   final Set<String> _libraryUris = <String>{};
   final Set<String> _partUris = <String>{};
 
-  /// Create a [SummaryDataStore] and populate it with the summaries in
-  /// [summaryPaths].
-  @Deprecated('Use tmp() and addBundle() instead')
-  SummaryDataStore(Iterable<String> summaryPaths,
-      {ResourceProvider? resourceProvider}) {
-    summaryPaths.forEach((String path) => _fillMaps(path, resourceProvider));
-  }
+  SummaryDataStore();
 
+  @Deprecated('Use SummaryDataStore() instead')
   SummaryDataStore.tmp();
 
   /// Add the given [bundle] loaded from the file with the given [path].
@@ -164,17 +157,4 @@
   bool isPartUnit(String uri) {
     return _partUris.contains(uri);
   }
-
-  void _fillMaps(String path, ResourceProvider? resourceProvider) {
-    Uint8List bytes;
-    if (resourceProvider != null) {
-      var file = resourceProvider.getFile(path);
-      bytes = file.readAsBytesSync();
-    } else {
-      io.File file = io.File(path);
-      bytes = file.readAsBytesSync();
-    }
-    var bundle = PackageBundleReader(bytes);
-    addBundle(path, bundle);
-  }
 }
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index 3713497..d48a21f 100644
--- a/pkg/analyzer/lib/src/summary/summary_sdk.dart
+++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart
@@ -17,7 +17,7 @@
   late final InSummaryUriResolver _uriResolver;
 
   SummaryBasedDartSdk.forBundle(this._bundle) {
-    var dataStore = SummaryDataStore.tmp();
+    var dataStore = SummaryDataStore();
     // TODO(scheglov) We need a solution to avoid these paths at all.
     dataStore.addBundle('', bundle);
 
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index d1cb139..ba0dc02 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -71,6 +71,8 @@
   }
   static void run(void callback()) {}
 }
+
+void unawaited(Future<void>? future) {}
 ''',
   ),
   MockSdkLibraryUnit(
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index f289112..38630e9 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -872,6 +873,7 @@
     var asyncUnit = CompilationUnitElementImpl();
     var asyncSource = analysisContext.sourceFactory.forUri('dart:async')!;
     asyncUnit.librarySource = asyncUnit.source = asyncSource;
+    asyncUnit.lineInfo = LineInfo([0]);
     asyncLibrary.definingCompilationUnit = asyncUnit;
 
     asyncUnit.classes = <ClassElement>[
@@ -890,6 +892,7 @@
 
     var coreSource = analysisContext.sourceFactory.forUri('dart:core')!;
     coreUnit.librarySource = coreUnit.source = coreSource;
+    coreUnit.lineInfo = LineInfo([0]);
 
     coreUnit.classes = <ClassElement>[
       boolElement,
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 477c268..ad32254 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -20124,9 +20124,6 @@
   EMPTY_ENUM_BODY:
     problemMessage: An enum must declare at least one constant name.
     correctionMessage: Try declaring a constant.
-  ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS:
-    problemMessage: Missing arguments in enum constructor invocation.
-    correctionMessage: Try adding an argument list.
   EXPECTED_CASE_OR_DEFAULT:
     problemMessage: "Expected 'case' or 'default'."
     correctionMessage: Try placing this code inside a case clause.
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 8c01ffe..3f5b739 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -384,6 +384,7 @@
     var definingUnit = CompilationUnitElementImpl();
     definingUnit.source = source;
     definingUnit.librarySource = source;
+    definingUnit.lineInfo = LineInfo([0]);
 
     definingUnit.enclosingElement = library;
     library.definingCompilationUnit = definingUnit;
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index 10b5c99..747cb36 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -363,6 +363,7 @@
     token: f
     staticElement: f@61
     staticType: void Function<U>(U)
+      alias: self::@typeAlias::Fn
   staticType: void Function(int)
   typeArgumentTypes
     int
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 41cc3bc..28c1a7f 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -3687,6 +3687,7 @@
     token: foo
     staticElement: self::@class::C::@getter::foo
     staticType: double Function(int)
+      alias: self::@typeAlias::MyFunction
   argumentList: ArgumentList
     leftParenthesis: (
     arguments
@@ -3696,6 +3697,7 @@
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: double Function(int)
+    alias: self::@typeAlias::MyFunction
   staticType: double
 ''');
     } else {
@@ -3705,6 +3707,7 @@
     token: foo
     staticElement: self::@class::C::@getter::foo
     staticType: double* Function(int*)*
+      alias: self::@typeAlias::MyFunction
   argumentList: ArgumentList
     leftParenthesis: (
     arguments
@@ -3714,6 +3717,7 @@
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: double* Function(int*)*
+    alias: self::@typeAlias::MyFunction
   staticType: double*
 ''');
     }
@@ -7696,11 +7700,13 @@
     token: a
     staticElement: a@39
     staticType: void Function()
+      alias: self::@typeAlias::F
   argumentList: ArgumentList
     leftParenthesis: (
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: void Function()
+    alias: self::@typeAlias::F
   staticType: void
 ''');
     } else {
@@ -7710,11 +7716,13 @@
     token: a
     staticElement: a@39
     staticType: void Function()*
+      alias: self::@typeAlias::F
   argumentList: ArgumentList
     leftParenthesis: (
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: void Function()*
+    alias: self::@typeAlias::F
   staticType: void
 ''');
     }
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 4fda1a5..869a97a 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -243,12 +243,6 @@
     return components.join(';');
   }
 
-  String? _typeStr(DartType? type) {
-    return type?.getDisplayString(
-      withNullability: true,
-    );
-  }
-
   void _withIndent(void Function() f) {
     var savedIndent = indent;
     indent = '$savedIndent  ';
@@ -296,7 +290,7 @@
       var supertype = e.supertype;
       if (supertype != null &&
           (supertype.element.name != 'Object' || e.mixins.isNotEmpty)) {
-        _writeType(supertype, name: 'supertype');
+        _writeType('supertype', supertype);
       }
 
       if (e.isMixin) {
@@ -304,15 +298,11 @@
         if (superclassConstraints.isEmpty) {
           throw StateError('At least Object is expected.');
         }
-        _writeElements<DartType>(
-          'superclassConstraints',
-          superclassConstraints,
-          _writeType,
-        );
+        _writeTypeList('superclassConstraints', superclassConstraints);
       }
 
-      _writeElements<DartType>('mixins', e.mixins, _writeType);
-      _writeElements<DartType>('interfaces', e.interfaces, _writeType);
+      _writeTypeList('mixins', e.mixins);
+      _writeTypeList('interfaces', e.interfaces);
 
       _writeElements('fields', e.fields, _writePropertyInducingElement);
 
@@ -484,7 +474,7 @@
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
-      _writeType(e.extendedType, name: 'extendedType');
+      _writeType('extendedType', e.extendedType);
     });
 
     _withIndent(() {
@@ -522,7 +512,7 @@
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
       _writeParameterElements(e.parameters);
-      _writeType(e.returnType, name: 'returnType');
+      _writeType('returnType', e.returnType);
     });
 
     _assertNonSyntheticElementSelf(e);
@@ -597,7 +587,7 @@
 
       _writeTypeParameterElements(e.typeParameters);
       _writeParameterElements(e.parameters);
-      _writeType(e.returnType, name: 'returnType');
+      _writeType('returnType', e.returnType);
       _writeNonSyntheticElement(e);
     });
 
@@ -672,7 +662,7 @@
     });
 
     _withIndent(() {
-      _writeType(e.type, name: 'type');
+      _writeType('type', e.type);
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
@@ -741,7 +731,7 @@
 
       expect(e.typeParameters, isEmpty);
       _writeParameterElements(e.parameters);
-      _writeType(e.returnType, name: 'returnType');
+      _writeType('returnType', e.returnType);
       _writeNonSyntheticElement(e);
     });
   }
@@ -783,7 +773,7 @@
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeInferenceError(e);
-      _writeType(e.type, name: 'type');
+      _writeType('type', e.type);
       _writeConstantInitializer(e);
       _writeNonSyntheticElement(e);
     });
@@ -800,26 +790,8 @@
     }
   }
 
-  void _writeType(DartType type, {String? name}) {
-    var typeStr = _typeStr(type);
-    if (name != null) {
-      _writelnWithIndent('$name: $typeStr');
-    } else {
-      _writelnWithIndent('$typeStr');
-    }
-
-    var alias = type.alias;
-    if (alias != null) {
-      _withIndent(() {
-        _createAstPrinter().writeElement('aliasElement', alias.element);
-
-        _writeElements<DartType>(
-          'aliasArguments',
-          alias.typeArguments,
-          _writeType,
-        );
-      });
-    }
+  void _writeType(String name, DartType type) {
+    _createAstPrinter().writeType(type, name: name);
   }
 
   void _writeTypeAliasElement(TypeAliasElement e) {
@@ -838,7 +810,7 @@
       _writeTypeParameterElements(e.typeParameters);
 
       var aliasedType = e.aliasedType;
-      _writeType(aliasedType, name: 'aliasedType');
+      _writeType('aliasedType', aliasedType);
       // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44629
       // TODO(scheglov) Remove it when we stop providing it everywhere.
       if (aliasedType is FunctionType) {
@@ -851,7 +823,7 @@
         _withIndent(() {
           _writeTypeParameterElements(aliasedElement.typeParameters);
           _writeParameterElements(aliasedElement.parameters);
-          _writeType(aliasedElement.returnType, name: 'returnType');
+          _writeType('returnType', aliasedElement.returnType);
         });
       }
     });
@@ -876,6 +848,10 @@
     }
   }
 
+  void _writeTypeList(String name, List<DartType> types) {
+    _createAstPrinter().writeTypeList(name, types);
+  }
+
   void _writeTypeParameterElement(TypeParameterElement e) {
     e as TypeParameterElementImpl;
 
@@ -889,12 +865,12 @@
 
       var bound = e.bound;
       if (bound != null) {
-        _writeType(bound, name: 'bound');
+        _writeType('bound', bound);
       }
 
       var defaultType = e.defaultType;
       if (defaultType != null) {
-        _writeType(defaultType, name: 'defaultType');
+        _writeType('defaultType', defaultType);
       }
 
       _writeMetadata(e);
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 18026d6..e0617b5 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -1285,6 +1285,40 @@
     _writeElement(name, element);
   }
 
+  void writeType(DartType? type, {String? name}) {
+    _sink.write(_indent);
+
+    if (name != null) {
+      _sink.write('$name: ');
+    }
+
+    if (type != null) {
+      var typeStr = _typeStr(type);
+      _writeln(typeStr);
+
+      var alias = type.alias;
+      if (alias != null) {
+        _withIndent(() {
+          _writeElement('alias', alias.element);
+          _withIndent(() {
+            _writeTypeList('typeArguments', alias.typeArguments);
+          });
+        });
+      }
+    } else {
+      _writeln('null');
+    }
+  }
+
+  void writeTypeList(String name, List<DartType>? types) {
+    if (types != null && types.isNotEmpty) {
+      _writelnWithIndent(name);
+      _withIndent(() {
+        types.forEach(writeType);
+      });
+    }
+  }
+
   /// Check that children entities of the [node] link to each other.
   void _checkChildrenEntitiesLinking(AstNode node) {
     Token? lastEnd;
@@ -1333,7 +1367,7 @@
     return '{$entriesStr}';
   }
 
-  String? _typeStr(DartType type) {
+  String _typeStr(DartType type) {
     return type.getDisplayString(withNullability: true);
   }
 
@@ -1534,24 +1568,13 @@
 
   void _writeType(String name, DartType? type) {
     if (_withResolution) {
-      if (type != null) {
-        var typeStr = _typeStr(type);
-        _writelnWithIndent('$name: $typeStr');
-      } else {
-        _writelnWithIndent('$name: null');
-      }
+      writeType(type, name: name);
     }
   }
 
   void _writeTypeList(String name, List<DartType>? types) {
-    if (types != null && types.isNotEmpty) {
-      _writelnWithIndent(name);
-      _withIndent(() {
-        for (var type in types) {
-          var typeStr = _typeStr(type);
-          _writelnWithIndent('$typeStr');
-        }
-      });
+    if (_withResolution) {
+      writeTypeList(name, types);
     }
   }
 
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 26542c5..d4e691d 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -1993,10 +1993,10 @@
           covariant U @96
             defaultType: dynamic
         supertype: C<U, T>
-          aliasElement: self::@typeAlias::A
-          aliasArguments
-            U
-            T
+          alias: self::@typeAlias::A
+            typeArguments
+              U
+              T
         constructors
           named @121
             periodOffset: 120
@@ -6412,13 +6412,13 @@
         typeParameters
           covariant X @42
             bound: void Function(X*)*
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X*
+              alias: self::@typeAlias::F
+                typeArguments
+                  X*
             defaultType: void Function(Null*)*
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                Null*
+              alias: self::@typeAlias::F
+                typeArguments
+                  Null*
         constructors
           synthetic @-1
     typeAliases
@@ -6449,13 +6449,13 @@
         typeParameters
           covariant X @42
             bound: void Function(X)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
             defaultType: void Function(Never)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                Never
+              alias: self::@typeAlias::F
+                typeArguments
+                  Never
         constructors
           synthetic @-1
     typeAliases
@@ -6486,13 +6486,13 @@
         typeParameters
           covariant X @38
             bound: X Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
             defaultType: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
         constructors
           synthetic @-1
     typeAliases
@@ -6520,13 +6520,13 @@
         typeParameters
           covariant X @39
             bound: X Function(X)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
             defaultType: dynamic Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
         constructors
           synthetic @-1
     typeAliases
@@ -6557,13 +6557,13 @@
         typeParameters
           covariant X @39
             bound: X Function(X)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
             defaultType: dynamic Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
         constructors
           synthetic @-1
     typeAliases
@@ -6704,13 +6704,13 @@
         typeParameters
           covariant X @48
             bound: List<void Function(X)>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                X
+              alias: self::@typeAlias::A
+                typeArguments
+                  X
             defaultType: List<void Function(Never)>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                Never
+              alias: self::@typeAlias::A
+                typeArguments
+                  Never
         constructors
           synthetic @-1
     typeAliases
@@ -6736,13 +6736,13 @@
         typeParameters
           covariant X @37
             bound: Map<X, int>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                X
+              alias: self::@typeAlias::A
+                typeArguments
+                  X
             defaultType: Map<dynamic, int>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                dynamic
+              alias: self::@typeAlias::A
+                typeArguments
+                  dynamic
         constructors
           synthetic @-1
     typeAliases
@@ -15396,6 +15396,7 @@
                     staticElement: self::@typeAlias::F
                     staticType: null
                   type: int Function(String)
+                    alias: self::@typeAlias::F
               rightBracket: > @44
             leftBracket: [ @45
             rightBracket: ] @46
@@ -16086,17 +16087,17 @@
         fields
           final f @71
             type: void Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
         constructors
           const @82
             parameters
               optionalNamed final this.f @90
                 type: void Function(dynamic)
-                  aliasElement: self::@typeAlias::F
-                  aliasArguments
-                    dynamic
+                  alias: self::@typeAlias::F
+                    typeArguments
+                      dynamic
                 constantInitializer
                   FunctionReference
                     function: SimpleIdentifier
@@ -16110,9 +16111,9 @@
         accessors
           synthetic get f @-1
             returnType: void Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
     typeAliases
       functionTypeAliasBased F @13
         typeParameters
@@ -16242,9 +16243,9 @@
         parameters
           optionalPositional compare @22
             type: int* Function(dynamic, dynamic)*
-              aliasElement: dart:core::@typeAlias::Comparator
-              aliasArguments
-                dynamic
+              alias: dart:core::@typeAlias::Comparator
+                typeArguments
+                  dynamic
             constantInitializer
               PrefixedIdentifier
                 prefix: SimpleIdentifier
@@ -19715,7 +19716,7 @@
         parameters
           requiredPositional f @25
             type: dynamic Function(int)
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         returnType: dynamic
 ''');
   }
@@ -19865,45 +19866,55 @@
   }
 
   test_export_hide() async {
-    addLibrary('dart:async');
-    var library =
-        await checkLibrary('export "dart:async" hide Stream, Future;');
+    testFile = convertPath('/home/test/lib/test.dart');
+    addLibrarySource('/home/test/lib/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await checkLibrary(r'''
+export 'a.dart' hide A, C;
+''');
     checkElementText(
         library,
         r'''
 library
   exports
-    dart:async
+    package:test/a.dart
       combinators
-        hide: Stream, Future
+        hide: A, C
   definingUnit
   exportScope
-    Completer: dart:async;Completer
-    FutureOr: dart:async;FutureOr
-    StreamIterator: dart:async;dart:async/stream.dart;StreamIterator
-    StreamSubscription: dart:async;dart:async/stream.dart;StreamSubscription
-    StreamTransformer: dart:async;dart:async/stream.dart;StreamTransformer
-    Timer: dart:async;Timer
+    B: package:test/a.dart;B
+    D: package:test/a.dart;D
 ''',
         withExportScope: true);
   }
 
   test_export_multiple_combinators() async {
-    addLibrary('dart:async');
-    var library =
-        await checkLibrary('export "dart:async" hide Stream show Future;');
+    testFile = convertPath('/home/test/lib/test.dart');
+    addLibrarySource('/home/test/lib/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await checkLibrary(r'''
+export 'a.dart' hide A show C;
+''');
     checkElementText(
         library,
         r'''
 library
   exports
-    dart:async
+    package:test/a.dart
       combinators
-        hide: Stream
-        show: Future
+        hide: A
+        show: C
   definingUnit
   exportScope
-    Future: dart:async;Future
+    C: package:test/a.dart;C
 ''',
         withExportScope: true);
   }
@@ -19925,21 +19936,28 @@
   }
 
   test_export_show() async {
-    addLibrary('dart:async');
-    var library =
-        await checkLibrary('export "dart:async" show Future, Stream;');
+    testFile = convertPath('/home/test/lib/test.dart');
+    addLibrarySource('/home/test/lib/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await checkLibrary(r'''
+export 'a.dart' show A, C;
+''');
     checkElementText(
         library,
         r'''
 library
   exports
-    dart:async
+    package:test/a.dart
       combinators
-        show: Future, Stream
+        show: A, C
   definingUnit
   exportScope
-    Future: dart:async;Future
-    Stream: dart:async;dart:async/stream.dart;Stream
+    A: package:test/a.dart;A
+    C: package:test/a.dart;C
 ''',
         withExportScope: true);
   }
@@ -20723,9 +20741,9 @@
         aliasedType: void Function(T) Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: void Function(T)
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
 ''');
   }
 
@@ -20745,9 +20763,9 @@
         aliasedType: void Function(T) Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: void Function(T)
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
       functionTypeAliasBased F1 @36
         typeParameters
           contravariant T @39
@@ -20820,9 +20838,9 @@
         aliasedType: T Function() Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
 ''');
   }
 
@@ -20854,9 +20872,9 @@
           parameters
             requiredPositional a @50
               type: void Function(T)
-                aliasElement: self::@typeAlias::F1
-                aliasArguments
-                  T
+                alias: self::@typeAlias::F1
+                  typeArguments
+                    T
           returnType: void
 ''');
   }
@@ -20908,9 +20926,9 @@
             requiredPositional a @41
               type: T
           returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
 ''');
   }
 
@@ -21805,9 +21823,9 @@
           parameters
             requiredPositional @-1
               type: V1 Function()
-                aliasElement: self::@typeAlias::F2
-                aliasArguments
-                  V1
+                alias: self::@typeAlias::F2
+                  typeArguments
+                    V1
           returnType: dynamic
       F2 @43
         typeParameters
@@ -22645,9 +22663,9 @@
             parameters
               requiredPositional f @65
                 type: D<V, U> Function<U>()
-                  aliasElement: self::@typeAlias::F
-                  aliasArguments
-                    V
+                  alias: self::@typeAlias::F
+                    typeArguments
+                      V
       class D @77
         typeParameters
           covariant T @79
@@ -22722,7 +22740,7 @@
             parameters
               requiredPositional f @54
                 type: D<T> Function<T>()
-                  aliasElement: self::@typeAlias::F
+                  alias: self::@typeAlias::F
       class D @66
         typeParameters
           covariant T @68
@@ -23266,31 +23284,31 @@
         fields
           v @49
             type: int Function(String)
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         constructors
           synthetic @-1
             superConstructor: self::@class::D::@constructor::•
         accessors
           synthetic get v @-1
             returnType: int Function(String)
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
           synthetic set v @-1
             parameters
               requiredPositional _v @-1
                 type: int Function(String)
-                  aliasElement: self::@typeAlias::F
+                  alias: self::@typeAlias::F
             returnType: void
       abstract class D @69
         fields
           synthetic v @-1
             type: int Function(String)
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         constructors
           synthetic @-1
         accessors
           abstract get v @79
             returnType: int Function(String)
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
     typeAliases
       functionTypeAliasBased F @12
         aliasedType: int Function(String)
@@ -23489,7 +23507,7 @@
         parameters
           requiredPositional f @37
             type: void Function(int Function(String))
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         returnType: dynamic
 ''');
   }
@@ -24533,9 +24551,9 @@
         methods
           f @31
             returnType: O Function(O)
-              aliasElement: a.dart::@typeAlias::F
-              aliasArguments
-                O
+              alias: a.dart::@typeAlias::F
+                typeArguments
+                  O
 ''');
   }
 
@@ -24562,22 +24580,22 @@
     topLevelVariables
       static f @33
         type: dynamic Function(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
+          alias: self::@typeAlias::F
+            typeArguments
+              num
     accessors
       synthetic static get f @-1
         returnType: dynamic Function(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
+          alias: self::@typeAlias::F
+            typeArguments
+              num
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function(num)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                num
+              alias: self::@typeAlias::F
+                typeArguments
+                  num
         returnType: void
 ''');
   }
@@ -24647,22 +24665,22 @@
     topLevelVariables
       static f @49
         type: S Function<S>(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
+          alias: self::@typeAlias::F
+            typeArguments
+              num
     accessors
       synthetic static get f @-1
         returnType: S Function<S>(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
+          alias: self::@typeAlias::F
+            typeArguments
+              num
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: S Function<S>(num)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                num
+              alias: self::@typeAlias::F
+                typeArguments
+                  num
         returnType: void
 ''');
   }
@@ -33398,7 +33416,7 @@
         type: E
       static f @49
         type: dynamic Function()
-          aliasElement: self::@typeAlias::F
+          alias: self::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -33416,12 +33434,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: self::@typeAlias::F
+          alias: self::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         returnType: void
 ''');
   }
@@ -33442,7 +33460,7 @@
         type: E
       static f @38
         type: dynamic Function()
-          aliasElement: self::@typeAlias::F
+          alias: self::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -33460,12 +33478,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: self::@typeAlias::F
+          alias: self::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         returnType: void
   parts
     a.dart
@@ -33586,7 +33604,7 @@
           type: E
         static f @23
           type: dynamic Function()
-            aliasElement: self::@typeAlias::F
+            alias: self::@typeAlias::F
       accessors
         synthetic static get c @-1
           returnType: C
@@ -33604,12 +33622,12 @@
           returnType: void
         synthetic static get f @-1
           returnType: dynamic Function()
-            aliasElement: self::@typeAlias::F
+            alias: self::@typeAlias::F
         synthetic static set f @-1
           parameters
             requiredPositional _f @-1
               type: dynamic Function()
-                aliasElement: self::@typeAlias::F
+                alias: self::@typeAlias::F
           returnType: void
 ''');
   }
@@ -33682,7 +33700,7 @@
           type: E
         static f @23
           type: dynamic Function()
-            aliasElement: self::@typeAlias::F
+            alias: self::@typeAlias::F
       accessors
         synthetic static get c @-1
           returnType: C
@@ -33700,12 +33718,12 @@
           returnType: void
         synthetic static get f @-1
           returnType: dynamic Function()
-            aliasElement: self::@typeAlias::F
+            alias: self::@typeAlias::F
         synthetic static set f @-1
           parameters
             requiredPositional _f @-1
               type: dynamic Function()
-                aliasElement: self::@typeAlias::F
+                alias: self::@typeAlias::F
           returnType: void
 ''');
   }
@@ -33776,7 +33794,7 @@
           type: E
         static f @60
           type: dynamic Function()
-            aliasElement: self::@typeAlias::F
+            alias: self::@typeAlias::F
       accessors
         synthetic static get c @-1
           returnType: C
@@ -33794,12 +33812,12 @@
           returnType: void
         synthetic static get f @-1
           returnType: dynamic Function()
-            aliasElement: self::@typeAlias::F
+            alias: self::@typeAlias::F
         synthetic static set f @-1
           parameters
             requiredPositional _f @-1
               type: dynamic Function()
-                aliasElement: self::@typeAlias::F
+                alias: self::@typeAlias::F
           returnType: void
 ''');
   }
@@ -33956,7 +33974,7 @@
         type: E
       static f @29
         type: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
+          alias: a.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -33974,12 +33992,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
+          alias: a.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: a.dart::@typeAlias::F
+              alias: a.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34000,7 +34018,7 @@
         type: E
       static f @29
         type: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
+          alias: b.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34018,12 +34036,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
+          alias: b.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: b.dart::@typeAlias::F
+              alias: b.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34045,7 +34063,7 @@
         type: E
       static f @29
         type: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
+          alias: c.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34063,12 +34081,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
+          alias: c.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: c.dart::@typeAlias::F
+              alias: c.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34090,7 +34108,7 @@
         type: E
       static f @31
         type: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
+          alias: c.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34108,12 +34126,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
+          alias: c.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: c.dart::@typeAlias::F
+              alias: c.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34134,7 +34152,7 @@
         type: E
       static f @31
         type: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
+          alias: b.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34152,12 +34170,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
+          alias: b.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: b.dart::@typeAlias::F
+              alias: b.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34178,7 +34196,7 @@
         type: E
       static f @29
         type: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
+          alias: a.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34196,12 +34214,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
+          alias: a.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: a.dart::@typeAlias::F
+              alias: a.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34255,7 +34273,7 @@
         type: E
       static f @31
         type: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
+          alias: b.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34273,12 +34291,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
+          alias: b.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: b.dart::@typeAlias::F
+              alias: b.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34298,7 +34316,7 @@
         type: E
       static f @29
         type: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
+          alias: a.dart::@typeAlias::F
     accessors
       synthetic static get c @-1
         returnType: C
@@ -34316,12 +34334,12 @@
         returnType: void
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
+          alias: a.dart::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: a.dart::@typeAlias::F
+              alias: a.dart::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34339,16 +34357,16 @@
     topLevelVariables
       static f @15
         type: dynamic Function()
-          aliasElement: self::@typeAlias::F
+          alias: self::@typeAlias::F
     accessors
       synthetic static get f @-1
         returnType: dynamic Function()
-          aliasElement: self::@typeAlias::F
+          alias: self::@typeAlias::F
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
+              alias: self::@typeAlias::F
         returnType: void
 ''');
   }
@@ -34375,25 +34393,25 @@
     topLevelVariables
       static f @39
         type: String Function(int)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            int
-            String
+          alias: self::@typeAlias::F
+            typeArguments
+              int
+              String
     accessors
       synthetic static get f @-1
         returnType: String Function(int)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            int
-            String
+          alias: self::@typeAlias::F
+            typeArguments
+              int
+              String
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: String Function(int)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                int
-                String
+              alias: self::@typeAlias::F
+                typeArguments
+                  int
+                  String
         returnType: void
 ''');
   }
@@ -34419,25 +34437,25 @@
     topLevelVariables
       static f @26
         type: dynamic Function(dynamic)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            dynamic
-            dynamic
+          alias: self::@typeAlias::F
+            typeArguments
+              dynamic
+              dynamic
     accessors
       synthetic static get f @-1
         returnType: dynamic Function(dynamic)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            dynamic
-            dynamic
+          alias: self::@typeAlias::F
+            typeArguments
+              dynamic
+              dynamic
       synthetic static set f @-1
         parameters
           requiredPositional _f @-1
             type: dynamic Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-                dynamic
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+                  dynamic
         returnType: void
 ''');
   }
@@ -34554,9 +34572,9 @@
         aliasedType: void Function(T) Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: void Function(T)
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
 ''');
   }
 
@@ -34619,9 +34637,9 @@
         aliasedType: T Function() Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
 ''');
   }
 
@@ -34653,9 +34671,9 @@
           parameters
             requiredPositional @-1
               type: void Function(T)
-                aliasElement: self::@typeAlias::F1
-                aliasArguments
-                  T
+                alias: self::@typeAlias::F1
+                  typeArguments
+                    T
           returnType: void
 ''');
   }
@@ -34708,7 +34726,7 @@
           parameters
             requiredPositional @-1
               type: void Function()
-                aliasElement: self::@typeAlias::F
+                alias: self::@typeAlias::F
           returnType: void
 ''');
   }
@@ -34760,9 +34778,9 @@
             requiredPositional @-1
               type: T
           returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
 ''');
   }
 
@@ -34909,24 +34927,24 @@
         fields
           f @58
             type: int Function<T>(T)
-              aliasElement: self::@typeAlias::Foo
-              aliasArguments
-                int
+              alias: self::@typeAlias::Foo
+                typeArguments
+                  int
         constructors
           synthetic @-1
         accessors
           synthetic get f @-1
             returnType: int Function<T>(T)
-              aliasElement: self::@typeAlias::Foo
-              aliasArguments
-                int
+              alias: self::@typeAlias::Foo
+                typeArguments
+                  int
           synthetic set f @-1
             parameters
               requiredPositional _f @-1
                 type: int Function<T>(T)
-                  aliasElement: self::@typeAlias::Foo
-                  aliasArguments
-                    int
+                  alias: self::@typeAlias::Foo
+                    typeArguments
+                      int
             returnType: void
     typeAliases
       Foo @8
@@ -35620,15 +35638,15 @@
         parameters
           requiredPositional a @71
             type: void Function()
-              aliasElement: self::@typeAlias::A1
+              alias: self::@typeAlias::A1
         returnType: void
       f2 @82
         parameters
           requiredPositional a @93
             type: int Function()
-              aliasElement: self::@typeAlias::A2
-              aliasArguments
-                int
+              alias: self::@typeAlias::A2
+                typeArguments
+                  int
         returnType: void
 ''');
   }
@@ -35659,16 +35677,16 @@
         parameters
           requiredPositional a @65
             type: List<int>
-              aliasElement: self::@typeAlias::A1
+              alias: self::@typeAlias::A1
         returnType: void
       f2 @76
         parameters
           requiredPositional a @95
             type: Map<int, String>
-              aliasElement: self::@typeAlias::A2
-              aliasArguments
-                int
-                String
+              alias: self::@typeAlias::A2
+                typeArguments
+                  int
+                  String
         returnType: void
 ''');
   }
@@ -35715,9 +35733,9 @@
         parameters
           requiredPositional a @33
             type: U
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                U
+              alias: self::@typeAlias::A
+                typeArguments
+                  U
         returnType: void
 ''');
   }
@@ -35759,9 +35777,9 @@
       class B @49
         interfaces
           A<int, String>
-            aliasElement: self::@typeAlias::X
-            aliasArguments
-              String
+            alias: self::@typeAlias::X
+              typeArguments
+                String
         constructors
           synthetic @-1
     typeAliases
@@ -35840,9 +35858,9 @@
         interfaces
           B
           A<int?>
-            aliasElement: self::@typeAlias::X
-            aliasArguments
-              int
+            alias: self::@typeAlias::X
+              typeArguments
+                int
           C
         constructors
           synthetic @-1
@@ -35975,7 +35993,7 @@
         supertype: Object
         mixins
           A<int>
-            aliasElement: self::@typeAlias::X
+            alias: self::@typeAlias::X
         constructors
           synthetic @-1
     typeAliases
@@ -36049,7 +36067,7 @@
         mixins
           M1
           A<int?>
-            aliasElement: self::@typeAlias::X
+            alias: self::@typeAlias::X
           M2
         constructors
           synthetic @-1
@@ -36106,7 +36124,7 @@
           synthetic @-1
       class B @40
         supertype: A<int>
-          aliasElement: self::@typeAlias::X
+          alias: self::@typeAlias::X
         constructors
           synthetic @-1
             superConstructor: ConstructorMember
@@ -36136,9 +36154,9 @@
           synthetic @-1
       class B @38
         supertype: A<int>
-          aliasElement: self::@typeAlias::X
-          aliasArguments
-            A<int>
+          alias: self::@typeAlias::X
+            typeArguments
+              A<int>
         constructors
           synthetic @-1
             superConstructor: ConstructorMember
@@ -36214,7 +36232,7 @@
           synthetic @-1
       class D @41
         supertype: A<int?>
-          aliasElement: self::@typeAlias::X
+          alias: self::@typeAlias::X
         constructors
           synthetic @-1
             superConstructor: ConstructorMember
@@ -36303,7 +36321,7 @@
         parameters
           requiredPositional a @26
             type: dynamic Function()
-              aliasElement: self::@typeAlias::A
+              alias: self::@typeAlias::A
         returnType: void
 ''');
   }
@@ -36324,7 +36342,7 @@
         parameters
           requiredPositional a @26
             type: int
-              aliasElement: self::@typeAlias::A
+              alias: self::@typeAlias::A
         returnType: void
 ''');
   }
@@ -36348,7 +36366,7 @@
         parameters
           requiredPositional a @41
             type: List<int*>*
-              aliasElement: a.dart::@typeAlias::A
+              alias: a.dart::@typeAlias::A
         returnType: void
 ''');
   }
@@ -36369,7 +36387,7 @@
         parameters
           requiredPositional a @27
             type: int?
-              aliasElement: self::@typeAlias::A
+              alias: self::@typeAlias::A
         returnType: void
 ''');
   }
@@ -36393,9 +36411,9 @@
         parameters
           requiredPositional a @45
             type: Map<int, String>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                String
+              alias: self::@typeAlias::A
+                typeArguments
+                  String
         returnType: void
 ''');
   }
@@ -36465,9 +36483,9 @@
         parameters
           requiredPositional a @49
             type: int
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                int
+              alias: self::@typeAlias::A
+                typeArguments
+                  int
         returnType: void
 ''');
   }
@@ -36497,9 +36515,9 @@
         parameters
           requiredPositional a @50
             type: int?
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                int
+              alias: self::@typeAlias::A
+                typeArguments
+                  int
         returnType: void
 ''');
   }
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index 3974511..5cc3ab8 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -4689,9 +4689,9 @@
         fields
           synthetic x @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                T
+              alias: self::@typeAlias::F
+                typeArguments
+                  T
           synthetic y @-1
             type: List<dynamic Function()>
         constructors
@@ -4699,9 +4699,9 @@
         accessors
           get x @41
             returnType: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                T
+              alias: self::@typeAlias::F
+                typeArguments
+                  T
           get y @69
             returnType: List<dynamic Function()>
       class B @89
@@ -4709,9 +4709,9 @@
         fields
           synthetic x @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                int
+              alias: self::@typeAlias::F
+                typeArguments
+                  int
           synthetic y @-1
             type: List<dynamic Function()>
         constructors
@@ -4722,9 +4722,9 @@
         accessors
           get x @114
             returnType: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                int
+              alias: self::@typeAlias::F
+                typeArguments
+                  int
           get y @131
             returnType: List<dynamic Function()>
     typeAliases
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 575cd5b..32445d5 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart' as analyzer;
 import 'package:analyzer/error/error.dart' as analyzer;
-import 'package:analyzer/exception/exception.dart' as analyzer;
 import 'package:analyzer/source/error_processor.dart' as analyzer;
 import 'package:analyzer/src/generated/engine.dart' as analyzer;
 import 'package:analyzer/src/generated/source.dart' as analyzer;
@@ -386,27 +385,18 @@
   plugin.Location? _locationForArgs(
       analyzer.CompilationUnitElement? unitElement,
       analyzer.SourceRange range) {
-    var startLine = 0;
-    var startColumn = 0;
-    var endLine = 0;
-    var endColumn = 0;
-
     if (unitElement == null) {
       return null;
     }
-    try {
-      var lineInfo = unitElement.lineInfo;
-      if (lineInfo != null) {
-        var offsetLocation = lineInfo.getLocation(range.offset);
-        startLine = offsetLocation.lineNumber;
-        startColumn = offsetLocation.columnNumber;
-        var endLocation = lineInfo.getLocation(range.offset + range.length);
-        endLine = endLocation.lineNumber;
-        endColumn = endLocation.columnNumber;
-      }
-    } on analyzer.AnalysisException {
-      // Ignore exceptions
-    }
+
+    var lineInfo = unitElement.lineInfo;
+    var offsetLocation = lineInfo.getLocation(range.offset);
+    var endLocation = lineInfo.getLocation(range.offset + range.length);
+    var startLine = offsetLocation.lineNumber;
+    var startColumn = offsetLocation.columnNumber;
+    var endLine = endLocation.lineNumber;
+    var endColumn = endLocation.columnNumber;
+
     return plugin.Location(unitElement.source.fullName, range.offset,
         range.length, startLine, startColumn,
         endLine: endLine, endColumn: endColumn);
diff --git a/pkg/front_end/analysis_options_no_lints.yaml b/pkg/front_end/analysis_options_no_lints.yaml
index 810d473..6b78932 100644
--- a/pkg/front_end/analysis_options_no_lints.yaml
+++ b/pkg/front_end/analysis_options_no_lints.yaml
@@ -14,6 +14,7 @@
     - test/language_versioning/data/**
     - test/macros/application/data/**
     - test/macros/declaration/data/**
+    - test/macros/incremental/data/**
     - test/patching/data/**
     - test/predicates/data/**
     - test/static_types/data/**
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index e876c78..d6c6a97 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -55,6 +55,8 @@
 
 import 'package:package_config/package_config.dart' show Package, PackageConfig;
 
+import '../api_prototype/compiler_options.dart' show CompilerOptions;
+
 import '../api_prototype/experimental_flags.dart';
 
 import '../api_prototype/file_system.dart' show FileSystem, FileSystemEntity;
@@ -71,6 +73,10 @@
 
 import '../base/nnbd_mode.dart';
 
+import '../base/processed_options.dart' show ProcessedOptions;
+
+import '../kernel_generator_impl.dart' show precompileMacros;
+
 import 'builder/builder.dart' show Builder;
 
 import 'builder/class_builder.dart' show ClassBuilder;
@@ -110,6 +116,8 @@
 
 import 'incremental_serializer.dart' show IncrementalSerializer;
 
+import 'kernel/macro.dart' show enableMacros, MacroClass, NeededPrecompilations;
+
 import 'scope.dart' show Scope;
 
 import 'source/source_class_builder.dart' show SourceClassBuilder;
@@ -276,6 +284,7 @@
 
       // Figure out what to keep and what to throw away.
       Set<Uri?> invalidatedUris = this._invalidatedUris.toSet();
+      _invalidatePrecompiledMacros(c.options, invalidatedUris);
       _invalidateNotKeptUserBuilders(invalidatedUris);
       ReusageResult? reusedResult = _computeReusedLibraries(
           lastGoodKernelTarget,
@@ -328,21 +337,29 @@
       // For each computeDelta call we create a new kernel target which needs
       // to be setup, and in the case of experimental invalidation some of the
       // builders needs to be patched up.
-      IncrementalKernelTarget currentKernelTarget = _setupNewKernelTarget(
-          c,
-          uriTranslator,
-          hierarchy,
-          reusedLibraries,
-          experimentalInvalidation,
-          entryPoints!.first);
-      Map<LibraryBuilder, List<LibraryBuilder>>? rebuildBodiesMap =
-          _experimentalInvalidationCreateRebuildBodiesBuilders(
-              currentKernelTarget, experimentalInvalidation, uriTranslator);
-      entryPoints = currentKernelTarget.setEntryPoints(entryPoints!);
-      await currentKernelTarget.loader.buildOutlines();
-      _experimentalInvalidationPatchUpScopes(
-          experimentalInvalidation, rebuildBodiesMap);
-      rebuildBodiesMap = null;
+      IncrementalKernelTarget currentKernelTarget;
+      while (true) {
+        currentKernelTarget = _setupNewKernelTarget(c, uriTranslator, hierarchy,
+            reusedLibraries, experimentalInvalidation, entryPoints!.first);
+        Map<LibraryBuilder, List<LibraryBuilder>>? rebuildBodiesMap =
+            _experimentalInvalidationCreateRebuildBodiesBuilders(
+                currentKernelTarget, experimentalInvalidation, uriTranslator);
+        entryPoints = currentKernelTarget.setEntryPoints(entryPoints!);
+
+        // TODO(johnniwinther,jensj): Ensure that the internal state of the
+        // incremental compiler is consistent across 1 or more macro
+        // precompilations.
+        NeededPrecompilations? neededPrecompilations =
+            await currentKernelTarget.computeNeededPrecompilations();
+        if (enableMacros &&
+            await precompileMacros(neededPrecompilations, c.options)) {
+          continue;
+        }
+        _experimentalInvalidationPatchUpScopes(
+            experimentalInvalidation, rebuildBodiesMap);
+        rebuildBodiesMap = null;
+        break;
+      }
 
       // Checkpoint: Build the actual outline.
       // Note that the [Component] is not the "full" component.
@@ -1381,6 +1398,23 @@
     }
   }
 
+  void _invalidatePrecompiledMacros(
+      ProcessedOptions processedOptions, Set<Uri?> invalidatedUris) {
+    if (invalidatedUris.isEmpty) {
+      return;
+    }
+    CompilerOptions compilerOptions = processedOptions.rawOptionsForTesting;
+    Map<MacroClass, Uri>? precompiledMacroUris =
+        compilerOptions.precompiledMacroUris;
+    if (precompiledMacroUris != null) {
+      for (MacroClass macroClass in precompiledMacroUris.keys.toList()) {
+        if (invalidatedUris.contains(macroClass.importUri)) {
+          precompiledMacroUris.remove(macroClass);
+        }
+      }
+    }
+  }
+
   /// Internal method.
   void _invalidateNotKeptUserBuilders(Set<Uri?> invalidatedUris) {
     if (_modulesToLoad != null && _userBuilders != null) {
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 146909d..c12f2a1 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -551,8 +551,8 @@
         addProblem(
             templateExperimentNotEnabled.withArguments(
                 'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-            augmentToken.next!.charOffset,
-            augmentToken.next!.length);
+            augmentToken.charOffset,
+            augmentToken.length);
         augmentToken = null;
       }
     }
@@ -835,8 +835,8 @@
         addProblem(
             templateExperimentNotEnabled.withArguments(
                 'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-            macroToken.next!.charOffset,
-            macroToken.next!.length);
+            macroToken.charOffset,
+            macroToken.length);
         macroToken = null;
       }
     }
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 07c4b09..2f6adc1 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -93,20 +93,8 @@
       kernelTarget.setEntryPoints(options.inputs);
       NeededPrecompilations? neededPrecompilations =
           await kernelTarget.computeNeededPrecompilations();
-      if (neededPrecompilations != null) {
-        if (enableMacros) {
-          // TODO(johnniwinther): Avoid using [rawOptionsForTesting] to compute
-          // the compiler options for the precompilation.
-          if (options.rawOptionsForTesting.macroTarget != null) {
-            await _compileMacros(
-                neededPrecompilations, options.rawOptionsForTesting);
-            // TODO(johnniwinther): Assert that some works has been done.
-            // TODO(johnniwinther): Stop in case of compile-time errors.
-            continue;
-          }
-        } else {
-          throw new UnsupportedError('Macro precompilation is not supported');
-        }
+      if (await precompileMacros(neededPrecompilations, options)) {
+        continue;
       }
       return _buildInternal(
           options: options,
@@ -276,6 +264,33 @@
 /// compilation below.
 Uri _defaultDir = Uri.parse('org-dartlang-macro:///a/b/c/');
 
+/// Compiles the libraries for the macro classes in [neededPrecompilations].
+///
+/// Returns `true` if macro classes were compiled and added to the
+/// [CompilerOptions.precompiledMacroUris] of the provided [options].
+///
+/// Returns `false` if no macro classes needed precompilation or if macro
+/// precompilation is not supported.
+Future<bool> precompileMacros(NeededPrecompilations? neededPrecompilations,
+    ProcessedOptions options) async {
+  if (neededPrecompilations != null) {
+    if (enableMacros) {
+      // TODO(johnniwinther): Avoid using [rawOptionsForTesting] to compute
+      // the compiler options for the precompilation.
+      if (options.rawOptionsForTesting.macroTarget != null) {
+        await _compileMacros(
+            neededPrecompilations, options.rawOptionsForTesting);
+        // TODO(johnniwinther): Assert that some works has been done.
+        // TODO(johnniwinther): Stop in case of compile-time errors.
+        return true;
+      }
+    } else {
+      throw new UnsupportedError('Macro precompilation is not supported');
+    }
+  }
+  return false;
+}
+
 Future<void> _compileMacros(NeededPrecompilations neededPrecompilations,
     CompilerOptions options) async {
   assert(options.macroSerializer != null);
@@ -305,7 +320,8 @@
   fs.entityForUri(uri).writeAsStringSync(bootstrapMacroIsolate(
       macroDeclarations, SerializationMode.byteDataClient));
 
-  precompilationOptions..fileSystem = new HybridFileSystem(fs);
+  precompilationOptions
+    ..fileSystem = new HybridFileSystem(fs, options.fileSystem);
   CompilerResult? compilerResult =
       await kernelForProgramInternal(uri, precompilationOptions);
   Uri precompiledUri = await options.macroSerializer!
diff --git a/pkg/front_end/lib/src/testing/compiler_common.dart b/pkg/front_end/lib/src/testing/compiler_common.dart
index 407f814..f8cebf7 100644
--- a/pkg/front_end/lib/src/testing/compiler_common.dart
+++ b/pkg/front_end/lib/src/testing/compiler_common.dart
@@ -86,7 +86,7 @@
 ///   * specify the location of the sdk summaries.
 Future<Null> setup(CompilerOptions options, Map<String, dynamic> sources,
     {List<String> additionalDills: const []}) async {
-  MemoryFileSystem fs = new MemoryFileSystem(_defaultDir);
+  MemoryFileSystem fs = createMemoryFileSystem();
   sources.forEach((name, data) {
     MemoryFileSystemEntity entity = fs.entityForUri(toTestUri(name));
     if (data is String) {
@@ -114,6 +114,8 @@
   }
 }
 
+MemoryFileSystem createMemoryFileSystem() => new MemoryFileSystem(_defaultDir);
+
 const String _testUriScheme = 'org-dartlang-test';
 
 bool isTestUri(Uri uri) => uri.isScheme(_testUriScheme);
diff --git a/pkg/front_end/test/macros/incremental/data/package_config.json b/pkg/front_end/test/macros/incremental/data/package_config.json
new file mode 100644
index 0000000..2e8365d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/package_config.json
@@ -0,0 +1,18 @@
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "macro",
+      "rootUri": "pkgs/macro/lib/"
+    },
+    {
+      "name": "meta",
+      "rootUri": "../../../../../meta/",
+      "packageUri": "lib/"
+    },
+    {
+      "name": "_fe_analyzer_shared",
+      "rootUri": "../../../../../_fe_analyzer_shared/lib/"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macros/incremental/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macros/incremental/data/pkgs/macro/lib/macro.dart
new file mode 100644
index 0000000..dcfe2f7
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/pkgs/macro/lib/macro.dart
@@ -0,0 +1,39 @@
+// 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 'dart:async';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro
+
+class ToStringMacro implements ClassDeclarationsMacro {
+  const ToStringMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    if (!methods.any((m) => m.identifier.name == 'toString')) {
+      Iterable<FieldDeclaration> fields = await builder.fieldsOf(clazz);
+      Uri dartCore = Uri.parse('dart:core');
+      Identifier stringClass =
+          await builder.resolveIdentifier(dartCore, 'String');
+      List<Object> parts = [stringClass, '''
+ toString() {
+    return "${clazz.identifier.name}('''
+      ];
+      String comma = '';
+      for (FieldDeclaration field in fields) {
+        parts.add(comma);
+        parts.add('${field.identifier.name}=\${');
+        parts.add(field.identifier.name);
+        parts.add('}');
+        comma = ',';
+      }
+      parts.add(''')";
+  }''');
+      builder.declareInClass(new DeclarationCode.fromParts(parts));
+    }
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart
new file mode 100644
index 0000000..40eda1a
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart
@@ -0,0 +1,11 @@
+// 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:macro/macro.dart';
+
+class DataClass {
+  final String string;
+
+  DataClass({required this.string});
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart.expect
new file mode 100644
index 0000000..4b63cfd
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+class DataClass extends core::Object {
+  final field core::String string;
+  constructor •({required core::String string = #C1}) → self::DataClass
+    : self::DataClass::string = string, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart
new file mode 100644
index 0000000..75ac97b
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart
@@ -0,0 +1,12 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class DataClass {
+  final String string;
+
+  DataClass({required this.string});
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart.expect
new file mode 100644
index 0000000..401567c
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class DataClass extends core::Object {
+  final field core::String string;
+  constructor •({required core::String string = #C2}) → self::DataClass
+    : self::DataClass::string = string, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/data_class.dart-0 */ toString() → core::String {
+    return "DataClass(string=${this.{self::DataClass::string}{core::String}})";
+  }
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+  #C2 = null
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart
new file mode 100644
index 0000000..7ae60b6
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart
@@ -0,0 +1,13 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class DataClass {
+  final String string;
+  final int integer;
+
+  DataClass({required this.string, required this.integer});
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart.expect
new file mode 100644
index 0000000..bf0544d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class DataClass extends core::Object {
+  final field core::String string;
+  final field core::int integer;
+  constructor •({required core::String string = #C2, required core::int integer = #C2}) → self::DataClass
+    : self::DataClass::string = string, self::DataClass::integer = integer, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/data_class.dart-0 */ toString() → core::String {
+    return "DataClass(string=${this.{self::DataClass::string}{core::String}},integer=${this.{self::DataClass::integer}{core::int}})";
+  }
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+  #C2 = null
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart
new file mode 100644
index 0000000..87a023f
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart
@@ -0,0 +1,14 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class Class {
+  final int field;
+
+  Class(this.field);
+
+  void method() {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart.expect
new file mode 100644
index 0000000..469fe1a
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  final field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/in_body_change.dart-0 */ toString() → core::String {
+    return "Class(field=${this.{self::Class::field}{core::int}})";
+  }
+  method method() → void {}
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart
new file mode 100644
index 0000000..0b1a729
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart
@@ -0,0 +1,16 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class Class {
+  final int field;
+
+  Class(this.field);
+
+  void method() {
+    print('method');
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart.expect
new file mode 100644
index 0000000..f95a86f
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  final field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/in_body_change.dart-0 */ toString() → core::String {
+    return "Class(field=${this.{self::Class::field}{core::int}})";
+  }
+  method method() → void {
+    core::print("method");
+  }
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.0.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.0.dart
new file mode 100644
index 0000000..73a3a2d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.0.dart
@@ -0,0 +1,16 @@
+// 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 'dart:async';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro
+
+class MethodMacro implements ClassDeclarationsMacro {
+  const MethodMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.1.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.1.dart
new file mode 100644
index 0000000..0129964
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.1.dart
@@ -0,0 +1,20 @@
+// 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 'dart:async';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro
+
+class MethodMacro implements ClassDeclarationsMacro {
+  const MethodMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    builder.declareInClass(new DeclarationCode.fromString('''
+  void method() {}
+'''));
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart
new file mode 100644
index 0000000..9e7e582
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart
@@ -0,0 +1,8 @@
+// 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 'macro.dart';
+
+@MethodMacro()
+class Class {}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart.expect
new file mode 100644
index 0000000..3b13cdd
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "macro.dart" as mac;
+import "dart:core" as core;
+
+import "org-dartlang-test:///a/b/c/user_macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mac;
+import "dart:core" as core;
+import "package:_fe_analyzer_shared/src/macros/api.dart" as api;
+
+import "dart:async";
+import "package:_fe_analyzer_shared/src/macros/api.dart";
+
+macro class MethodMacro extends core::Object implements api::ClassDeclarationsMacro /*hasConstConstructor*/  {
+  const constructor •() → mac::MethodMacro
+    : super core::Object::•()
+    ;
+  @#C2
+  method buildDeclarationsForClass(api::ClassDeclaration clazz, api::ClassMemberDeclarationBuilder builder) → FutureOr<void> async {}
+}
+
+constants  {
+  #C1 = mac::MethodMacro {}
+  #C2 = dart.core::_Override {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.1.dart.expect
new file mode 100644
index 0000000..9a9c376
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.1.dart.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "macro.dart" as mac;
+import "dart:core" as core;
+
+import "org-dartlang-test:///a/b/c/user_macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/user_macro/main.dart-0 */ method() → void {}
+}
+
+library /*isNonNullableByDefault*/;
+import self as mac;
+import "dart:core" as core;
+import "package:_fe_analyzer_shared/src/macros/api.dart" as api;
+
+import "dart:async";
+import "package:_fe_analyzer_shared/src/macros/api.dart";
+
+macro class MethodMacro extends core::Object implements api::ClassDeclarationsMacro /*hasConstConstructor*/  {
+  const constructor •() → mac::MethodMacro
+    : super core::Object::•()
+    ;
+  @#C2
+  method buildDeclarationsForClass(api::ClassDeclaration clazz, api::ClassMemberDeclarationBuilder builder) → FutureOr<void> async {
+    builder.{api::ClassMemberDeclarationBuilder::declareInClass}(new api::DeclarationCode::fromString("  void method() {}\n")){(api::DeclarationCode) → void};
+  }
+}
+
+constants  {
+  #C1 = mac::MethodMacro {}
+  #C2 = dart.core::_Override {}
+}
diff --git a/pkg/front_end/test/macros/incremental/incremental_macro_test.dart b/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
new file mode 100644
index 0000000..e6fd95e
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
@@ -0,0 +1,174 @@
+// 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 'dart:io';
+
+import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
+    as isolatedExecutor;
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
+import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
+import 'package:front_end/src/base/processed_options.dart';
+import 'package:front_end/src/compute_platform_binaries_location.dart';
+import 'package:front_end/src/fasta/compiler_context.dart';
+import 'package:front_end/src/fasta/hybrid_file_system.dart';
+import 'package:front_end/src/fasta/incremental_compiler.dart';
+import 'package:front_end/src/fasta/kernel/macro.dart';
+import 'package:front_end/src/isolate_macro_serializer.dart';
+import 'package:front_end/src/macro_serializer.dart';
+import 'package:front_end/src/testing/compiler_common.dart';
+import 'package:kernel/ast.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/text/ast_to_text.dart';
+import 'package:vm/target/vm.dart';
+
+import '../../utils/kernel_chain.dart';
+
+Future<void> main(List<String> args) async {
+  Map<String, Test> tests = {};
+  Map<String, Map<Uri, Map<int, String>>> testData = {};
+  Directory dataDir =
+      new Directory.fromUri(Platform.script.resolve('data/tests'));
+
+  void addFile(Test? test, FileSystemEntity file, String fileName) {
+    if (file is! File || !fileName.endsWith('.dart')) {
+      return;
+    }
+    String testFileName = fileName.substring(0, fileName.length - 5);
+    int dotIndex = testFileName.lastIndexOf('.');
+    int index = 1;
+    if (dotIndex != -1) {
+      index = int.parse(testFileName.substring(dotIndex + 1));
+      testFileName = testFileName.substring(0, dotIndex);
+    }
+    String testName = testFileName;
+    testFileName += '.dart';
+    Uri uri = toTestUri(testFileName);
+    test ??= new Test(testName, uri);
+    tests[test.name] ??= test;
+    Map<Uri, Map<int, String>> updates = testData[test.name] ??= {};
+    (updates[uri] ??= {})[index] = file.readAsStringSync();
+  }
+
+  for (FileSystemEntity file in dataDir.listSync()) {
+    String fileName = file.uri.pathSegments.last;
+    if (file is Directory) {
+      Directory dir = file;
+      // Note that the last segment of a directory uri is the empty string!
+      String dirName = dir.uri.pathSegments[dir.uri.pathSegments.length - 2];
+      Test test = new Test('$dirName/main', toTestUri('$dirName/main.dart'));
+      for (FileSystemEntity file in dir.listSync()) {
+        addFile(test, file, '$dirName/${file.uri.pathSegments.last}');
+      }
+    } else {
+      addFile(null, file, fileName);
+    }
+  }
+
+  testData.forEach((String testName, Map<Uri, Map<int, String>> files) {
+    Test test = tests[testName]!;
+    Map<int, Map<Uri, String>> updatesMap = {};
+    files.forEach((Uri uri, Map<int, String> updates) {
+      test.uris.add(uri);
+      updates.forEach((int index, String source) {
+        (updatesMap[index] ??= {})[uri] = source;
+      });
+    });
+    for (int index in updatesMap.keys.toList()..sort()) {
+      test.updates.add(new TestUpdate(index, updatesMap[index]!));
+    }
+  });
+
+  args = args.toList();
+  bool generateExpectations = args.remove('-g');
+  enableMacros = true;
+  MacroSerializer macroSerializer = new IsolateMacroSerializer();
+  MemoryFileSystem memoryFileSystem = createMemoryFileSystem();
+  CompilerOptions compilerOptions = new CompilerOptions()
+    ..sdkRoot = computePlatformBinariesLocation(forceBuildDir: true)
+    ..packagesFileUri = Platform.script.resolve('data/package_config.json')
+    ..explicitExperimentalFlags = {ExperimentalFlag.macros: true}
+    ..macroSerializer = macroSerializer
+    ..precompiledMacroUris = {}
+    ..macroExecutorProvider = () async {
+      return await isolatedExecutor.start(SerializationMode.byteDataServer);
+    }
+    ..macroTarget = new VmTarget(new TargetFlags())
+    ..fileSystem = new HybridFileSystem(memoryFileSystem);
+
+  ProcessedOptions processedOptions =
+      new ProcessedOptions(options: compilerOptions);
+
+  await CompilerContext.runWithOptions(processedOptions,
+      (CompilerContext context) async {
+    IncrementalCompiler compiler = new IncrementalCompiler(context);
+    for (Test test in tests.values) {
+      if (args.isNotEmpty && !args.contains(test.name)) {
+        print('Skipped ${test.name}');
+        continue;
+      }
+      Uri entryPoint = test.entryPoint;
+      for (TestUpdate update in test.updates) {
+        print('Running ${test.name} update ${update.index}');
+        update.files.forEach((Uri uri, String source) {
+          memoryFileSystem.entityForUri(uri).writeAsStringSync(source);
+          compiler.invalidate(uri);
+        });
+        IncrementalCompilerResult incrementalCompilerResult =
+            await compiler.computeDelta(entryPoints: [entryPoint]);
+        Component component = incrementalCompilerResult.component;
+        StringBuffer buffer = new StringBuffer();
+        Printer printer = new Printer(buffer)
+          ..writeProblemsAsJson(
+              "Problems in component", component.problemsAsJson);
+        component.libraries.forEach((Library library) {
+          if (test.uris.contains(library.importUri)) {
+            printer.writeLibraryFile(library);
+            printer.endLine();
+          }
+        });
+        printer.writeConstantTable(component);
+        String actual = buffer.toString();
+        String expectationFileName = '${test.name}.${update.index}.dart.expect';
+        Uri expectedUri = dataDir.uri.resolve(expectationFileName);
+        File expectationFile = new File.fromUri(expectedUri);
+        if (expectationFile.existsSync()) {
+          String expected = expectationFile.readAsStringSync();
+          if (expected != actual) {
+            if (generateExpectations) {
+              expectationFile.writeAsStringSync(actual);
+            } else {
+              String diff = await runDiff(expectedUri, actual);
+              throw "${expectationFileName} don't match ${expectedUri}\n$diff";
+            }
+          }
+        } else if (generateExpectations) {
+          expectationFile.writeAsStringSync(actual);
+        } else {
+          throw 'Please use -g option to create file ${expectationFileName} '
+              'with this content:\n$actual';
+        }
+      }
+    }
+  }, errorOnMissingInput: false);
+  await macroSerializer.close();
+}
+
+class Test {
+  final String name;
+  final Uri entryPoint;
+  final Set<Uri> uris = {};
+  final List<TestUpdate> updates = [];
+
+  Test(this.name, this.entryPoint);
+}
+
+class TestUpdate {
+  final int index;
+  final Map<Uri, String> files;
+
+  TestUpdate(this.index, this.files);
+}
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
index ce6b7bb..11f0500 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
 // pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
index ce6b7bb..11f0500 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
 // pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
index 614ee32..96f69a5 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
 // pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
index 7f71bca..248efad 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
 // pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
 // Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 38037dc..0b67866 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -468,6 +468,7 @@
       "test/language_versioning/data/",
       "test/macros/application/data/",
       "test/macros/declaration/data/",
+      "test/macros/incremental/data/",
       "test/patching/data",
       "test/predicates/data",
       "test/static_types/data/",
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index afb9bd9..4326006 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -48,7 +48,7 @@
     var path = unitElement.source.fullName;
     var offset = element.nameOffset;
 
-    var location = unitElement.lineInfo!.getLocation(offset);
+    var location = unitElement.lineInfo.getLocation(offset);
     return CodeReference(path, offset, location.lineNumber,
         location.columnNumber, _computeElementFullName(element));
   }
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index 52ee6d0..a5a8f8b 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,6 +1,7 @@
 # Changelog
 
 ## 8.2.1
+- Changed type of `UriList.uris` from `dynamic` to `List<String?>?`.
 - Remove `example/vm_service_asserts.dart'
 
 ## 8.2.0
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index f22ff9d..b8b3cb6 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -8119,15 +8119,14 @@
       json == null ? null : UriList._fromJson(json);
 
   /// A list of URIs.
-  List<dynamic>? uris;
+  List<String?>? uris;
 
   UriList({
     required this.uris,
   });
 
   UriList._fromJson(Map<String, dynamic> json) : super._fromJson(json) {
-    uris = List<dynamic>.from(
-        createServiceObject(json['uris'], const ['dynamic']) as List? ?? []);
+    uris = List<String?>.from(json['uris']);
   }
 
   @override
@@ -8138,7 +8137,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'uris': uris?.map((f) => f.toJson()).toList(),
+      'uris': uris?.map((f) => f).toList(),
     });
     return json;
   }
diff --git a/pkg/vm_service/test/serialization_smoke_tests/uri_list_smoke_test.dart b/pkg/vm_service/test/serialization_smoke_tests/uri_list_smoke_test.dart
new file mode 100644
index 0000000..b5c514f
--- /dev/null
+++ b/pkg/vm_service/test/serialization_smoke_tests/uri_list_smoke_test.dart
@@ -0,0 +1,40 @@
+// 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:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+// Regression test for https://github.com/dart-lang/sdk/issues/48521.
+
+void main() {
+  const expectedUris = <String?>[
+    'file:///a/b/c',
+    'dart:io',
+    'package:foo/bar.dart',
+    null,
+  ];
+
+  test('UriList serialization', () {
+    final uriList = UriList(uris: expectedUris);
+    final serialized = uriList.toJson();
+    expect(serialized['type'], 'UriList');
+    expect(serialized['uris'], isA<List>());
+    final uris = serialized['uris'].cast<String?>();
+    expect(uris.length, 4);
+    for (int i = 0; i < uris.length; ++i) {
+      expect(expectedUris[i], uris[i]);
+    }
+  });
+
+  test('UriList deserialization', () {
+    final json = <String, dynamic>{
+      'type': 'UriList',
+      'uris': expectedUris,
+    };
+
+    final uriList = UriList.parse(json);
+    expect(uriList, isNotNull);
+    expect(uriList!.uris, expectedUris);
+  });
+}
diff --git a/pkg/vm_service/test/uri_mappings_lookup_test.dart b/pkg/vm_service/test/uri_mappings_lookup_test.dart
index 0155833..accc20c 100644
--- a/pkg/vm_service/test/uri_mappings_lookup_test.dart
+++ b/pkg/vm_service/test/uri_mappings_lookup_test.dart
@@ -35,7 +35,7 @@
     result = await service.lookupPackageUris(
       isolateId,
       [
-        ...uris.sublist(0, 3),
+        ...uris.sublist(0, 3).cast<String>(),
         'does_not_exist.dart',
       ],
     );
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index c907438..e15328c 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -1091,16 +1091,30 @@
     // foo|bar[]|baz
     // (@Instance|Sentinel)[]
     bool loop = true;
+    bool nullable = false;
     this.isReturnType = isReturnType;
 
+    final unionTypes = <String>[];
     while (loop) {
       if (parser.consume('(')) {
         while (parser.peek()!.text != ')') {
-          // @Instance | Sentinel
-          parser.advance();
+          if (parser.consume('Null')) {
+            nullable = true;
+          } else {
+            // @Instance | Sentinel
+            final token = parser.advance()!;
+            if (token.isName) {
+              unionTypes.add(_coerceRefType(token.text)!);
+            }
+          }
         }
         parser.consume(')');
-        TypeRef ref = TypeRef('dynamic');
+        TypeRef ref;
+        if (unionTypes.length == 1) {
+          ref = TypeRef(unionTypes.first)..nullable = nullable;
+        } else {
+          ref = TypeRef('dynamic');
+        }
         while (parser.consume('[')) {
           parser.expect(']');
           ref.arrayDepth++;
@@ -1148,15 +1162,16 @@
 class TypeRef {
   String? name;
   int arrayDepth = 0;
+  bool nullable = false;
   List<TypeRef>? genericTypes;
 
   TypeRef(this.name);
 
   String get ref {
     if (arrayDepth == 2) {
-      return 'List<List<${name}>>';
+      return 'List<List<${name}${nullable ? "?" : ""}>>';
     } else if (arrayDepth == 1) {
-      return 'List<${name}>';
+      return 'List<${name}${nullable ? "?" : ""}>';
     } else if (genericTypes != null) {
       return '$name<${genericTypes!.join(', ')}>';
     } else {
@@ -1168,13 +1183,15 @@
     assert(arrayDepth == 1);
 
     if (isListTypeSimple) {
-      return 'List<$name>';
+      return 'List<$name${nullable ? "?" : ""}>';
     } else {
       return 'List<String>';
     }
   }
 
-  String? get listTypeArg => arrayDepth == 2 ? 'List<$name>' : name;
+  String? get listTypeArg => arrayDepth == 2
+      ? 'List<$name${nullable ? "?" : ""}>'
+      : '$name${nullable ? "?" : ""}';
 
   bool get isArray => arrayDepth > 0;
 
diff --git a/tests/web/regress/if_method_call_test.dart b/tests/web/if_method_call_test.dart
similarity index 100%
rename from tests/web/regress/if_method_call_test.dart
rename to tests/web/if_method_call_test.dart
diff --git a/tests/web/10216a_test.dart b/tests/web/regress/issue/10216a_test.dart
similarity index 100%
rename from tests/web/10216a_test.dart
rename to tests/web/regress/issue/10216a_test.dart
diff --git a/tests/web/10216b_test.dart b/tests/web/regress/issue/10216b_test.dart
similarity index 100%
rename from tests/web/10216b_test.dart
rename to tests/web/regress/issue/10216b_test.dart
diff --git a/tests/web/11673_test.dart b/tests/web/regress/issue/11673_test.dart
similarity index 100%
rename from tests/web/11673_test.dart
rename to tests/web/regress/issue/11673_test.dart
diff --git a/tests/web/12320_test.dart b/tests/web/regress/issue/12320_test.dart
similarity index 100%
rename from tests/web/12320_test.dart
rename to tests/web/regress/issue/12320_test.dart
diff --git a/tests/web/12_test.dart b/tests/web/regress/issue/12_test.dart
similarity index 100%
rename from tests/web/12_test.dart
rename to tests/web/regress/issue/12_test.dart
diff --git a/tests/web/16400_test.dart b/tests/web/regress/issue/16400_test.dart
similarity index 100%
rename from tests/web/16400_test.dart
rename to tests/web/regress/issue/16400_test.dart
diff --git a/tests/web/16407_test.dart b/tests/web/regress/issue/16407_test.dart
similarity index 100%
rename from tests/web/16407_test.dart
rename to tests/web/regress/issue/16407_test.dart
diff --git a/tests/web/16967_test.dart b/tests/web/regress/issue/16967_test.dart
similarity index 100%
rename from tests/web/16967_test.dart
rename to tests/web/regress/issue/16967_test.dart
diff --git a/tests/web/17094_test.dart b/tests/web/regress/issue/17094_test.dart
similarity index 100%
rename from tests/web/17094_test.dart
rename to tests/web/regress/issue/17094_test.dart
diff --git a/tests/web/17645_test.dart b/tests/web/regress/issue/17645_test.dart
similarity index 100%
rename from tests/web/17645_test.dart
rename to tests/web/regress/issue/17645_test.dart
diff --git a/tests/web/17856_test.dart b/tests/web/regress/issue/17856_test.dart
similarity index 100%
rename from tests/web/17856_test.dart
rename to tests/web/regress/issue/17856_test.dart
diff --git a/tests/web/18175_test.dart b/tests/web/regress/issue/18175_test.dart
similarity index 100%
rename from tests/web/18175_test.dart
rename to tests/web/regress/issue/18175_test.dart
diff --git a/tests/web/18383_test.dart b/tests/web/regress/issue/18383_test.dart
similarity index 100%
rename from tests/web/18383_test.dart
rename to tests/web/regress/issue/18383_test.dart
diff --git a/tests/web/regress/190814734a_test.dart b/tests/web/regress/issue/190814734a_test.dart
similarity index 100%
rename from tests/web/regress/190814734a_test.dart
rename to tests/web/regress/issue/190814734a_test.dart
diff --git a/tests/web/regress/190814734b_test.dart b/tests/web/regress/issue/190814734b_test.dart
similarity index 100%
rename from tests/web/regress/190814734b_test.dart
rename to tests/web/regress/issue/190814734b_test.dart
diff --git a/tests/web/19191_test.dart b/tests/web/regress/issue/19191_test.dart
similarity index 100%
rename from tests/web/19191_test.dart
rename to tests/web/regress/issue/19191_test.dart
diff --git a/tests/web/regress/192964907a_test.dart b/tests/web/regress/issue/192964907a_test.dart
similarity index 100%
rename from tests/web/regress/192964907a_test.dart
rename to tests/web/regress/issue/192964907a_test.dart
diff --git a/tests/web/regress/192964907b_test.dart b/tests/web/regress/issue/192964907b_test.dart
similarity index 100%
rename from tests/web/regress/192964907b_test.dart
rename to tests/web/regress/issue/192964907b_test.dart
diff --git a/tests/web/21351_test.dart b/tests/web/regress/issue/21351_test.dart
similarity index 100%
rename from tests/web/21351_test.dart
rename to tests/web/regress/issue/21351_test.dart
diff --git a/tests/web/21579_test.dart b/tests/web/regress/issue/21579_test.dart
similarity index 100%
rename from tests/web/21579_test.dart
rename to tests/web/regress/issue/21579_test.dart
diff --git a/tests/web/22487_test.dart b/tests/web/regress/issue/22487_test.dart
similarity index 100%
rename from tests/web/22487_test.dart
rename to tests/web/regress/issue/22487_test.dart
diff --git a/tests/web/22776_test.dart b/tests/web/regress/issue/22776_test.dart
similarity index 100%
rename from tests/web/22776_test.dart
rename to tests/web/regress/issue/22776_test.dart
diff --git a/tests/web/22868_test.dart b/tests/web/regress/issue/22868_test.dart
similarity index 100%
rename from tests/web/22868_test.dart
rename to tests/web/regress/issue/22868_test.dart
diff --git a/tests/web/22917_test.dart b/tests/web/regress/issue/22917_test.dart
similarity index 100%
rename from tests/web/22917_test.dart
rename to tests/web/regress/issue/22917_test.dart
diff --git a/tests/web/23404_test.dart b/tests/web/regress/issue/23404_test.dart
similarity index 100%
rename from tests/web/23404_test.dart
rename to tests/web/regress/issue/23404_test.dart
diff --git a/tests/web/23432_test.dart b/tests/web/regress/issue/23432_test.dart
similarity index 100%
rename from tests/web/23432_test.dart
rename to tests/web/regress/issue/23432_test.dart
diff --git a/tests/web/23486_helper.dart b/tests/web/regress/issue/23486_helper.dart
similarity index 100%
rename from tests/web/23486_helper.dart
rename to tests/web/regress/issue/23486_helper.dart
diff --git a/tests/web/23486_test.dart b/tests/web/regress/issue/23486_test.dart
similarity index 100%
rename from tests/web/23486_test.dart
rename to tests/web/regress/issue/23486_test.dart
diff --git a/tests/web/23804_test.dart b/tests/web/regress/issue/23804_test.dart
similarity index 100%
rename from tests/web/23804_test.dart
rename to tests/web/regress/issue/23804_test.dart
diff --git a/tests/web/23828_test.dart b/tests/web/regress/issue/23828_test.dart
similarity index 100%
rename from tests/web/23828_test.dart
rename to tests/web/regress/issue/23828_test.dart
diff --git a/tests/web/26243_test.dart b/tests/web/regress/issue/26243_test.dart
similarity index 100%
rename from tests/web/26243_test.dart
rename to tests/web/regress/issue/26243_test.dart
diff --git a/tests/web/27198_test.dart b/tests/web/regress/issue/27198_test.dart
similarity index 100%
rename from tests/web/27198_test.dart
rename to tests/web/regress/issue/27198_test.dart
diff --git a/tests/web/27199_test.dart b/tests/web/regress/issue/27199_test.dart
similarity index 100%
rename from tests/web/27199_test.dart
rename to tests/web/regress/issue/27199_test.dart
diff --git a/tests/web/27323_test.dart b/tests/web/regress/issue/27323_test.dart
similarity index 100%
rename from tests/web/27323_test.dart
rename to tests/web/regress/issue/27323_test.dart
diff --git a/tests/web/27354_test.dart b/tests/web/regress/issue/27354_test.dart
similarity index 100%
rename from tests/web/27354_test.dart
rename to tests/web/regress/issue/27354_test.dart
diff --git a/tests/web/28749_test.dart b/tests/web/regress/issue/28749_test.dart
similarity index 100%
rename from tests/web/28749_test.dart
rename to tests/web/regress/issue/28749_test.dart
diff --git a/tests/web/28919_test.dart b/tests/web/regress/issue/28919_test.dart
similarity index 100%
rename from tests/web/28919_test.dart
rename to tests/web/regress/issue/28919_test.dart
diff --git a/tests/web/29130_test.dart b/tests/web/regress/issue/29130_test.dart
similarity index 100%
rename from tests/web/29130_test.dart
rename to tests/web/regress/issue/29130_test.dart
diff --git a/tests/web/regression_2913_test.dart b/tests/web/regress/issue/2913_test.dart
similarity index 100%
rename from tests/web/regression_2913_test.dart
rename to tests/web/regress/issue/2913_test.dart
diff --git a/tests/web/31803_test.dart b/tests/web/regress/issue/31803_test.dart
similarity index 100%
rename from tests/web/31803_test.dart
rename to tests/web/regress/issue/31803_test.dart
diff --git a/tests/web/regress_32069_test.dart b/tests/web/regress/issue/32069_test.dart
similarity index 100%
rename from tests/web/regress_32069_test.dart
rename to tests/web/regress/issue/32069_test.dart
diff --git a/tests/web/32770a_test.dart b/tests/web/regress/issue/32770a_test.dart
similarity index 100%
rename from tests/web/32770a_test.dart
rename to tests/web/regress/issue/32770a_test.dart
diff --git a/tests/web/32770b_test.dart b/tests/web/regress/issue/32770b_test.dart
similarity index 100%
rename from tests/web/32770b_test.dart
rename to tests/web/regress/issue/32770b_test.dart
diff --git a/tests/web/32770c_test.dart b/tests/web/regress/issue/32770c_test.dart
similarity index 100%
rename from tests/web/32770c_test.dart
rename to tests/web/regress/issue/32770c_test.dart
diff --git a/tests/web/32774_test.dart b/tests/web/regress/issue/32774_test.dart
similarity index 100%
rename from tests/web/32774_test.dart
rename to tests/web/regress/issue/32774_test.dart
diff --git a/tests/web/32828_test.dart b/tests/web/regress/issue/32828_test.dart
similarity index 100%
rename from tests/web/32828_test.dart
rename to tests/web/regress/issue/32828_test.dart
diff --git a/tests/web/32853_test.dart b/tests/web/regress/issue/32853_test.dart
similarity index 99%
rename from tests/web/32853_test.dart
rename to tests/web/regress/issue/32853_test.dart
index ccf8dab..8c32ce6 100644
--- a/tests/web/32853_test.dart
+++ b/tests/web/regress/issue/32853_test.dart
@@ -6,10 +6,9 @@
 
 // Regression test for issue 32853.
 
-
 int foo<T extends Comparable<T>>(T a, T b) => a.compareTo(b);
 
 main() {
   int Function<T extends Comparable<T>>(T, T) f = foo;
   print(f<num>(1, 2));
-}
\ No newline at end of file
+}
diff --git a/tests/web/32928_test.dart b/tests/web/regress/issue/32928_test.dart
similarity index 100%
rename from tests/web/32928_test.dart
rename to tests/web/regress/issue/32928_test.dart
diff --git a/tests/web/32969_test.dart b/tests/web/regress/issue/32969_test.dart
similarity index 100%
rename from tests/web/32969_test.dart
rename to tests/web/regress/issue/32969_test.dart
diff --git a/tests/web/32997a_lib.dart b/tests/web/regress/issue/32997a_lib.dart
similarity index 100%
rename from tests/web/32997a_lib.dart
rename to tests/web/regress/issue/32997a_lib.dart
diff --git a/tests/web/32997a_test.dart b/tests/web/regress/issue/32997a_test.dart
similarity index 100%
rename from tests/web/32997a_test.dart
rename to tests/web/regress/issue/32997a_test.dart
diff --git a/tests/web/32997b_lib.dart b/tests/web/regress/issue/32997b_lib.dart
similarity index 100%
rename from tests/web/32997b_lib.dart
rename to tests/web/regress/issue/32997b_lib.dart
diff --git a/tests/web/32997b_test.dart b/tests/web/regress/issue/32997b_test.dart
similarity index 100%
rename from tests/web/32997b_test.dart
rename to tests/web/regress/issue/32997b_test.dart
diff --git a/tests/web/33296_test.dart b/tests/web/regress/issue/33296_test.dart
similarity index 100%
rename from tests/web/33296_test.dart
rename to tests/web/regress/issue/33296_test.dart
diff --git a/tests/web/33572_test.dart b/tests/web/regress/issue/33572_test.dart
similarity index 100%
rename from tests/web/33572_test.dart
rename to tests/web/regress/issue/33572_test.dart
diff --git a/tests/web/33_test.dart b/tests/web/regress/issue/33_test.dart
similarity index 100%
rename from tests/web/33_test.dart
rename to tests/web/regress/issue/33_test.dart
diff --git a/tests/web/34156_test.dart b/tests/web/regress/issue/34156_test.dart
similarity index 100%
rename from tests/web/34156_test.dart
rename to tests/web/regress/issue/34156_test.dart
diff --git a/tests/web/34701_test.dart b/tests/web/regress/issue/34701_test.dart
similarity index 100%
rename from tests/web/34701_test.dart
rename to tests/web/regress/issue/34701_test.dart
diff --git a/tests/web/35341_test.dart b/tests/web/regress/issue/35341_test.dart
similarity index 100%
rename from tests/web/35341_test.dart
rename to tests/web/regress/issue/35341_test.dart
diff --git a/tests/web/35356_test.dart b/tests/web/regress/issue/35356_test.dart
similarity index 100%
rename from tests/web/35356_test.dart
rename to tests/web/regress/issue/35356_test.dart
diff --git a/tests/web/35853_test.dart b/tests/web/regress/issue/35853_test.dart
similarity index 100%
rename from tests/web/35853_test.dart
rename to tests/web/regress/issue/35853_test.dart
diff --git a/tests/web/35965a_test.dart b/tests/web/regress/issue/35965a_test.dart
similarity index 100%
rename from tests/web/35965a_test.dart
rename to tests/web/regress/issue/35965a_test.dart
diff --git a/tests/web/regress_36222_test.dart b/tests/web/regress/issue/36222_test.dart
similarity index 100%
rename from tests/web/regress_36222_test.dart
rename to tests/web/regress/issue/36222_test.dart
diff --git a/tests/web/issue36562_test.dart b/tests/web/regress/issue/36562_test.dart
similarity index 100%
rename from tests/web/issue36562_test.dart
rename to tests/web/regress/issue/36562_test.dart
diff --git a/tests/web/37494_test.dart b/tests/web/regress/issue/37494_test.dart
similarity index 100%
rename from tests/web/37494_test.dart
rename to tests/web/regress/issue/37494_test.dart
diff --git a/tests/web/37576_test.dart b/tests/web/regress/issue/37576_test.dart
similarity index 100%
rename from tests/web/37576_test.dart
rename to tests/web/regress/issue/37576_test.dart
diff --git a/tests/web/38005_test.dart b/tests/web/regress/issue/38005_test.dart
similarity index 100%
rename from tests/web/38005_test.dart
rename to tests/web/regress/issue/38005_test.dart
diff --git a/tests/web/38949_test.dart b/tests/web/regress/issue/38949_test.dart
similarity index 100%
rename from tests/web/38949_test.dart
rename to tests/web/regress/issue/38949_test.dart
diff --git a/tests/web/3_test.dart b/tests/web/regress/issue/3_test.dart
similarity index 100%
rename from tests/web/3_test.dart
rename to tests/web/regress/issue/3_test.dart
diff --git a/tests/web/40152a_test.dart b/tests/web/regress/issue/40152a_test.dart
similarity index 100%
rename from tests/web/40152a_test.dart
rename to tests/web/regress/issue/40152a_test.dart
diff --git a/tests/web/regress_40349_test.dart b/tests/web/regress/issue/40349_test.dart
similarity index 100%
rename from tests/web/regress_40349_test.dart
rename to tests/web/regress/issue/40349_test.dart
diff --git a/tests/web/40902_test.dart b/tests/web/regress/issue/40902_test.dart
similarity index 100%
rename from tests/web/40902_test.dart
rename to tests/web/regress/issue/40902_test.dart
diff --git a/tests/web/41449a_test.dart b/tests/web/regress/issue/41449a_test.dart
similarity index 100%
rename from tests/web/41449a_test.dart
rename to tests/web/regress/issue/41449a_test.dart
diff --git a/tests/web/41449b_test.dart b/tests/web/regress/issue/41449b_test.dart
similarity index 100%
rename from tests/web/41449b_test.dart
rename to tests/web/regress/issue/41449b_test.dart
diff --git a/tests/web/41449c_test.dart b/tests/web/regress/issue/41449c_test.dart
similarity index 100%
rename from tests/web/41449c_test.dart
rename to tests/web/regress/issue/41449c_test.dart
diff --git a/tests/web/41449d_test.dart b/tests/web/regress/issue/41449d_test.dart
similarity index 100%
rename from tests/web/41449d_test.dart
rename to tests/web/regress/issue/41449d_test.dart
diff --git a/tests/web/regress/41781_test.dart b/tests/web/regress/issue/41781_test.dart
similarity index 100%
rename from tests/web/regress/41781_test.dart
rename to tests/web/regress/issue/41781_test.dart
diff --git a/tests/web/42088_test.dart b/tests/web/regress/issue/42088_test.dart
similarity index 100%
rename from tests/web/42088_test.dart
rename to tests/web/regress/issue/42088_test.dart
diff --git a/tests/web/42189_test.dart b/tests/web/regress/issue/42189_test.dart
similarity index 100%
rename from tests/web/42189_test.dart
rename to tests/web/regress/issue/42189_test.dart
diff --git a/tests/web/regress_42281_test.dart b/tests/web/regress/issue/42281_test.dart
similarity index 100%
rename from tests/web/regress_42281_test.dart
rename to tests/web/regress/issue/42281_test.dart
diff --git a/tests/web/42501_test.dart b/tests/web/regress/issue/42501_test.dart
similarity index 100%
rename from tests/web/42501_test.dart
rename to tests/web/regress/issue/42501_test.dart
diff --git a/tests/web/42531_test.dart b/tests/web/regress/issue/42531_test.dart
similarity index 100%
rename from tests/web/42531_test.dart
rename to tests/web/regress/issue/42531_test.dart
diff --git a/tests/web/regress/43520_safari_test.dart b/tests/web/regress/issue/43520_safari_test.dart
similarity index 100%
rename from tests/web/regress/43520_safari_test.dart
rename to tests/web/regress/issue/43520_safari_test.dart
diff --git a/tests/web/43_test.dart b/tests/web/regress/issue/43_test.dart
similarity index 100%
rename from tests/web/43_test.dart
rename to tests/web/regress/issue/43_test.dart
diff --git a/tests/web/regress/4434_lib.dart b/tests/web/regress/issue/4434_lib.dart
similarity index 100%
rename from tests/web/regress/4434_lib.dart
rename to tests/web/regress/issue/4434_lib.dart
diff --git a/tests/web/regress/4434_test.dart b/tests/web/regress/issue/4434_test.dart
similarity index 100%
rename from tests/web/regress/4434_test.dart
rename to tests/web/regress/issue/4434_test.dart
diff --git a/tests/web/regress/44818_test.dart b/tests/web/regress/issue/44818_test.dart
similarity index 100%
rename from tests/web/regress/44818_test.dart
rename to tests/web/regress/issue/44818_test.dart
diff --git a/tests/web/regress/4492_test.dart b/tests/web/regress/issue/4492_test.dart
similarity index 100%
rename from tests/web/regress/4492_test.dart
rename to tests/web/regress/issue/4492_test.dart
diff --git a/tests/web/45046_test.dart b/tests/web/regress/issue/45046_test.dart
similarity index 100%
rename from tests/web/45046_test.dart
rename to tests/web/regress/issue/45046_test.dart
diff --git a/tests/web/regress/4515_1_test.dart b/tests/web/regress/issue/4515_1_test.dart
similarity index 100%
rename from tests/web/regress/4515_1_test.dart
rename to tests/web/regress/issue/4515_1_test.dart
diff --git a/tests/web/regress/4515_2_test.dart b/tests/web/regress/issue/4515_2_test.dart
similarity index 100%
rename from tests/web/regress/4515_2_test.dart
rename to tests/web/regress/issue/4515_2_test.dart
diff --git a/tests/web/regress/4515_3_test.dart b/tests/web/regress/issue/4515_3_test.dart
similarity index 100%
rename from tests/web/regress/4515_3_test.dart
rename to tests/web/regress/issue/4515_3_test.dart
diff --git a/tests/web/regress/45413_test.dart b/tests/web/regress/issue/45413_test.dart
similarity index 100%
rename from tests/web/regress/45413_test.dart
rename to tests/web/regress/issue/45413_test.dart
diff --git a/tests/web/regress/45943_test.dart b/tests/web/regress/issue/45943_test.dart
similarity index 100%
rename from tests/web/regress/45943_test.dart
rename to tests/web/regress/issue/45943_test.dart
diff --git a/tests/web/regress/4639_test.dart b/tests/web/regress/issue/4639_test.dart
similarity index 100%
rename from tests/web/regress/4639_test.dart
rename to tests/web/regress/issue/4639_test.dart
diff --git a/tests/web/regress/46417_test.dart b/tests/web/regress/issue/46417_test.dart
similarity index 100%
rename from tests/web/regress/46417_test.dart
rename to tests/web/regress/issue/46417_test.dart
diff --git a/tests/web/regress/46589_test.dart b/tests/web/regress/issue/46589_test.dart
similarity index 100%
rename from tests/web/regress/46589_test.dart
rename to tests/web/regress/issue/46589_test.dart
diff --git a/tests/web/47691_test.dart b/tests/web/regress/issue/47691_test.dart
similarity index 100%
rename from tests/web/47691_test.dart
rename to tests/web/regress/issue/47691_test.dart
diff --git a/tests/web/regress/48317_test.dart b/tests/web/regress/issue/48317_test.dart
similarity index 100%
rename from tests/web/regress/48317_test.dart
rename to tests/web/regress/issue/48317_test.dart
diff --git a/tests/web/48383_test.dart b/tests/web/regress/issue/48383_test.dart
similarity index 100%
rename from tests/web/48383_test.dart
rename to tests/web/regress/issue/48383_test.dart
diff --git a/tests/web/48442_test.dart b/tests/web/regress/issue/48442_test.dart
similarity index 100%
rename from tests/web/48442_test.dart
rename to tests/web/regress/issue/48442_test.dart
diff --git a/tests/web/7_test.dart b/tests/web/regress/issue/7_test.dart
similarity index 100%
rename from tests/web/7_test.dart
rename to tests/web/regress/issue/7_test.dart
diff --git a/tests/web/881_test.dart b/tests/web/regress/issue/881_test.dart
similarity index 100%
rename from tests/web/881_test.dart
rename to tests/web/regress/issue/881_test.dart
diff --git a/tests/web/regress_null_aware_test.dart b/tests/web/regress/null_aware_test.dart
similarity index 100%
rename from tests/web/regress_null_aware_test.dart
rename to tests/web/regress/null_aware_test.dart
diff --git a/tests/web/regress/regression_type_variables_is_test.dart b/tests/web/regress/type_variables_is_test.dart
similarity index 100%
rename from tests/web/regress/regression_type_variables_is_test.dart
rename to tests/web/regress/type_variables_is_test.dart
diff --git a/tests/web/regress/scope_info_field_loop_test.dart b/tests/web/scope_info_field_loop_test.dart
similarity index 100%
rename from tests/web/regress/scope_info_field_loop_test.dart
rename to tests/web/scope_info_field_loop_test.dart
diff --git a/tests/web/regress/unused_generator_type_parameter_test.dart b/tests/web/unused_generator_type_parameter_test.dart
similarity index 100%
rename from tests/web/regress/unused_generator_type_parameter_test.dart
rename to tests/web/unused_generator_type_parameter_test.dart
diff --git a/tests/web_2/regress/if_method_call_test.dart b/tests/web_2/if_method_call_test.dart
similarity index 100%
rename from tests/web_2/regress/if_method_call_test.dart
rename to tests/web_2/if_method_call_test.dart
diff --git a/tests/web_2/10216a_test.dart b/tests/web_2/regress/issue/10216a_test.dart
similarity index 100%
rename from tests/web_2/10216a_test.dart
rename to tests/web_2/regress/issue/10216a_test.dart
diff --git a/tests/web_2/10216b_test.dart b/tests/web_2/regress/issue/10216b_test.dart
similarity index 100%
rename from tests/web_2/10216b_test.dart
rename to tests/web_2/regress/issue/10216b_test.dart
diff --git a/tests/web_2/11673_test.dart b/tests/web_2/regress/issue/11673_test.dart
similarity index 100%
rename from tests/web_2/11673_test.dart
rename to tests/web_2/regress/issue/11673_test.dart
diff --git a/tests/web_2/12320_test.dart b/tests/web_2/regress/issue/12320_test.dart
similarity index 100%
rename from tests/web_2/12320_test.dart
rename to tests/web_2/regress/issue/12320_test.dart
diff --git a/tests/web_2/12_test.dart b/tests/web_2/regress/issue/12_test.dart
similarity index 100%
rename from tests/web_2/12_test.dart
rename to tests/web_2/regress/issue/12_test.dart
diff --git a/tests/web_2/16400_test.dart b/tests/web_2/regress/issue/16400_test.dart
similarity index 100%
rename from tests/web_2/16400_test.dart
rename to tests/web_2/regress/issue/16400_test.dart
diff --git a/tests/web_2/16407_test.dart b/tests/web_2/regress/issue/16407_test.dart
similarity index 100%
rename from tests/web_2/16407_test.dart
rename to tests/web_2/regress/issue/16407_test.dart
diff --git a/tests/web_2/16967_test.dart b/tests/web_2/regress/issue/16967_test.dart
similarity index 100%
rename from tests/web_2/16967_test.dart
rename to tests/web_2/regress/issue/16967_test.dart
diff --git a/tests/web_2/17094_test.dart b/tests/web_2/regress/issue/17094_test.dart
similarity index 100%
rename from tests/web_2/17094_test.dart
rename to tests/web_2/regress/issue/17094_test.dart
diff --git a/tests/web_2/17645_test.dart b/tests/web_2/regress/issue/17645_test.dart
similarity index 100%
rename from tests/web_2/17645_test.dart
rename to tests/web_2/regress/issue/17645_test.dart
diff --git a/tests/web_2/17856_test.dart b/tests/web_2/regress/issue/17856_test.dart
similarity index 100%
rename from tests/web_2/17856_test.dart
rename to tests/web_2/regress/issue/17856_test.dart
diff --git a/tests/web_2/regress/183227419_test.dart b/tests/web_2/regress/issue/183227419_test.dart
similarity index 100%
rename from tests/web_2/regress/183227419_test.dart
rename to tests/web_2/regress/issue/183227419_test.dart
diff --git a/tests/web_2/18383_test.dart b/tests/web_2/regress/issue/18383_test.dart
similarity index 100%
rename from tests/web_2/18383_test.dart
rename to tests/web_2/regress/issue/18383_test.dart
diff --git a/tests/web_2/19191_test.dart b/tests/web_2/regress/issue/19191_test.dart
similarity index 100%
rename from tests/web_2/19191_test.dart
rename to tests/web_2/regress/issue/19191_test.dart
diff --git a/tests/web_2/21351_test.dart b/tests/web_2/regress/issue/21351_test.dart
similarity index 100%
rename from tests/web_2/21351_test.dart
rename to tests/web_2/regress/issue/21351_test.dart
diff --git a/tests/web_2/21579_test.dart b/tests/web_2/regress/issue/21579_test.dart
similarity index 100%
rename from tests/web_2/21579_test.dart
rename to tests/web_2/regress/issue/21579_test.dart
diff --git a/tests/web_2/22487_test.dart b/tests/web_2/regress/issue/22487_test.dart
similarity index 100%
rename from tests/web_2/22487_test.dart
rename to tests/web_2/regress/issue/22487_test.dart
diff --git a/tests/web_2/22776_test.dart b/tests/web_2/regress/issue/22776_test.dart
similarity index 100%
rename from tests/web_2/22776_test.dart
rename to tests/web_2/regress/issue/22776_test.dart
diff --git a/tests/web_2/22868_test.dart b/tests/web_2/regress/issue/22868_test.dart
similarity index 100%
rename from tests/web_2/22868_test.dart
rename to tests/web_2/regress/issue/22868_test.dart
diff --git a/tests/web_2/22917_test.dart b/tests/web_2/regress/issue/22917_test.dart
similarity index 100%
rename from tests/web_2/22917_test.dart
rename to tests/web_2/regress/issue/22917_test.dart
diff --git a/tests/web_2/23404_test.dart b/tests/web_2/regress/issue/23404_test.dart
similarity index 100%
rename from tests/web_2/23404_test.dart
rename to tests/web_2/regress/issue/23404_test.dart
diff --git a/tests/web_2/23432_test.dart b/tests/web_2/regress/issue/23432_test.dart
similarity index 100%
rename from tests/web_2/23432_test.dart
rename to tests/web_2/regress/issue/23432_test.dart
diff --git a/tests/web_2/23486_helper.dart b/tests/web_2/regress/issue/23486_helper.dart
similarity index 100%
rename from tests/web_2/23486_helper.dart
rename to tests/web_2/regress/issue/23486_helper.dart
diff --git a/tests/web_2/23486_test.dart b/tests/web_2/regress/issue/23486_test.dart
similarity index 100%
rename from tests/web_2/23486_test.dart
rename to tests/web_2/regress/issue/23486_test.dart
diff --git a/tests/web_2/23804_test.dart b/tests/web_2/regress/issue/23804_test.dart
similarity index 100%
rename from tests/web_2/23804_test.dart
rename to tests/web_2/regress/issue/23804_test.dart
diff --git a/tests/web_2/23828_test.dart b/tests/web_2/regress/issue/23828_test.dart
similarity index 100%
rename from tests/web_2/23828_test.dart
rename to tests/web_2/regress/issue/23828_test.dart
diff --git a/tests/web_2/26243_test.dart b/tests/web_2/regress/issue/26243_test.dart
similarity index 100%
rename from tests/web_2/26243_test.dart
rename to tests/web_2/regress/issue/26243_test.dart
diff --git a/tests/web_2/27198_test.dart b/tests/web_2/regress/issue/27198_test.dart
similarity index 100%
rename from tests/web_2/27198_test.dart
rename to tests/web_2/regress/issue/27198_test.dart
diff --git a/tests/web_2/27199_test.dart b/tests/web_2/regress/issue/27199_test.dart
similarity index 100%
rename from tests/web_2/27199_test.dart
rename to tests/web_2/regress/issue/27199_test.dart
diff --git a/tests/web_2/27323_test.dart b/tests/web_2/regress/issue/27323_test.dart
similarity index 100%
rename from tests/web_2/27323_test.dart
rename to tests/web_2/regress/issue/27323_test.dart
diff --git a/tests/web_2/27354_test.dart b/tests/web_2/regress/issue/27354_test.dart
similarity index 100%
rename from tests/web_2/27354_test.dart
rename to tests/web_2/regress/issue/27354_test.dart
diff --git a/tests/web_2/28749_test.dart b/tests/web_2/regress/issue/28749_test.dart
similarity index 100%
rename from tests/web_2/28749_test.dart
rename to tests/web_2/regress/issue/28749_test.dart
diff --git a/tests/web_2/28919_test.dart b/tests/web_2/regress/issue/28919_test.dart
similarity index 100%
rename from tests/web_2/28919_test.dart
rename to tests/web_2/regress/issue/28919_test.dart
diff --git a/tests/web_2/29130_test.dart b/tests/web_2/regress/issue/29130_test.dart
similarity index 100%
rename from tests/web_2/29130_test.dart
rename to tests/web_2/regress/issue/29130_test.dart
diff --git a/tests/web_2/regression_2913_test.dart b/tests/web_2/regress/issue/2913_test.dart
similarity index 100%
rename from tests/web_2/regression_2913_test.dart
rename to tests/web_2/regress/issue/2913_test.dart
diff --git a/tests/web_2/31803_test.dart b/tests/web_2/regress/issue/31803_test.dart
similarity index 100%
rename from tests/web_2/31803_test.dart
rename to tests/web_2/regress/issue/31803_test.dart
diff --git a/tests/web_2/regress_32069_test.dart b/tests/web_2/regress/issue/32069_test.dart
similarity index 100%
rename from tests/web_2/regress_32069_test.dart
rename to tests/web_2/regress/issue/32069_test.dart
diff --git a/tests/web_2/32770a_test.dart b/tests/web_2/regress/issue/32770a_test.dart
similarity index 100%
rename from tests/web_2/32770a_test.dart
rename to tests/web_2/regress/issue/32770a_test.dart
diff --git a/tests/web_2/32770b_test.dart b/tests/web_2/regress/issue/32770b_test.dart
similarity index 100%
rename from tests/web_2/32770b_test.dart
rename to tests/web_2/regress/issue/32770b_test.dart
diff --git a/tests/web_2/32770c_test.dart b/tests/web_2/regress/issue/32770c_test.dart
similarity index 100%
rename from tests/web_2/32770c_test.dart
rename to tests/web_2/regress/issue/32770c_test.dart
diff --git a/tests/web_2/32774_test.dart b/tests/web_2/regress/issue/32774_test.dart
similarity index 100%
rename from tests/web_2/32774_test.dart
rename to tests/web_2/regress/issue/32774_test.dart
diff --git a/tests/web_2/32828_test.dart b/tests/web_2/regress/issue/32828_test.dart
similarity index 100%
rename from tests/web_2/32828_test.dart
rename to tests/web_2/regress/issue/32828_test.dart
diff --git a/tests/web_2/32853_test.dart b/tests/web_2/regress/issue/32853_test.dart
similarity index 99%
rename from tests/web_2/32853_test.dart
rename to tests/web_2/regress/issue/32853_test.dart
index f90fb71..80819b3 100644
--- a/tests/web_2/32853_test.dart
+++ b/tests/web_2/regress/issue/32853_test.dart
@@ -8,10 +8,9 @@
 
 // Regression test for issue 32853.
 
-
 int foo<T extends Comparable<T>>(T a, T b) => a.compareTo(b);
 
 main() {
   int Function<T extends Comparable<T>>(T, T) f = foo;
   print(f<num>(1, 2));
-}
\ No newline at end of file
+}
diff --git a/tests/web_2/32928_test.dart b/tests/web_2/regress/issue/32928_test.dart
similarity index 100%
rename from tests/web_2/32928_test.dart
rename to tests/web_2/regress/issue/32928_test.dart
diff --git a/tests/web_2/32969_test.dart b/tests/web_2/regress/issue/32969_test.dart
similarity index 100%
rename from tests/web_2/32969_test.dart
rename to tests/web_2/regress/issue/32969_test.dart
diff --git a/tests/web_2/32997a_lib.dart b/tests/web_2/regress/issue/32997a_lib.dart
similarity index 100%
rename from tests/web_2/32997a_lib.dart
rename to tests/web_2/regress/issue/32997a_lib.dart
diff --git a/tests/web_2/32997a_test.dart b/tests/web_2/regress/issue/32997a_test.dart
similarity index 100%
rename from tests/web_2/32997a_test.dart
rename to tests/web_2/regress/issue/32997a_test.dart
diff --git a/tests/web_2/32997b_lib.dart b/tests/web_2/regress/issue/32997b_lib.dart
similarity index 100%
rename from tests/web_2/32997b_lib.dart
rename to tests/web_2/regress/issue/32997b_lib.dart
diff --git a/tests/web_2/32997b_test.dart b/tests/web_2/regress/issue/32997b_test.dart
similarity index 100%
rename from tests/web_2/32997b_test.dart
rename to tests/web_2/regress/issue/32997b_test.dart
diff --git a/tests/web_2/33296_test.dart b/tests/web_2/regress/issue/33296_test.dart
similarity index 100%
rename from tests/web_2/33296_test.dart
rename to tests/web_2/regress/issue/33296_test.dart
diff --git a/tests/web_2/33572_test.dart b/tests/web_2/regress/issue/33572_test.dart
similarity index 100%
rename from tests/web_2/33572_test.dart
rename to tests/web_2/regress/issue/33572_test.dart
diff --git a/tests/web_2/33_test.dart b/tests/web_2/regress/issue/33_test.dart
similarity index 100%
rename from tests/web_2/33_test.dart
rename to tests/web_2/regress/issue/33_test.dart
diff --git a/tests/web_2/34156_test.dart b/tests/web_2/regress/issue/34156_test.dart
similarity index 100%
rename from tests/web_2/34156_test.dart
rename to tests/web_2/regress/issue/34156_test.dart
diff --git a/tests/web_2/34701_test.dart b/tests/web_2/regress/issue/34701_test.dart
similarity index 100%
rename from tests/web_2/34701_test.dart
rename to tests/web_2/regress/issue/34701_test.dart
diff --git a/tests/web_2/35341_test.dart b/tests/web_2/regress/issue/35341_test.dart
similarity index 100%
rename from tests/web_2/35341_test.dart
rename to tests/web_2/regress/issue/35341_test.dart
diff --git a/tests/web_2/35356_test.dart b/tests/web_2/regress/issue/35356_test.dart
similarity index 100%
rename from tests/web_2/35356_test.dart
rename to tests/web_2/regress/issue/35356_test.dart
diff --git a/tests/web_2/35853_test.dart b/tests/web_2/regress/issue/35853_test.dart
similarity index 100%
rename from tests/web_2/35853_test.dart
rename to tests/web_2/regress/issue/35853_test.dart
diff --git a/tests/web_2/35965a_test.dart b/tests/web_2/regress/issue/35965a_test.dart
similarity index 100%
rename from tests/web_2/35965a_test.dart
rename to tests/web_2/regress/issue/35965a_test.dart
diff --git a/tests/web_2/regress_36222_test.dart b/tests/web_2/regress/issue/36222_test.dart
similarity index 100%
rename from tests/web_2/regress_36222_test.dart
rename to tests/web_2/regress/issue/36222_test.dart
diff --git a/tests/web_2/37494_test.dart b/tests/web_2/regress/issue/37494_test.dart
similarity index 100%
rename from tests/web_2/37494_test.dart
rename to tests/web_2/regress/issue/37494_test.dart
diff --git a/tests/web_2/37576_test.dart b/tests/web_2/regress/issue/37576_test.dart
similarity index 100%
rename from tests/web_2/37576_test.dart
rename to tests/web_2/regress/issue/37576_test.dart
diff --git a/tests/web_2/38005_test.dart b/tests/web_2/regress/issue/38005_test.dart
similarity index 100%
rename from tests/web_2/38005_test.dart
rename to tests/web_2/regress/issue/38005_test.dart
diff --git a/tests/web_2/38949_test.dart b/tests/web_2/regress/issue/38949_test.dart
similarity index 100%
rename from tests/web_2/38949_test.dart
rename to tests/web_2/regress/issue/38949_test.dart
diff --git a/tests/web_2/3_test.dart b/tests/web_2/regress/issue/3_test.dart
similarity index 100%
rename from tests/web_2/3_test.dart
rename to tests/web_2/regress/issue/3_test.dart
diff --git a/tests/web_2/40152a_test.dart b/tests/web_2/regress/issue/40152a_test.dart
similarity index 100%
rename from tests/web_2/40152a_test.dart
rename to tests/web_2/regress/issue/40152a_test.dart
diff --git a/tests/web_2/regress_40349_test.dart b/tests/web_2/regress/issue/40349_test.dart
similarity index 100%
rename from tests/web_2/regress_40349_test.dart
rename to tests/web_2/regress/issue/40349_test.dart
diff --git a/tests/web_2/40902_test.dart b/tests/web_2/regress/issue/40902_test.dart
similarity index 100%
rename from tests/web_2/40902_test.dart
rename to tests/web_2/regress/issue/40902_test.dart
diff --git a/tests/web_2/41449a_test.dart b/tests/web_2/regress/issue/41449a_test.dart
similarity index 100%
rename from tests/web_2/41449a_test.dart
rename to tests/web_2/regress/issue/41449a_test.dart
diff --git a/tests/web_2/41449b_test.dart b/tests/web_2/regress/issue/41449b_test.dart
similarity index 100%
rename from tests/web_2/41449b_test.dart
rename to tests/web_2/regress/issue/41449b_test.dart
diff --git a/tests/web_2/41449c_test.dart b/tests/web_2/regress/issue/41449c_test.dart
similarity index 100%
rename from tests/web_2/41449c_test.dart
rename to tests/web_2/regress/issue/41449c_test.dart
diff --git a/tests/web_2/41449d_test.dart b/tests/web_2/regress/issue/41449d_test.dart
similarity index 100%
rename from tests/web_2/41449d_test.dart
rename to tests/web_2/regress/issue/41449d_test.dart
diff --git a/tests/web_2/regress/41781_test.dart b/tests/web_2/regress/issue/41781_test.dart
similarity index 100%
rename from tests/web_2/regress/41781_test.dart
rename to tests/web_2/regress/issue/41781_test.dart
diff --git a/tests/web_2/42088_test.dart b/tests/web_2/regress/issue/42088_test.dart
similarity index 100%
rename from tests/web_2/42088_test.dart
rename to tests/web_2/regress/issue/42088_test.dart
diff --git a/tests/web_2/42189_test.dart b/tests/web_2/regress/issue/42189_test.dart
similarity index 100%
rename from tests/web_2/42189_test.dart
rename to tests/web_2/regress/issue/42189_test.dart
diff --git a/tests/web_2/regress_42281_test.dart b/tests/web_2/regress/issue/42281_test.dart
similarity index 100%
rename from tests/web_2/regress_42281_test.dart
rename to tests/web_2/regress/issue/42281_test.dart
diff --git a/tests/web_2/42501_test.dart b/tests/web_2/regress/issue/42501_test.dart
similarity index 100%
rename from tests/web_2/42501_test.dart
rename to tests/web_2/regress/issue/42501_test.dart
diff --git a/tests/web_2/42531_test.dart b/tests/web_2/regress/issue/42531_test.dart
similarity index 100%
rename from tests/web_2/42531_test.dart
rename to tests/web_2/regress/issue/42531_test.dart
diff --git a/tests/web_2/regress/43520_safari_test.dart b/tests/web_2/regress/issue/43520_safari_test.dart
similarity index 100%
rename from tests/web_2/regress/43520_safari_test.dart
rename to tests/web_2/regress/issue/43520_safari_test.dart
diff --git a/tests/web_2/43_test.dart b/tests/web_2/regress/issue/43_test.dart
similarity index 100%
rename from tests/web_2/43_test.dart
rename to tests/web_2/regress/issue/43_test.dart
diff --git a/tests/web_2/regress/4434_lib.dart b/tests/web_2/regress/issue/4434_lib.dart
similarity index 100%
rename from tests/web_2/regress/4434_lib.dart
rename to tests/web_2/regress/issue/4434_lib.dart
diff --git a/tests/web_2/regress/4434_test.dart b/tests/web_2/regress/issue/4434_test.dart
similarity index 100%
rename from tests/web_2/regress/4434_test.dart
rename to tests/web_2/regress/issue/4434_test.dart
diff --git a/tests/web_2/regress/44818_test.dart b/tests/web_2/regress/issue/44818_test.dart
similarity index 100%
rename from tests/web_2/regress/44818_test.dart
rename to tests/web_2/regress/issue/44818_test.dart
diff --git a/tests/web_2/regress/4492_test.dart b/tests/web_2/regress/issue/4492_test.dart
similarity index 100%
rename from tests/web_2/regress/4492_test.dart
rename to tests/web_2/regress/issue/4492_test.dart
diff --git a/tests/web_2/45046_test.dart b/tests/web_2/regress/issue/45046_test.dart
similarity index 100%
rename from tests/web_2/45046_test.dart
rename to tests/web_2/regress/issue/45046_test.dart
diff --git a/tests/web_2/regress/4515_1_test.dart b/tests/web_2/regress/issue/4515_1_test.dart
similarity index 100%
rename from tests/web_2/regress/4515_1_test.dart
rename to tests/web_2/regress/issue/4515_1_test.dart
diff --git a/tests/web_2/regress/4515_2_test.dart b/tests/web_2/regress/issue/4515_2_test.dart
similarity index 100%
rename from tests/web_2/regress/4515_2_test.dart
rename to tests/web_2/regress/issue/4515_2_test.dart
diff --git a/tests/web_2/regress/4515_3_test.dart b/tests/web_2/regress/issue/4515_3_test.dart
similarity index 100%
rename from tests/web_2/regress/4515_3_test.dart
rename to tests/web_2/regress/issue/4515_3_test.dart
diff --git a/tests/web_2/regress/45943_test.dart b/tests/web_2/regress/issue/45943_test.dart
similarity index 100%
rename from tests/web_2/regress/45943_test.dart
rename to tests/web_2/regress/issue/45943_test.dart
diff --git a/tests/web_2/regress/4639_test.dart b/tests/web_2/regress/issue/4639_test.dart
similarity index 100%
rename from tests/web_2/regress/4639_test.dart
rename to tests/web_2/regress/issue/4639_test.dart
diff --git a/tests/web_2/regress/46417_test.dart b/tests/web_2/regress/issue/46417_test.dart
similarity index 100%
rename from tests/web_2/regress/46417_test.dart
rename to tests/web_2/regress/issue/46417_test.dart
diff --git a/tests/web_2/regress/46589_test.dart b/tests/web_2/regress/issue/46589_test.dart
similarity index 100%
rename from tests/web_2/regress/46589_test.dart
rename to tests/web_2/regress/issue/46589_test.dart
diff --git a/tests/web_2/47691_test.dart b/tests/web_2/regress/issue/47691_test.dart
similarity index 100%
rename from tests/web_2/47691_test.dart
rename to tests/web_2/regress/issue/47691_test.dart
diff --git a/tests/web_2/regress/48317_test.dart b/tests/web_2/regress/issue/48317_test.dart
similarity index 100%
rename from tests/web_2/regress/48317_test.dart
rename to tests/web_2/regress/issue/48317_test.dart
diff --git a/tests/web_2/48383_test.dart b/tests/web_2/regress/issue/48383_test.dart
similarity index 100%
rename from tests/web_2/48383_test.dart
rename to tests/web_2/regress/issue/48383_test.dart
diff --git a/tests/web_2/48442_test.dart b/tests/web_2/regress/issue/48442_test.dart
similarity index 100%
rename from tests/web_2/48442_test.dart
rename to tests/web_2/regress/issue/48442_test.dart
diff --git a/tests/web_2/7_test.dart b/tests/web_2/regress/issue/7_test.dart
similarity index 100%
rename from tests/web_2/7_test.dart
rename to tests/web_2/regress/issue/7_test.dart
diff --git a/tests/web_2/881_test.dart b/tests/web_2/regress/issue/881_test.dart
similarity index 100%
rename from tests/web_2/881_test.dart
rename to tests/web_2/regress/issue/881_test.dart
diff --git a/tests/web_2/regress_null_aware_test.dart b/tests/web_2/regress/null_aware_test.dart
similarity index 63%
rename from tests/web_2/regress_null_aware_test.dart
rename to tests/web_2/regress/null_aware_test.dart
index 68cbcdc..2b3e177 100644
--- a/tests/web_2/regress_null_aware_test.dart
+++ b/tests/web_2/regress/null_aware_test.dart
@@ -9,15 +9,9 @@
 class Class {
   Map<String, Set<String>> map;
 
-  List<String> method(String node, Set<String> set) =>
-      set.add(node)
-          ? [
-              node,
-              ...?map[node]
-                  ?.expand((node) => method(node, set))
-                  ?.toList()
-            ]
-          : [];
+  List<String> method(String node, Set<String> set) => set.add(node)
+      ? [node, ...?map[node]?.expand((node) => method(node, set))?.toList()]
+      : [];
 }
 
 main(args) {
diff --git a/tests/web_2/regress/regression_type_variables_is_test.dart b/tests/web_2/regress/type_variables_is_test.dart
similarity index 100%
rename from tests/web_2/regress/regression_type_variables_is_test.dart
rename to tests/web_2/regress/type_variables_is_test.dart
diff --git a/tests/web_2/regress/scope_info_field_loop_test.dart b/tests/web_2/scope_info_field_loop_test.dart
similarity index 100%
rename from tests/web_2/regress/scope_info_field_loop_test.dart
rename to tests/web_2/scope_info_field_loop_test.dart
diff --git a/tests/web_2/regress/unused_generator_type_parameter_test.dart b/tests/web_2/unused_generator_type_parameter_test.dart
similarity index 100%
rename from tests/web_2/regress/unused_generator_type_parameter_test.dart
rename to tests/web_2/unused_generator_type_parameter_test.dart
diff --git a/tools/VERSION b/tools/VERSION
index d7d6b9c..7047fbf 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 195
+PRERELEASE 196
 PRERELEASE_PATCH 0
\ No newline at end of file
