diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart
index 879ac92..ee853d6 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart
@@ -45,11 +45,6 @@
     }
 
     final lineInfo = unit.lineInfo;
-    if (lineInfo == null) {
-      return error(ErrorCodes.InternalError,
-          'Unable to produce edits for $docIdentifier as no LineInfo was found');
-    }
-
     final workspaceEdit = toWorkspaceEdit(
       clientCapabilities,
       [FileEditInformation(docIdentifier, lineInfo, edits)],
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
index 7b1fbde..a876fd0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
@@ -25,9 +25,6 @@
     String ignoreCommentType,
   ) async {
     final lineInfo = unit.lineInfo;
-    if (lineInfo == null) {
-      return;
-    }
 
     await builder.addDartFileEdit(file, (builder) {
       final offset = insertDesc.offset;
diff --git a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
index e4438f2..f3abafa 100644
--- a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
@@ -69,7 +69,7 @@
 
   /// Organize all [Directive]s.
   void _organizeDirectives() {
-    var lineInfo = unit.lineInfo ?? LineInfo.fromContent(code);
+    var lineInfo = unit.lineInfo;
     var hasLibraryDirective = false;
     var directives = <_DirectiveInfo>[];
     // Track the end offset of any library-level comment/annotations that should
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index d5e5c71..0fac6a9 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -792,7 +792,7 @@
     // end
     var endOffset = sourceRange.end;
     var afterEndLineOffset = endOffset;
-    var lineInfo = unit.lineInfo!;
+    var lineInfo = unit.lineInfo;
     var lineStart = lineInfo
         .getOffsetOfLine(lineInfo.getLocation(startLineOffset).lineNumber - 1);
     if (lineStart == startLineOffset) {
diff --git a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
index e8d35e3..c25bdcd 100644
--- a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
+++ b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
@@ -29,7 +29,7 @@
 
   void _assertArgumentRange(int index, SourceRange expectedRange) {
     var list = _argumentList;
-    expect(range.nodeInListWithComments(testUnit.lineInfo!, list, list[index]),
+    expect(range.nodeInListWithComments(testUnit.lineInfo, list, list[index]),
         expectedRange);
   }
 
@@ -37,7 +37,7 @@
     var class_ = findNode.classDeclaration('class');
     var list = class_.members;
     for (var entry in expectedRanges.entries) {
-      expect(range.nodeWithComments(testUnit.lineInfo!, list[entry.key]),
+      expect(range.nodeWithComments(testUnit.lineInfo, list[entry.key]),
           entry.value);
     }
   }
@@ -45,7 +45,7 @@
   void _assertUnitRanges(Map<int, SourceRange> expectedRanges) {
     var list = testUnit.declarations;
     for (var entry in expectedRanges.entries) {
-      expect(range.nodeWithComments(testUnit.lineInfo!, list[entry.key]),
+      expect(range.nodeWithComments(testUnit.lineInfo, list[entry.key]),
           entry.value);
     }
   }
diff --git a/pkg/analyzer/lib/dart/analysis/utilities.dart b/pkg/analyzer/lib/dart/analysis/utilities.dart
index 8cee120..64dfab7 100644
--- a/pkg/analyzer/lib/dart/analysis/utilities.dart
+++ b/pkg/analyzer/lib/dart/analysis/utilities.dart
@@ -82,14 +82,14 @@
       featureSet: featureSet,
     );
   var token = scanner.tokenize();
+  var lineInfo = LineInfo(scanner.lineStarts);
   var parser = Parser(
     source,
     errorCollector,
     featureSet: scanner.featureSet,
+    lineInfo: lineInfo,
   );
   var unit = parser.parseCompilationUnit(token);
-  var lineInfo = LineInfo(scanner.lineStarts);
-  unit.lineInfo = lineInfo;
   ParseStringResult result =
       ParseStringResultImpl(content, unit, errorCollector.errors);
   if (throwIfDiagnostics && result.errors.isNotEmpty) {
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 105600d..d49cca3 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -1063,7 +1063,7 @@
   LanguageVersionToken? get languageVersionToken;
 
   /// Return the line information for this compilation unit.
-  LineInfo? get lineInfo;
+  LineInfo get lineInfo;
 
   /// Return the script tag at the beginning of the compilation unit, or `null`
   /// if there is no script tag in this compilation unit.
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 26bbeac..682228e 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
 /// A collection of factory methods which may be used to create concrete
@@ -175,13 +176,15 @@
   /// `null` (or omitted) if there are no directives in the compilation unit.
   /// The list of `declarations` can be `null` (or omitted) if there are no
   /// declarations in the compilation unit.
-  CompilationUnit compilationUnit(
-      {required Token beginToken,
-      ScriptTag? scriptTag,
-      List<Directive>? directives,
-      List<CompilationUnitMember>? declarations,
-      required Token endToken,
-      required FeatureSet featureSet});
+  CompilationUnit compilationUnit({
+    required Token beginToken,
+    ScriptTag? scriptTag,
+    List<Directive>? directives,
+    List<CompilationUnitMember>? declarations,
+    required Token endToken,
+    required FeatureSet featureSet,
+    LineInfo? lineInfo,
+  });
 
   /// Returns a newly created conditional expression.
   ConditionalExpression conditionalExpression(
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 2c3364c..c1f7133 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -550,11 +550,11 @@
       source,
       errorListener,
       featureSet: scanner.featureSet,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = true;
 
     var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = lineInfo;
     unit.languageVersion = LibraryLanguageVersion(
       package: packageLanguageVersion,
       override: scanner.overrideVersion,
@@ -636,7 +636,7 @@
       hasPartOfDirective: hasPartOfDirective,
       imports: imports,
       informativeBytes: writeUnitInformative(unit),
-      lineStarts: Uint32List.fromList(unit.lineInfo!.lineStarts),
+      lineStarts: Uint32List.fromList(unit.lineInfo.lineStarts),
       partOfName: null,
       partOfUri: null,
       parts: parts,
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 62a49f0..f4e2995 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -565,7 +565,7 @@
     String content = file.content;
     var unit = file.parse(errorListener);
 
-    _fileToLineInfo[file] = unit.lineInfo!;
+    _fileToLineInfo[file] = unit.lineInfo;
     _fileToIgnoreInfo[file] = IgnoreInfo.forDart(unit, content);
 
     return unit;
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index e799e6d..d43672d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -136,7 +136,7 @@
   ParseStringResultImpl(this.content, this.unit, this.errors);
 
   @override
-  LineInfo get lineInfo => unit.lineInfo!;
+  LineInfo get lineInfo => unit.lineInfo;
 }
 
 class ResolvedForCompletionResultImpl {
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index cae43cb..506e0d0 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -2115,7 +2115,7 @@
 
   /// The line information for this compilation unit.
   @override
-  LineInfo? lineInfo;
+  final LineInfo lineInfo;
 
   /// The language version information.
   LibraryLanguageVersion? languageVersion;
@@ -2134,7 +2134,8 @@
       List<Directive>? directives,
       List<CompilationUnitMember>? declarations,
       this.endToken,
-      this.featureSet) {
+      this.featureSet,
+      this.lineInfo) {
     _becomeParentOf(_scriptTag);
     _directives._initialize(this, directives);
     _declarations._initialize(this, declarations);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 05438c0..e427e92 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/ast/ast_factory.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
@@ -225,9 +226,14 @@
           List<Directive>? directives,
           List<CompilationUnitMember>? declarations,
           required Token endToken,
-          required FeatureSet featureSet}) =>
+          required FeatureSet featureSet,
+          // TODO(dantup): LineInfo should be made required and non-nullable
+          //   when breaking API changes can be made. Callers that do not
+          //   provide lineInfos may have offsets incorrectly mapped to line/col
+          //   for LSP.
+          LineInfo? lineInfo}) =>
       CompilationUnitImpl(beginToken, scriptTag as ScriptTagImpl?, directives,
-          declarations, endToken, featureSet);
+          declarations, endToken, featureSet, lineInfo ?? LineInfo([0]));
 
   @override
   ConditionalExpressionImpl conditionalExpression(
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 0652729..6e65351 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -495,7 +495,7 @@
     AnalysisErrorListener errorListener = _getErrorListener(file);
     var unit = file.parse(errorListener, content);
 
-    LineInfo lineInfo = unit.lineInfo!;
+    LineInfo lineInfo = unit.lineInfo;
     _fileToLineInfo[file] = lineInfo;
     _fileToIgnoreInfo[file] = IgnoreInfo.forDart(unit, content);
 
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index 6476871..9597bff 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -870,10 +870,10 @@
       location.source,
       errorListener,
       featureSet: scanner.featureSet,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = true;
     var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = lineInfo;
 
     // StringToken uses a static instance of StringCanonicalizer, so we need
     // to clear it explicitly once we are done using it for this file.
@@ -961,7 +961,7 @@
       hasPartOfDirective: hasPartOfDirective,
       imports: imports,
       informativeBytes: writeUnitInformative(unit),
-      lineStarts: Uint32List.fromList(unit.lineInfo!.lineStarts),
+      lineStarts: Uint32List.fromList(unit.lineInfo.lineStarts),
       partOfName: partOfName,
       partOfUri: partOfUriStr,
       parts: parts,
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index ac5a4809..73c6f51 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -204,7 +204,7 @@
             references.add(CiderSearchMatch(
                 path,
                 offsets
-                    .map((offset) => lineInfo?.getLocation(offset))
+                    .map((offset) => lineInfo.getLocation(offset))
                     .toList()));
           }
         });
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index e6a4df3..b3d3b24 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -34,7 +34,7 @@
   ///
   /// @param unit the compilation unit containing the to-do comments
   void findIn(CompilationUnit unit) {
-    _gatherTodoComments(unit.beginToken, unit.lineInfo!);
+    _gatherTodoComments(unit.beginToken, unit.lineInfo);
   }
 
   /// Search the comment tokens reachable from the given token and create errors
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index b81a0d2..9526d94 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -58,6 +58,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
 import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/ast.dart'
     show
@@ -172,8 +173,10 @@
 
   final FeatureSet _featureSet;
 
+  final LineInfo _lineInfo;
+
   AstBuilder(ErrorReporter? errorReporter, this.fileUri, this.isFullAst,
-      this._featureSet,
+      this._featureSet, this._lineInfo,
       [Uri? uri])
       : errorReporter = FastaErrorReporter(errorReporter),
         enableNonNullable = _featureSet.isEnabled(Feature.non_nullable),
@@ -1129,7 +1132,8 @@
         directives: directives,
         declarations: declarations,
         endToken: endToken,
-        featureSet: _featureSet);
+        featureSet: _featureSet,
+        lineInfo: _lineInfo);
     push(unit);
   }
 
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 9ffdfb3..1d7b7a3 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -30,17 +30,20 @@
   final AstBuilder astBuilder;
 
   Parser(Source source, AnalysisErrorListener errorListener,
-      {required FeatureSet featureSet, bool allowNativeClause = true})
+      {required FeatureSet featureSet,
+      bool allowNativeClause = true,
+      required LineInfo lineInfo})
       : astBuilder = AstBuilder(
-            ErrorReporter(
-              errorListener,
-              source,
-              isNonNullableByDefault:
-                  featureSet.isEnabled(Feature.non_nullable),
-            ),
-            source.uri,
-            true,
-            featureSet) {
+          ErrorReporter(
+            errorListener,
+            source,
+            isNonNullableByDefault: featureSet.isEnabled(Feature.non_nullable),
+          ),
+          source.uri,
+          true,
+          featureSet,
+          lineInfo,
+        ) {
     fastaParser = fasta.Parser(astBuilder);
     astBuilder.parser = fastaParser;
     astBuilder.allowNativeClause = allowNativeClause;
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 7b109c5..34986e6 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -323,7 +324,8 @@
           directives: directives,
           declarations: declarations,
           endToken: TokenFactory.tokenFromType(TokenType.EOF),
-          featureSet: FeatureSet.latestLanguageVersion());
+          featureSet: FeatureSet.latestLanguageVersion(),
+          lineInfo: LineInfo.fromContent(''));
 
   static CompilationUnitImpl compilationUnit9(
           {String? scriptTag,
@@ -337,7 +339,8 @@
           directives: directives,
           declarations: declarations,
           endToken: TokenFactory.tokenFromType(TokenType.EOF),
-          featureSet: featureSet);
+          featureSet: featureSet,
+          lineInfo: LineInfo.fromContent(''));
 
   static ConditionalExpressionImpl conditionalExpression(Expression condition,
           Expression thenExpression, Expression elseExpression) =>
diff --git a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
index 4b37ce5..d2f6b13 100644
--- a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
+++ b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
@@ -77,7 +77,7 @@
   /// Initialize a newly created instance of this class to represent the ignore
   /// comments in the given compilation [unit].
   IgnoreInfo.forDart(CompilationUnit unit, String content) {
-    var lineInfo = unit.lineInfo!;
+    var lineInfo = unit.lineInfo;
     for (var comment in unit.ignoreComments) {
       var lexeme = comment.lexeme;
       if (lexeme.contains('ignore:')) {
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index b5a3097..e39cd99 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -1317,7 +1317,7 @@
   }
 
   void _buildFileDeclarations(CompilationUnit unit) {
-    lineInfo = unit.lineInfo!;
+    lineInfo = unit.lineInfo;
     lineStarts = lineInfo.lineStarts;
 
     isLibrary = true;
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 58891f8..e2bf8ca 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -1051,7 +1051,7 @@
     sink.writeUInt30(unit.offset);
     sink.writeUInt30(unit.length);
 
-    sink.writeUint30List(unit.lineInfo?.lineStarts ?? [0]);
+    sink.writeUint30List(unit.lineInfo.lineStarts);
 
     _writeLibraryName(unit);
 
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 66c764c..456f594 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
 import 'package:test/test.dart';
@@ -62,6 +63,20 @@
 ''');
   }
 
+  test_generic_staticParameterElement_annotation() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C.named({arg});
+}
+@C<bool>.named(arg: true)
+test() {}
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
   test_inconsistentMethodInheritance_accessors_typeParameters1() async {
     await assertNoErrorsInCode(r'''
 abstract class A<E> {
@@ -1367,6 +1382,107 @@
 ''');
   }
 
+  test_generic_staticParameterElement_annotation_implicitTypeArg() async {
+    var required = isNullSafetyEnabled ? 'required' : '';
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C.named({$required T arg});
+}
+@C.named(arg: true)
+test() {}
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_explicitNew() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+test() => new C<bool>.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_explicitNew_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+C<bool> test() => new C.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_instanceCreation_implicitNew() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+test() => C<bool>.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_implicitNew_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+C<bool> test() => C.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_methodCall() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  T method<T>({arg});
+}
+test(C c) => c.method<bool>(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_methodCall_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  T method<T>({arg});
+}
+bool test(C c) => c.method<bool>(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
   test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() async {
     await assertNoErrorsInCode('''
 // @dart = 2.9
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index a0251ce..e565e23 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -279,10 +279,12 @@
             ? ScannerConfiguration.nonNullable
             : ScannerConfiguration.classic,
         includeComments: true);
+    var lineInfo = LineInfo(result.lineStarts);
     _fastaTokens = result.tokens;
     parserProxy = ParserProxy(_fastaTokens, featureSet,
         allowNativeClause: allowNativeClause,
-        expectedEndOffset: expectedEndOffset);
+        expectedEndOffset: expectedEndOffset,
+        lineInfo: lineInfo);
   }
 
   @override
@@ -416,8 +418,8 @@
       source,
       isNonNullableByDefault: false,
     );
-    AstBuilder astBuilder =
-        AstBuilder(errorReporter, source.uri, true, featureSet!);
+    AstBuilder astBuilder = AstBuilder(errorReporter, source.uri, true,
+        featureSet!, LineInfo.fromContent(content));
     fasta.Parser parser = fasta.Parser(astBuilder);
     astBuilder.parser = parser;
     astBuilder.allowNativeClause = allowNativeClause;
@@ -743,19 +745,26 @@
   /// Creates a [ParserProxy] which is prepared to begin parsing at the given
   /// Fasta token.
   factory ParserProxy(Token firstToken, FeatureSet featureSet,
-      {bool allowNativeClause = false, int? expectedEndOffset}) {
+      {bool allowNativeClause = false,
+      int? expectedEndOffset,
+      required LineInfo lineInfo}) {
     TestSource source = TestSource();
     var errorListener = GatheringErrorListener(checkRanges: true);
     return ParserProxy._(firstToken, source, errorListener, featureSet,
         allowNativeClause: allowNativeClause,
-        expectedEndOffset: expectedEndOffset);
+        expectedEndOffset: expectedEndOffset,
+        lineInfo: lineInfo);
   }
 
   ParserProxy._(Token firstToken, Source source, this.errorListener,
       FeatureSet featureSet,
-      {bool allowNativeClause = false, this.expectedEndOffset})
+      {bool allowNativeClause = false,
+      this.expectedEndOffset,
+      required LineInfo lineInfo})
       : super(source, errorListener,
-            featureSet: featureSet, allowNativeClause: allowNativeClause) {
+            featureSet: featureSet,
+            allowNativeClause: allowNativeClause,
+            lineInfo: lineInfo) {
     _eventListener = ForwardingTestListener(astBuilder);
     fastaParser.listener = _eventListener;
     currentToken = firstToken;
@@ -1029,12 +1038,14 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
-    listener.setLineInfo(source, result.lineStarts);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
+    listener.setLineInfo(source, lineInfo);
 
     parser = analyzer.Parser(
       source,
       listener,
       featureSet: featureSet,
+      lineInfo: lineInfo,
     );
     parser.allowNativeClause = allowNativeClause;
     parser.parseFunctionBodies = parseFunctionBodies;
@@ -1147,12 +1158,14 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
-    listener.setLineInfo(source, result.lineStarts);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
+    listener.setLineInfo(source, lineInfo);
 
     analyzer.Parser parser = analyzer.Parser(
       source,
       listener,
       featureSet: FeatureSets.latestWithExperiments,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     CompilationUnit unit = parser.parseCompilationUnit(result.tokens);
@@ -1175,15 +1188,16 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
 
     analyzer.Parser parser = analyzer.Parser(
       source,
       listener,
       featureSet: FeatureSet.latestLanguageVersion(),
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     var unit = parser.parseCompilationUnit(result.tokens);
-    unit.lineInfo = LineInfo(result.lineStarts);
     return unit;
   }
 
@@ -1452,12 +1466,14 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
-    listener.setLineInfo(source, result.lineStarts);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
+    listener.setLineInfo(source, lineInfo);
 
     analyzer.Parser parser = analyzer.Parser(
       source,
       listener,
       featureSet: FeatureSet.latestLanguageVersion(),
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     Statement statement = parser.parseStatement(result.tokens);
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 08cf6ac..8dff3c5 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -193,7 +193,8 @@
             featureSet: featureSet,
           );
     Token result = scanner.tokenize();
-    listener.setLineInfo(TestSource(), scanner.lineStarts);
+    LineInfo lineInfo = LineInfo(scanner.lineStarts);
+    listener.setLineInfo(TestSource(), lineInfo);
     return result;
   }
 }
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index c170e15..b34ef50 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -398,10 +398,9 @@
     _errors.add(error);
   }
 
-  /// Set the line information associated with the given [source] to the given
-  /// list of [lineStarts].
-  void setLineInfo(Source source, List<int> lineStarts) {
-    _lineInfoMap[source] = LineInfo(lineStarts);
+  /// Set the line information associated with the given [source] to [lineInfo].
+  void setLineInfo(Source source, LineInfo lineInfo) {
+    _lineInfoMap[source] = lineInfo;
   }
 }
 
diff --git a/pkg/analyzer/test/src/dart/ast/parse_base.dart b/pkg/analyzer/test/src/dart/ast/parse_base.dart
index a088dc9..e8e2609 100644
--- a/pkg/analyzer/test/src/dart/ast/parse_base.dart
+++ b/pkg/analyzer/test/src/dart/ast/parse_base.dart
@@ -33,22 +33,23 @@
       );
 
     var token = scanner.tokenize();
+    var lineInfo = LineInfo(scanner.lineStarts);
     featureSet = scanner.featureSet;
 
     var parser = Parser(
       source,
       errorListener,
       featureSet: featureSet,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = true;
 
     var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = LineInfo(scanner.lineStarts);
 
     return ParseResult(
       path,
       content,
-      unit.lineInfo!,
+      unit.lineInfo,
       unit,
       errorListener.errors,
     );
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
index 8d21be1..b8a9282 100644
--- a/pkg/analyzer/test/src/summary/test_strategies.dart
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -25,6 +25,7 @@
       featureSet: featureSet,
     );
   Token token = scanner.tokenize();
+  LineInfo lineInfo = LineInfo(scanner.lineStarts);
   // Pass the feature set from the scanner to the parser
   // because the scanner may have detected a language version comment
   // and downgraded the feature set it holds.
@@ -32,10 +33,9 @@
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: scanner.featureSet,
+    lineInfo: lineInfo,
   );
   var unit = parser.parseCompilationUnit(token);
-  unit.lineInfo = LineInfo(scanner.lineStarts);
-
   unit.languageVersion = LibraryLanguageVersion(
     package: ExperimentStatus.currentVersion,
     override: null,
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index d39b7db..69780494 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -196,7 +196,7 @@
         });
       } else {
         String _formatError(AnalysisError e) {
-          var locationInfo = result.unit.lineInfo!.getLocation(e.offset);
+          var locationInfo = result.unit.lineInfo.getLocation(e.offset);
           return '$locationInfo: ${e.errorCode}: ${e.message}';
         }
 
diff --git a/pkg/analyzer_cli/tool/perf.dart b/pkg/analyzer_cli/tool/perf.dart
index 2ad2424..09aa60a 100644
--- a/pkg/analyzer_cli/tool/perf.dart
+++ b/pkg/analyzer_cli/tool/perf.dart
@@ -79,13 +79,15 @@
 
 /// Uses the diet-parser to parse only directives in [source].
 CompilationUnit parseDirectives(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   var parser = Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  return parser.parseDirectives(token);
+  return parser.parseDirectives(result.tokens);
 }
 
 /// Parses every file in [files] and reports the time spent doing so.
@@ -113,13 +115,15 @@
 
 /// Parse the full body of [source] and return it's compilation unit.
 CompilationUnit parseFull(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   var parser = Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  return parser.parseCompilationUnit(token);
+  return parser.parseCompilationUnit(result.tokens);
 }
 
 /// Report that metric [name] took [time] micro-seconds to process
@@ -207,7 +211,7 @@
 }
 
 /// Scan [source] and return the first token produced by the scanner.
-Token tokenize(Source source) {
+ScannerResult tokenize(Source source) {
   scanTimer.start();
   var contents = source.contents.data;
   scanTotalChars += contents.length;
@@ -224,5 +228,12 @@
     ..preserveComments = false;
   var token = scanner.tokenize();
   scanTimer.stop();
-  return token;
+  return ScannerResult(token, scanner.lineStarts);
+}
+
+class ScannerResult {
+  final Token tokens;
+  final List<int> lineStarts;
+
+  ScannerResult(this.tokens, this.lineStarts);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 142fef3..6ac5cec 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1875,7 +1875,12 @@
       if (initializers.last is SuperInitializer) {
         SuperInitializer superInitializer =
             initializers.last as SuperInitializer;
-        if (libraryBuilder.enableSuperParametersInLibrary) {
+        if (builder.classBuilder.isEnum) {
+          initializers[initializers.length - 1] = buildInvalidInitializer(
+              buildProblem(fasta.messageEnumConstructorSuperInitializer,
+                  superInitializer.fileOffset, noLength))
+            ..parent = constructor;
+        } else if (libraryBuilder.enableSuperParametersInLibrary) {
           Arguments arguments = superInitializer.arguments;
 
           if (positionalSuperParametersAsArguments != null) {
@@ -1901,11 +1906,6 @@
             arguments.named.addAll(namedSuperParametersAsArguments);
             setParents(namedSuperParametersAsArguments, arguments);
           }
-        } else if (libraryBuilder.enableEnhancedEnumsInLibrary) {
-          initializers[initializers.length - 1] = buildInvalidInitializer(
-              buildProblem(fasta.messageEnumConstructorSuperInitializer,
-                  superInitializer.fileOffset, noLength))
-            ..parent = constructor;
         }
       } else if (initializers.last is RedirectingInitializer) {
         RedirectingInitializer redirectingInitializer =
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index 5376f21..7248daf 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -704,7 +704,8 @@
             arguments = new ArgumentsImpl(enumSyntheticArguments);
             setParents(enumSyntheticArguments, arguments);
             if (constructorBuilder == null ||
-                constructorBuilder is! SourceConstructorBuilder) {
+                constructorBuilder is! SourceConstructorBuilder ||
+                !constructorBuilder.isConst) {
               // This can only occur if there enhanced enum features are used
               // when they are not enabled.
               assert(libraryBuilder.loader.hasSeenError);
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart
new file mode 100644
index 0000000..c21d902
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart
@@ -0,0 +1,17 @@
+// 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.
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {
+  new B(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..c38913d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  int field;
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e85d57e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.field);
+  int field;
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..03c7d16
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options b/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options
new file mode 100644
index 0000000..3bea431
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options
@@ -0,0 +1 @@
+--enable-experiment=enhanced-enums,super-parameters
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart
new file mode 100644
index 0000000..7869a49
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum E1 {
+  element;
+
+  E1(); // Error.
+  E1.named(); // Error.
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super(); // Error.
+  const E2.named2() : super(42, "42"); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..4aac745
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E1 { element; E1(); E1.named(); }
+enum E2 { one.named1(), two.named2(); const E2.named1() : super(); const E2.named2() : super(42, "42"); }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..35667795
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::one, self::E2::two];
+  static const field self::E2 one = const self::E2::named1(0, "one");
+  static const field self::E2 two = const self::E2::named2(1, "two");
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart
new file mode 100644
index 0000000..c21d902
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart
@@ -0,0 +1,17 @@
+// 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.
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {
+  new B(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..c38913d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  int field;
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e85d57e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.field);
+  int field;
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..03c7d16
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart b/pkg/front_end/testcases/general/enum_super_constructor.dart
new file mode 100644
index 0000000..6cab395
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart
@@ -0,0 +1,17 @@
+// 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.
+
+// @dart=2.16
+
+enum A {
+  a;
+  A() : super();
+}
+
+enum B {
+  b;
+  const B() : super();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..5f6cef5
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.16
+enum A { a; A() : super(); }
+enum B { b; const B() : super(); }
+main() {}
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' 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'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' 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'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..ce1a0f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' 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'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = const <self::A>[self::A::a];
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = const <self::B>[self::B::b];
+  static const field self::B b = const self::B::•(0, "b");
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' 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'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index a380aef..e5d43b6 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -50,6 +50,7 @@
 enhanced_enums/simple_fields: FormatterCrash
 enhanced_enums/simple_interfaces: FormatterCrash
 enhanced_enums/simple_mixins: FormatterCrash
+enhanced_enums/super_parameters/malformed_constructors: FormatterCrash
 enhanced_enums/supertype_resolved_before_checking: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/call_not_get: FormatterCrash
@@ -84,6 +85,7 @@
 general/constructor_initializer_invalid: FormatterCrash
 general/covariant_generic2: FormatterCrash
 general/duplicated_declarations: FormatterCrash
+general/enum_super_constructor: FormatterCrash
 general/error_recovery/annotations: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_general.crash: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_get.crash: FormatterCrash
diff --git a/pkg/front_end/tool/fasta_perf.dart b/pkg/front_end/tool/fasta_perf.dart
index b9b02a3..6c5a003 100644
--- a/pkg/front_end/tool/fasta_perf.dart
+++ b/pkg/front_end/tool/fasta_perf.dart
@@ -13,6 +13,7 @@
     show readBytesFromFileSync;
 
 import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/fasta/ast_builder.dart';
 import 'package:args/args.dart';
 
@@ -95,11 +96,11 @@
 }
 
 /// Scan [contents] and return the first token produced by the scanner.
-Token tokenize(List<int> contents) {
+ScannerResult tokenize(List<int> contents) {
   scanTimer.start();
-  var token = scan(contents).tokens;
+  var result = scan(contents);
   scanTimer.stop();
-  return token;
+  return result;
 }
 
 /// Scans every file in [files] and reports the time spent doing so.
@@ -173,7 +174,7 @@
   var listener = new DirectiveListenerWithNative();
   new TopLevelParser(listener,
           useImplicitCreationExpression: useImplicitCreationExpressionInCfe)
-      .parseUnit(tokenize(contents));
+      .parseUnit(tokenize(contents).tokens);
   return new Set<String>()
     ..addAll(listener.imports.map((directive) => directive.uri!))
     ..addAll(listener.exports.map((directive) => directive.uri!))
@@ -203,17 +204,19 @@
 
 /// Parse the full body of [source].
 void parseFull(Uri uri, List<int> source) {
-  var tokens = tokenize(source);
-  Parser parser = new Parser(new _PartialAstBuilder(uri),
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
+  Parser parser = new Parser(new _PartialAstBuilder(uri, lineInfo),
       useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
-  parser.parseUnit(tokens);
+  parser.parseUnit(result.tokens);
 }
 
 // Note: AstBuilder doesn't build compilation-units or classes, only method
 // bodies. So this listener is not feature complete.
 class _PartialAstBuilder extends AstBuilder {
-  _PartialAstBuilder(Uri uri)
-      : super(null, uri, true, FeatureSet.latestLanguageVersion(), uri);
+  _PartialAstBuilder(Uri uri, LineInfo lineInfo)
+      : super(
+            null, uri, true, FeatureSet.latestLanguageVersion(), lineInfo, uri);
 }
 
 // Invoke the fasta kernel generator for the program starting in [entryUri]
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index be32427..f7ebb13 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -96,13 +96,15 @@
 
 /// Uses the diet-parser to parse only directives in [source].
 CompilationUnit parseDirectives(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   var parser = new Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  return parser.parseDirectives(token);
+  return parser.parseDirectives(result.tokens);
 }
 
 /// Parses every file in [files] and reports the time spent doing so.
@@ -119,14 +121,16 @@
 
 /// Parse the full body of [source] and return it's compilation unit.
 CompilationUnit parseFull(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   parseTimer.start();
   var parser = new Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  var unit = parser.parseCompilationUnit(token);
+  var unit = parser.parseCompilationUnit(result.tokens);
   parseTimer.stop();
   return unit;
 }
@@ -218,7 +222,7 @@
 }
 
 /// Scan [source] and return the first token produced by the scanner.
-Token tokenize(Source source) {
+ScannerResult tokenize(Source source) {
   scanTimer.start();
   // TODO(sigmund): is there a way to scan from a random-access-file without
   // first converting to String?
@@ -232,7 +236,7 @@
     }
   }
   scanTimer.stop();
-  return token;
+  return result;
 }
 
 String _findSdkPath() {
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index 2091796..afb9bd9 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -29,7 +29,7 @@
   factory CodeReference.fromAstNode(AstNode node) {
     var compilationUnit = node.thisOrAncestorOfType<CompilationUnit>()!;
     var source = compilationUnit.declaredElement!.source;
-    var location = compilationUnit.lineInfo!.getLocation(node.offset);
+    var location = compilationUnit.lineInfo.getLocation(node.offset);
     return CodeReference(source.fullName, node.offset, location.lineNumber,
         location.columnNumber, _computeEnclosingName(node));
   }
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index d7cfb1c..5784c34 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -3515,7 +3515,7 @@
       buffer.write(' in "');
       buffer.write(node.toSource());
       buffer.write('" on line ');
-      buffer.write(unit.lineInfo!.getLocation(node.offset).lineNumber);
+      buffer.write(unit.lineInfo.getLocation(node.offset).lineNumber);
       buffer.write(' of "');
       buffer.write(unit.declaredElement!.source.fullName);
       buffer.write('"');
diff --git a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
index c6f4bb7..15b67af 100644
--- a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
@@ -433,7 +433,7 @@
         var edits = info != null
             ? _computeEdits(info, sourceOffset, result)
             : <EditDetail>[];
-        var lineNumber = lineInfo!.getLocation(sourceOffset).lineNumber;
+        var lineNumber = lineInfo.getLocation(sourceOffset).lineNumber;
         var traces = info == null
             ? const <TraceInfo>[]
             : _computeTraces(info.fixReasons);
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index fde5e28..e9b8d09 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -976,7 +976,7 @@
     buffer.write(' in "');
     buffer.write(node.toSource());
     buffer.write('" on line ');
-    buffer.write(unit.lineInfo!.getLocation(node.offset).lineNumber);
+    buffer.write(unit.lineInfo.getLocation(node.offset).lineNumber);
     buffer.write(' of "');
     buffer.write(unit.declaredElement!.source.fullName);
     buffer.write('"');
diff --git a/pkg/nnbd_migration/test/migration_visitor_test_base.dart b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
index 3f57caae..c60d2f8 100644
--- a/pkg/nnbd_migration/test/migration_visitor_test_base.dart
+++ b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
@@ -414,7 +414,7 @@
   /// file [offset], with the given [function] name.
   TypeMatcher<CodeReference> matchCodeRef(
       {required int offset, required String function}) {
-    var location = testUnit!.lineInfo!.getLocation(offset);
+    var location = testUnit!.lineInfo.getLocation(offset);
     return TypeMatcher<CodeReference>()
         .having((cr) => cr.line, 'line', location.lineNumber)
         .having((cr) => cr.column, 'column', location.columnNumber)
diff --git a/pkg/scrape/lib/scrape.dart b/pkg/scrape/lib/scrape.dart
index 1665006..f6c9989 100644
--- a/pkg/scrape/lib/scrape.dart
+++ b/pkg/scrape/lib/scrape.dart
@@ -267,9 +267,11 @@
     scanner.configureFeatures(
         featureSet: featureSet, featureSetForOverriding: featureSet);
     var startToken = scanner.tokenize();
+    var lineInfo = LineInfo(scanner.lineStarts);
 
     // Parse it.
-    var parser = Parser(stringSource, errorListener, featureSet: featureSet);
+    var parser = Parser(stringSource, errorListener,
+        featureSet: featureSet, lineInfo: lineInfo);
     parser.enableOptionalNewAndConst = true;
     parser.enableSetLiterals = true;
 
@@ -301,8 +303,6 @@
       return;
     }
 
-    var lineInfo = LineInfo(scanner.lineStarts);
-
     _scrapedFileCount++;
     _scrapedLineCount += lineInfo.lineCount;
 
diff --git a/tools/VERSION b/tools/VERSION
index f273964..4e9a74d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 167
+PRERELEASE 168
 PRERELEASE_PATCH 0
\ No newline at end of file
