Version 2.17.0-168.0.dev

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