Version 2.16.0-82.0.dev

Merge commit 'fc9f7e3372bfdc8fcc798364663db6d2d3b7524d' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
index 099319f..07d1752 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
@@ -451,6 +451,7 @@
 bool looksLikeName(Token token) {
   return token.kind == IDENTIFIER_TOKEN ||
       optional('this', token) ||
+      optional('super', token) ||
       (token.isIdentifier &&
           // Although `typedef` is a legal identifier,
           // type `typedef` identifier is not legal and in this situation
@@ -794,7 +795,9 @@
         if (optional('?', next)) {
           next = next.next!;
         }
-        if (!(next.isIdentifier || optional('this', next))) {
+        if (!(next.isIdentifier ||
+            optional('this', next) ||
+            optional('super', next))) {
           break; // `Function` used as the name in a function declaration.
         }
       }
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 20115cd..b4ff551 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -2120,7 +2120,6 @@
         node, Getter_NodeReplacerTest_test_superConstructorInvocation_2());
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47741')
   void test_superFormalParameter() {
     var findNode = _parseStringToFindNode(r'''
 class A {
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index a545f1a..3e75181 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -21,6 +21,7 @@
 import 'src/commands/compile.dart';
 import 'src/commands/create.dart';
 import 'src/commands/debug_adapter.dart';
+import 'src/commands/doc.dart';
 import 'src/commands/fix.dart';
 import 'src/commands/language_server.dart';
 import 'src/commands/migrate.dart';
@@ -114,6 +115,7 @@
     addCommand(CreateCommand(verbose: verbose));
     addCommand(DebugAdapterCommand(verbose: verbose));
     addCommand(CompileCommand(verbose: verbose));
+    addCommand(DocCommand(verbose: verbose));
     addCommand(DevToolsCommand(
       verbose: verbose,
       customDevToolsPath: sdk.devToolsBinaries,
diff --git a/pkg/dartdev/lib/src/commands/doc.dart b/pkg/dartdev/lib/src/commands/doc.dart
new file mode 100644
index 0000000..d039183
--- /dev/null
+++ b/pkg/dartdev/lib/src/commands/doc.dart
@@ -0,0 +1,89 @@
+// 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.
+
+import 'dart:async';
+import 'dart:io' as io;
+
+import 'package:dartdoc/dartdoc.dart';
+import 'package:dartdoc/options.dart';
+import 'package:path/path.dart' as path;
+
+import '../core.dart';
+import '../sdk.dart';
+
+/// A command to create a new project from a set of templates.
+class DocCommand extends DartdevCommand {
+  static const String cmdName = 'doc';
+
+  DocCommand({bool verbose = false})
+      : super(
+          cmdName,
+          'Generate HTML API documentation from Dart documentation comments.',
+          verbose,
+        ) {
+    argParser.addOption(
+      'output-dir',
+      abbr: 'o',
+      defaultsTo: path.join('.', 'doc', 'api'),
+      help: 'Output directory',
+    );
+    argParser.addFlag(
+      'validate-links',
+      negatable: true,
+      help: 'Display context aware warnings for broken links (slow)',
+    );
+  }
+
+  @override
+  String get invocation => '${super.invocation} <input directory>';
+
+  @override
+  FutureOr<int> run() async {
+    // At least one argument, the input directory, is required.
+    if (argResults.rest.isEmpty) {
+      usageException("Error: Input directory not specified");
+    }
+
+    // Determine input directory.
+    final dir = io.Directory(argResults.rest[0]);
+    if (!dir.existsSync()) {
+      usageException("Error: Input directory doesn't exist: ${dir.path}");
+    }
+
+    // Parse options.
+    final options = [
+      '--input=${dir.path}',
+      '--output=${argResults['output-dir']}',
+    ];
+    if (argResults['validate-links']) {
+      options.add('--validate-links');
+    } else {
+      options.add('--no-validate-links');
+    }
+
+    // Specify where dartdoc resources are located.
+    final resourcesPath =
+        path.absolute(sdk.sdkPath, 'bin', 'resources', 'dartdoc', 'resources');
+    options.add('--resources-dir=$resourcesPath');
+
+    final config = await parseOptions(pubPackageMetaProvider, options);
+    if (config == null) {
+      // There was an error while parsing options.
+      return 2;
+    }
+
+    // Call dartdoc.
+    if (verbose) {
+      log.stdout('Calling dartdoc with the following options: $options');
+    }
+    final packageConfigProvider = PhysicalPackageConfigProvider();
+    final packageBuilder = PubPackageBuilder(
+        config, pubPackageMetaProvider, packageConfigProvider);
+    final dartdoc = config.generateDocs
+        ? await Dartdoc.fromContext(config, packageBuilder)
+        : await Dartdoc.withEmptyGenerator(config, packageBuilder);
+    dartdoc.executeGuarded();
+    return 0;
+  }
+}
diff --git a/pkg/dartdev/pubspec.yaml b/pkg/dartdev/pubspec.yaml
index 0145fab..aa4f922 100644
--- a/pkg/dartdev/pubspec.yaml
+++ b/pkg/dartdev/pubspec.yaml
@@ -17,6 +17,7 @@
   dart2native:
     path: ../dart2native
   dart_style: any
+  dartdoc: any
   dds:
     path: ../dds
   devtools_server: any
diff --git a/pkg/dartdev/test/commands/doc_test.dart b/pkg/dartdev/test/commands/doc_test.dart
new file mode 100644
index 0000000..9f57108
--- /dev/null
+++ b/pkg/dartdev/test/commands/doc_test.dart
@@ -0,0 +1,70 @@
+// 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.
+
+import 'package:test/test.dart';
+
+import '../utils.dart';
+
+const int compileErrorExitCode = 64;
+
+void main() {
+  group('doc', defineCompileTests, timeout: longTimeout);
+}
+
+void defineCompileTests() {
+  test('Passing no args fails', () async {
+    final p = project();
+    var result = await p.run(['doc']);
+    expect(result.stderr, contains('Input directory not specified'));
+    expect(result.exitCode, compileErrorExitCode);
+  });
+
+  test('--help', () async {
+    final p = project();
+    final result = await p.run(['doc', '--help']);
+    expect(
+      result.stdout,
+      contains('Usage: dart doc [arguments] <input directory>'),
+    );
+
+    expect(result.exitCode, 0);
+  });
+
+  test('Document a library', () async {
+    final source = '''
+/// This is Foo. It uses [Bar].
+class Foo {
+    Bar bar;
+}
+
+/// Bar is very nice.
+class Bar {
+    _i = 42;
+}
+    ''';
+
+    final p = project(mainSrc: 'void main() { print("Hello, World"); }');
+    p.file('lib/foo.dart', source);
+    final result = await p.run(['doc', '--validate-links', p.dirPath]);
+    print(
+        'exit: ${result.exitCode}, stderr:\n${result.stderr}\nstdout:\n${result.stdout}');
+    expect(result.stdout, contains('Documenting dartdev_temp'));
+  });
+
+  test('Document a library with broken link is flagged', () async {
+    final source = '''
+/// This is Foo. It uses [Baz].
+class Foo {
+  //  Bar bar;
+}
+    ''';
+
+    final p = project(mainSrc: 'void main() { print("Hello, World"); }');
+    p.file('lib/foo.dart', source);
+    final result = await p.run(['doc', '--validate-links', p.dirPath]);
+    print(
+        'exit: ${result.exitCode}, stderr:\n${result.stderr}\nstdout:\n${result.stdout}');
+    expect(result.stdout, contains('Documenting dartdev_temp'));
+  });
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
index 769412a..04790ba 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
@@ -1471,28 +1471,27 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              isReservedKeyword(super)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(super)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
-                  listener: handleIdentifier(super, fieldDeclaration)
-                parseFieldInitializerOpt(super, super, null, null, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
-              listener: endMember()
+              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                    reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                      listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                    listener: handleIdentifier(super, fieldDeclaration)
+                  parseFieldInitializerOpt(super, super, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                    listener: beginFieldInitializer(=)
+                    parseExpression(=)
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseLiteralInt(=)
+                              listener: handleLiteralInt(42)
+                    listener: endFieldInitializer(=, ;)
+                  listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
               parseMetadataStar(;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
index bf58a68..eb90b675 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
@@ -308,6 +308,14 @@
   int super(int x) {
       ^^^^^
 
+parser/error_recovery/keyword_named_class_methods:282:7: Expected ';' after this.
+  int super(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:282:12: Expected an identifier, but got '('.
+  int super(int x) {
+           ^
+
 parser/error_recovery/keyword_named_class_methods:287:7: 'switch' can't be used as an identifier because it's a keyword.
   int switch(int x) {
       ^^^^^^
@@ -3883,12 +3891,23 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, super)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(super)
             handleType(int, null)
             handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
-            handleIdentifier(super, methodDeclaration)
+            handleIdentifier(super, fieldDeclaration)
+            handleNoFieldInitializer(()
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+          endClassFields(null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(()
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, ()
+            handleNoType(;)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+            handleIdentifier(, methodDeclaration)
             handleNoTypeVariables(()
             beginFormalParameters((, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
@@ -3937,7 +3956,7 @@
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endClassMethod(null, , (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4743,7 +4762,7 @@
             endBlockFunctionBody(2, {, })
           endClassMethod(null, int, (, null, })
         endMember()
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
index 22c9cba..08d5d98 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -8560,141 +8560,164 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              isReservedKeyword(super)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, super)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(super)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-                    listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
-                  listener: handleIdentifier(super, methodDeclaration)
-                parseQualifiedRestOpt(super, methodDeclarationContinuation)
-                parseMethodTypeVar(super)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(super, super, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(super, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                        parseMetadataStar(()
-                          listener: beginMetadataStar(int)
-                          listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
-                        listener: handleIdentifier(int, typeReference)
-                        listener: handleNoTypeArguments(x)
-                        listener: handleType(int, null)
-                        ensureIdentifier(int, formalParameterDeclaration)
-                          listener: handleIdentifier(x, formalParameterDeclaration)
-                        listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
+              recoverFromInvalidMember(int, }, null, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                    reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                      listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+                    listener: handleIdentifier(super, fieldDeclaration)
+                  parseFieldInitializerOpt(super, super, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                    listener: handleNoFieldInitializer(()
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endMember()
+            notEofOrValue(}, ()
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(()
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
+                parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, ()
+                  listener: handleNoType(;)
+                  ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                    insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
+                        listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                      rewriter()
+                    listener: handleIdentifier(, methodDeclaration)
+                  parseQualifiedRestOpt(, methodDeclarationContinuation)
+                  parseMethodTypeVar()
+                    listener: handleNoTypeVariables(()
+                  parseGetterOrFormalParameters(, (, false, MemberKind.NonStaticMethod)
+                    parseFormalParameters(, MemberKind.NonStaticMethod)
+                      parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                        listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                        parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                          parseMetadataStar(()
+                            listener: beginMetadataStar(int)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                          listener: handleIdentifier(int, typeReference)
+                          listener: handleNoTypeArguments(x)
+                          listener: handleType(int, null)
+                          ensureIdentifier(int, formalParameterDeclaration)
+                            listener: handleIdentifier(x, formalParameterDeclaration)
+                          listener: handleFormalParameterWithoutValue())
+                          listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                  parseInitializersOpt())
+                    listener: handleNoInitializers()
+                  parseAsyncModifierOpt())
+                    listener: handleAsyncModifier(null, null)
+                    inPlainSync()
                   inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  listener: beginBlockFunctionBody({)
-                  notEofOrValue(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        isNextIdentifier(()
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(return)
-                        parseStatement())
-                          parseStatementX())
-                            parseReturnStatement())
-                              listener: beginReturnStatement(return)
-                              parseExpression(return)
-                                parsePrecedenceExpression(return, 1, true)
-                                  parseUnaryExpression(return, true)
-                                    parsePrimary(return, expression)
-                                      parseLiteralInt(return)
-                                        listener: handleLiteralInt(42)
-                              ensureSemicolon(42)
-                              listener: endReturnStatement(true, return, ;)
-                              inGenerator()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseSuperExpression(return, expression)
-                                  listener: handleSuperExpression(super, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArguments(super)
-                                    parseArgumentsRest(()
-                                      listener: beginArguments(()
-                                      parseExpression(()
-                                        parsePrecedenceExpression((, 1, true)
-                                          parseUnaryExpression((, true)
-                                            parsePrimary((, expression)
-                                              parseSendOrFunctionLiteral((, expression)
-                                                parseSend((, expression)
-                                                  isNextIdentifier(()
-                                                  ensureIdentifier((, expression)
-                                                    listener: handleIdentifier(x, expression)
-                                                  listener: handleNoTypeArguments(-)
-                                                  parseArgumentsOpt(x)
-                                                    listener: handleNoArguments(-)
-                                                  listener: handleSend(x, -)
-                                          listener: beginBinaryExpression(-)
-                                          parsePrecedenceExpression(-, 14, true)
-                                            parseUnaryExpression(-, true)
-                                              parsePrimary(-, expression)
-                                                parseLiteralInt(-)
-                                                  listener: handleLiteralInt(1)
-                                          listener: endBinaryExpression(-)
-                                      listener: endArguments(1, (, ))
-                                  listener: handleSend(super, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
+                  parseFunctionBody(), false, true)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrValue(}, if)
+                    parseStatement({)
+                      parseStatementX({)
+                        parseIfStatement({)
+                          listener: beginIfStatement(if)
+                          ensureParenthesizedCondition(if)
+                            parseExpressionInParenthesisRest(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(==)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(==)
+                                          listener: handleSend(x, ==)
+                                  listener: beginBinaryExpression(==)
+                                  parsePrecedenceExpression(==, 8, true)
+                                    parseUnaryExpression(==, true)
+                                      parsePrimary(==, expression)
+                                        parseLiteralInt(==)
+                                          listener: handleLiteralInt(0)
+                                  listener: endBinaryExpression(==)
+                              ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition(()
+                          listener: beginThenStatement(return)
+                          parseStatement())
+                            parseStatementX())
+                              parseReturnStatement())
+                                listener: beginReturnStatement(return)
+                                parseExpression(return)
+                                  parsePrecedenceExpression(return, 1, true)
+                                    parseUnaryExpression(return, true)
+                                      parsePrimary(return, expression)
+                                        parseLiteralInt(return)
+                                          listener: handleLiteralInt(42)
+                                ensureSemicolon(42)
+                                listener: endReturnStatement(true, return, ;)
+                                inGenerator()
+                          listener: endThenStatement(;)
+                          listener: endIfStatement(if, null)
+                    notEofOrValue(}, return)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseReturnStatement(;)
+                          listener: beginReturnStatement(return)
+                          parseExpression(return)
+                            parsePrecedenceExpression(return, 1, true)
+                              parseUnaryExpression(return, true)
+                                parsePrimary(return, expression)
+                                  parseSuperExpression(return, expression)
+                                    listener: handleSuperExpression(super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    isNextIdentifier(()
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                    listener: handleSend(super, +)
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true)
+                                parseUnaryExpression(+, true)
+                                  parsePrimary(+, expression)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+)
+                          ensureSemicolon(1)
+                          listener: endReturnStatement(true, return, ;)
+                          inGenerator()
+                    notEofOrValue(}, })
+                    listener: endBlockFunctionBody(2, {, })
+                  listener: endClassMethod(null, , (, null, })
+                listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
               parseMetadataStar(})
@@ -10766,7 +10789,7 @@
                 listener: endClassMethod(null, int, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
index 70d958e..5eaa7cd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
@@ -281,7 +281,7 @@
 return static(x-1) + 1;
 }
 
-int super(int x) {
+int super;*synthetic*(int x) {
 if (x == 0) return 42;
 return super(x-1) + 1;
 }
@@ -629,7 +629,7 @@
 return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
 }[SimpleToken]
 
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+int[StringToken] super[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
 if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
 return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
 }[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
index b2228b8..a0b0eaa 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
@@ -1444,14 +1444,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      isReservedKeyword(super)
-      indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, true)
+      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(super)
         listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           listener: handleIdentifier(super, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
index bad4dea..09deafa 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
@@ -8308,14 +8308,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      isReservedKeyword(super)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, super, true)
+      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, super, false)
         listener: beginTopLevelMethod(}, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(super)
         listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           listener: handleIdentifier(super, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart
new file mode 100644
index 0000000..a0f94cc
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart
@@ -0,0 +1,51 @@
+// 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.
+
+class A1 {
+  final int foo;
+  A1(int this.foo);
+}
+
+class B1 extends A1 {
+  B1(int super.foo);
+}
+
+class A2 {
+  final int Function(int) foo;
+  A2(int Function(int) this.foo);
+}
+
+class B2 extends A2 {
+  B2(int Function(int) super.foo);
+}
+
+class A3 {
+  final int Function(int) foo;
+  A3(int this.foo(int));
+}
+
+class B3 extends A3 {
+  B3(int super.foo(int));
+}
+
+class A4 {
+  final void Function() Function(void Function()) foo;
+  A4(void Function() this.foo(void Function()));
+}
+
+class B4 extends A4 {
+  B4(void Function() super.foo(void Function()));
+}
+
+
+class A5 {
+  final void Function() Function(void Function()) foo;
+  A5(void Function() Function(void Function()) this.foo);
+}
+
+class B5 extends A5 {
+  B5(void Function() Function(void Function()) super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.strong.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.strong.expect
new file mode 100644
index 0000000..aecf2d6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.strong.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+//   B1(int super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+//   B2(int Function(int) super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+//   B3(int super.foo(int));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+//   B4(void Function() super.foo(void Function()));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+//   B5(void Function() Function(void Function()) super.foo);
+//   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+  B1(int super.foo);
+  ^^"
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+  B2(int Function(int) super.foo);
+  ^^"
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+  B3(int super.foo(int));
+  ^^"
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+  B4(void Function() super.foo(void Function()));
+  ^^"
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+  B5(void Function() Function(void Function()) super.foo);
+  ^^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.strong.transformed.expect
new file mode 100644
index 0000000..aecf2d6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.strong.transformed.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+//   B1(int super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+//   B2(int Function(int) super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+//   B3(int super.foo(int));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+//   B4(void Function() super.foo(void Function()));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+//   B5(void Function() Function(void Function()) super.foo);
+//   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+  B1(int super.foo);
+  ^^"
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+  B2(int Function(int) super.foo);
+  ^^"
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+  B3(int super.foo(int));
+  ^^"
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+  B4(void Function() super.foo(void Function()));
+  ^^"
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+  B5(void Function() Function(void Function()) super.foo);
+  ^^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.textual_outline.expect
new file mode 100644
index 0000000..f29b981
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.textual_outline.expect
@@ -0,0 +1,36 @@
+class A1 {
+  final int foo;
+  A1(int this.foo);
+}
+class B1 extends A1 {
+  B1(int super.foo);
+}
+class A2 {
+  final int Function(int) foo;
+  A2(int Function(int) this.foo);
+}
+class B2 extends A2 {
+  B2(int Function(int) super.foo);
+}
+class A3 {
+  final int Function(int) foo;
+  A3(int this.foo(int));
+}
+class B3 extends A3 {
+  B3(int super.foo(int));
+}
+class A4 {
+  final void Function() Function(void Function()) foo;
+  A4(void Function() this.foo(void Function()));
+}
+class B4 extends A4 {
+  B4(void Function() super.foo(void Function()));
+}
+class A5 {
+  final void Function() Function(void Function()) foo;
+  A5(void Function() Function(void Function()) this.foo);
+}
+class B5 extends A5 {
+  B5(void Function() Function(void Function()) super.foo);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.expect
new file mode 100644
index 0000000..aecf2d6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+//   B1(int super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+//   B2(int Function(int) super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+//   B3(int super.foo(int));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+//   B4(void Function() super.foo(void Function()));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+//   B5(void Function() Function(void Function()) super.foo);
+//   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+  B1(int super.foo);
+  ^^"
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+  B2(int Function(int) super.foo);
+  ^^"
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+  B3(int super.foo(int));
+  ^^"
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+  B4(void Function() super.foo(void Function()));
+  ^^"
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+  B5(void Function() Function(void Function()) super.foo);
+  ^^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.outline.expect
new file mode 100644
index 0000000..70b9d6e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.outline.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.transformed.expect
new file mode 100644
index 0000000..aecf2d6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameter.dart.weak.transformed.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+//   B1(int super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+//   B2(int Function(int) super.foo);
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+//   B3(int super.foo(int));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+//   B4(void Function() super.foo(void Function()));
+//   ^^
+//
+// pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+//   B5(void Function() Function(void Function()) super.foo);
+//   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:11:3: Error: The superclass, 'A1', has no unnamed constructor that takes no arguments.
+  B1(int super.foo);
+  ^^"
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:20:3: Error: The superclass, 'A2', has no unnamed constructor that takes no arguments.
+  B2(int Function(int) super.foo);
+  ^^"
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:29:3: Error: The superclass, 'A3', has no unnamed constructor that takes no arguments.
+  B3(int super.foo(int));
+  ^^"
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:38:3: Error: The superclass, 'A4', has no unnamed constructor that takes no arguments.
+  B4(void Function() super.foo(void Function()));
+  ^^"
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/super_parameters/typed_super_parameter.dart:48:3: Error: The superclass, 'A5', has no unnamed constructor that takes no arguments.
+  B5(void Function() Function(void Function()) super.foo);
+  ^^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 956276e..bed6b86 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -200,6 +200,7 @@
 regress/issue_41265.crash: Crash
 regress/issue_41265.crash: FormatterCrash
 super_parameters/simple: FormatterCrash
+super_parameters/typed_super_parameter: FormatterCrash
 triple_shift/invalid_operator: FormatterCrash
 variance/class_type_parameter_modifier: FormatterCrash
 variance/generic_covariance_sound_variance: FormatterCrash
diff --git a/sdk/bin/dartdoc b/sdk/bin/dartdoc
index e9584c1..f7ad682 100755
--- a/sdk/bin/dartdoc
+++ b/sdk/bin/dartdoc
@@ -23,4 +23,4 @@
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "--packages=$BIN_DIR/resources/dartdoc/.packages" "$SNAPSHOT" "$@"
+exec "$DART" "--packages=$BIN_DIR/resources/dartdoc/.packages" "$SNAPSHOT" "--resources-dir=$BIN_DIR/resources/dartdoc/resources/" "$@"
diff --git a/tools/VERSION b/tools/VERSION
index 0416a68..289b3c5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 16
 PATCH 0
-PRERELEASE 81
+PRERELEASE 82
 PRERELEASE_PATCH 0
\ No newline at end of file