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