Version 2.15.0-67.0.dev
Merge commit 'ff2e3c2df0e574100b55b0762bfbeac998722960' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1ab41b8..13c9e52 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -45,6 +45,32 @@
[#1785]: https://github.com/dart-lang/language/issues/1785
+- Restrictions on members of a class with a constant constructor are relaxed
+ such that they only apply when the class has a _generative_ constant
+ constructor. For example, this used to be an error, but is now permitted:
+
+ ```dart
+ abstract class A {
+ var v1;
+ late final v2 = Random().nextInt(10);
+ late final v3;
+ const factory A() = B;
+ }
+
+ class B implements A {
+ get v1 => null;
+ set v1(_) => throw 'Cannot mutate B.v1';
+ final v2 = 0;
+ final v3;
+ set v3(_) => throw 'Cannot initialize B.v3';
+ const B([this.v3 = 1]);
+ }
+ ```
+
+ This implements a relaxation of the specified rule for a `late final`
+ instance variable, and it brings the implementation behavior in line with
+ the specification in all other cases.
+
### Tools
#### Dart command line
@@ -223,13 +249,13 @@
#### Linter
Updated the Linter to `1.10.0`, which includes changes that
-- improves regular expression parsing performance for common checks
+- improves regular expression parsing performance for common checks
(`camel_case_types`, `file_names`, etc.).
- (internal) migrates to analyzer 2.1.0 APIs.
-- fixes false positive in `use_build_context_synchronously` in awaits inside
+- fixes false positive in `use_build_context_synchronously` in awaits inside
anonymous functions.
- fixes `overridden_fields` false positive w/ static fields.
-- fixes false positive in `avoid_null_checks_in_equality_operators` w/
+- fixes false positive in `avoid_null_checks_in_equality_operators` w/
non-nullable params.
- fixes false positive for deferred imports in `prefer_const_constructors`.
- marks `avoid_dynamic_calls` stable.
@@ -257,7 +283,7 @@
- fix `curly_braces_in_flow_control_structures` to properly flag terminating `else-if`
blocks.
- improve `always_specify_types` to support type aliases.
-- fix a false positive in `unnecessary_string_interpolations` w/ nullable interpolated
+- fix a false positive in `unnecessary_string_interpolations` w/ nullable interpolated
strings
- fix a false positive in `avoid_function_literals_in_foreach_calls` for nullable
iterables.
@@ -345,7 +371,7 @@
`--legacy-javascript` flag will let you opt out of this update, but this
flag will be removed in a future release. Modern browsers will not be
affected, as Dart2JS continues to support [last two major releases][1] of
- Edge, Safari, Firefox, and Chrome.
+ Edge, Safari, Firefox, and Chrome.
[#46545]: https://github.com/dart-lang/sdk/issues/46545
[1]: https://dart.dev/faq#q-what-browsers-do-you-support-as-javascript-compilation-targets
diff --git a/DEPS b/DEPS
index 7d53ee7..f73aea5 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
# co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
# hashes. It requires access to the dart-build-access group, which EngProd
# has.
- "co19_rev": "3bbf92369652b6ba0b347516dabd1ed2193eb5c6",
+ "co19_rev": "cc4df792d0f02f15bfe04911c1f856b90cb7cbf4",
"co19_2_rev": "7637bcb24abf21b5e2f8dd24d3fe619f777391f5",
# The internal benchmarks to use. See go/dart-benchmarks-internal
@@ -105,7 +105,7 @@
# For more details, see https://github.com/dart-lang/sdk/issues/30164
"dart_style_rev": "14d9b6fd58cc4744676c12be3cc5eee2a779db82",
- "dartdoc_rev" : "a4ca86f9bf732d7adc4506f7373e0ed63251b646",
+ "dartdoc_rev" : "348cbd7204645f99074bf7873af8b6ba6d34ceb0",
"devtools_rev" : "2b47d9ed486479153ca2fd038000950674ed1beb",
"jsshell_tag": "version:88.0",
"ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
index 808f5f9..0a6ab6c 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
@@ -776,6 +776,9 @@
: super(type, value, offset);
@override
+ Token? beforeSynthetic;
+
+ @override
bool get isSynthetic => true;
@override
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart
index 97c17e9..53dbe5f 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/covariant_opt_out.dart
@@ -111,11 +111,7 @@
/*cfe|cfe:builder.member: D4._simpleInstanceOfTrue:bool* Function(dynamic)**/
/*cfe|cfe:builder.member: D4.==:bool* Function(dynamic)**/
abstract class D4 implements C, B {
- /// TODO: Solve CFE / analyzer difference.
- /// In opt-out library we can choose any valid override, so the analyzer
- /// takes the first one.
- /*cfe|cfe:builder.member: D4.method:void Function(num*)**/
- /*analyzer.member: D4.method:void Function(int*)**/
+ /*member: D4.method:void Function(num*)**/
}
/*class: D5:A,C,D5,Object*/
@@ -192,9 +188,5 @@
/*cfe|cfe:builder.member: G2._simpleInstanceOfTrue:bool* Function(dynamic)**/
/*cfe|cfe:builder.member: G2.==:bool* Function(dynamic)**/
abstract class G2 implements F, E {
- /// TODO: Solve CFE / analyzer difference.
- /// In opt-out library we can choose any valid override, so the analyzer
- /// takes the first one.
- /*cfe|cfe:builder.member: G2.method:void Function(num*)**/
- /*analyzer.member: G2.method:void Function(int*)**/
+ /*member: G2.method:void Function(num*)**/
}
diff --git a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
index 54ffabf..5eaa592 100644
--- a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
+++ b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
@@ -166,6 +166,8 @@
return protocol.ElementKind.MIXIN;
case DeclarationKind.SETTER:
return protocol.ElementKind.SETTER;
+ case DeclarationKind.TYPE_ALIAS:
+ return protocol.ElementKind.TYPE_ALIAS;
case DeclarationKind.VARIABLE:
return protocol.ElementKind.TOP_LEVEL_VARIABLE;
}
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index da9bb2a..795b45e 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -195,8 +195,12 @@
case dec.DeclarationKind.CONSTRUCTOR:
return const [lsp.CompletionItemKind.Constructor];
case dec.DeclarationKind.ENUM:
- case dec.DeclarationKind.ENUM_CONSTANT:
return const [lsp.CompletionItemKind.Enum];
+ case dec.DeclarationKind.ENUM_CONSTANT:
+ return const [
+ lsp.CompletionItemKind.EnumMember,
+ lsp.CompletionItemKind.Enum,
+ ];
case dec.DeclarationKind.FUNCTION:
return const [lsp.CompletionItemKind.Function];
case dec.DeclarationKind.FUNCTION_TYPE_ALIAS:
@@ -205,6 +209,8 @@
return const [lsp.CompletionItemKind.Property];
case dec.DeclarationKind.SETTER:
return const [lsp.CompletionItemKind.Property];
+ case dec.DeclarationKind.TYPE_ALIAS:
+ return const [lsp.CompletionItemKind.Class];
case dec.DeclarationKind.VARIABLE:
return const [lsp.CompletionItemKind.Variable];
default:
@@ -248,6 +254,8 @@
return const [lsp.SymbolKind.Class];
case server.DeclarationKind.SETTER:
return const [lsp.SymbolKind.Property];
+ case server.DeclarationKind.TYPE_ALIAS:
+ return const [lsp.SymbolKind.Class];
case server.DeclarationKind.VARIABLE:
return const [lsp.SymbolKind.Variable];
default:
@@ -411,8 +419,12 @@
case server.ElementKind.CONSTRUCTOR_INVOCATION:
return const [lsp.CompletionItemKind.Constructor];
case server.ElementKind.ENUM:
- case server.ElementKind.ENUM_CONSTANT:
return const [lsp.CompletionItemKind.Enum];
+ case server.ElementKind.ENUM_CONSTANT:
+ return const [
+ lsp.CompletionItemKind.EnumMember,
+ lsp.CompletionItemKind.Enum,
+ ];
case server.ElementKind.FIELD:
return const [lsp.CompletionItemKind.Field];
case server.ElementKind.FILE:
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
index ab5399b..4d44191 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
@@ -135,6 +135,7 @@
HighlightRegionType.TOP_LEVEL_VARIABLE: SemanticTokenTypes.variable,
HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION:
SemanticTokenTypes.variable,
+ HighlightRegionType.TYPE_ALIAS: SemanticTokenTypes.type,
HighlightRegionType.TYPE_NAME_DYNAMIC: SemanticTokenTypes.type,
HighlightRegionType.TYPE_PARAMETER: SemanticTokenTypes.typeParameter,
HighlightRegionType.UNRESOLVED_INSTANCE_MEMBER_REFERENCE:
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index ac50553..632f7f8 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -152,6 +152,8 @@
return protocol.ElementKind.MIXIN;
case search.DeclarationKind.SETTER:
return protocol.ElementKind.SETTER;
+ case search.DeclarationKind.TYPE_ALIAS:
+ return protocol.ElementKind.TYPE_ALIAS;
case search.DeclarationKind.VARIABLE:
return protocol.ElementKind.TOP_LEVEL_VARIABLE;
default:
diff --git a/pkg/analysis_server/lib/src/search/workspace_symbols.dart b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
index 71d3b9b..bbcf5ac 100644
--- a/pkg/analysis_server/lib/src/search/workspace_symbols.dart
+++ b/pkg/analysis_server/lib/src/search/workspace_symbols.dart
@@ -50,6 +50,7 @@
METHOD,
MIXIN,
SETTER,
+ TYPE_ALIAS,
VARIABLE
}
@@ -186,6 +187,8 @@
return DeclarationKind.GETTER;
case ad.DeclarationKind.SETTER:
return DeclarationKind.SETTER;
+ case ad.DeclarationKind.TYPE_ALIAS:
+ return DeclarationKind.TYPE_ALIAS;
case ad.DeclarationKind.VARIABLE:
return DeclarationKind.VARIABLE;
default:
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index b71fa3e..61eea1c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -187,6 +187,7 @@
kinds.add(protocol.ElementKind.ENUM);
kinds.add(protocol.ElementKind.FUNCTION_TYPE_ALIAS);
kinds.add(protocol.ElementKind.MIXIN);
+ kinds.add(protocol.ElementKind.TYPE_ALIAS);
}
if (opType.includeReturnValueSuggestions) {
kinds.add(protocol.ElementKind.CONSTRUCTOR);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index 7da38ea..fe38ee1 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -218,6 +218,8 @@
return protocol.ElementKind.PREFIX;
} else if (kind == ElementKind.TOP_LEVEL_VARIABLE) {
return protocol.ElementKind.TOP_LEVEL_VARIABLE;
+ } else if (kind == ElementKind.TYPE_ALIAS) {
+ return protocol.ElementKind.TYPE_ALIAS;
} else if (kind == ElementKind.TYPE_PARAMETER) {
return protocol.ElementKind.TYPE_PARAMETER;
}
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index b85a733..47624e2 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -32,202 +32,394 @@
/// An enumeration of possible assist kinds.
class DartAssistKind {
static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = AssistKind(
- 'dart.assist.add.diagnosticPropertyReference',
- 30,
- 'Add a debug reference to this property');
+ 'dart.assist.add.diagnosticPropertyReference',
+ 30,
+ 'Add a debug reference to this property',
+ );
static const ADD_NOT_NULL_ASSERT = AssistKind(
- 'dart.assist.add.notNullAssert', 30, 'Add a not-null assertion');
- static const ADD_RETURN_TYPE =
- AssistKind('dart.assist.add.returnType', 30, 'Add return type');
- static const ADD_TYPE_ANNOTATION =
- AssistKind('dart.assist.add.typeAnnotation', 30, 'Add type annotation');
+ 'dart.assist.add.notNullAssert',
+ 30,
+ 'Add a not-null assertion',
+ );
+ static const ADD_RETURN_TYPE = AssistKind(
+ 'dart.assist.add.returnType',
+ 30,
+ 'Add return type',
+ );
+ static const ADD_TYPE_ANNOTATION = AssistKind(
+ 'dart.assist.add.typeAnnotation',
+ 30,
+ 'Add type annotation',
+ );
static const ASSIGN_TO_LOCAL_VARIABLE = AssistKind(
- 'dart.assist.assignToVariable', 30, 'Assign value to new local variable');
+ 'dart.assist.assignToVariable',
+ 30,
+ 'Assign value to new local variable',
+ );
static const CONVERT_CLASS_TO_MIXIN = AssistKind(
- 'dart.assist.convert.classToMixin', 30, 'Convert class to a mixin');
+ 'dart.assist.convert.classToMixin',
+ 30,
+ 'Convert class to a mixin',
+ );
static const CONVERT_DOCUMENTATION_INTO_BLOCK = AssistKind(
- 'dart.assist.convert.blockComment',
- 30,
- 'Convert to block documentation comment');
+ 'dart.assist.convert.blockComment',
+ 30,
+ 'Convert to block documentation comment',
+ );
static const CONVERT_DOCUMENTATION_INTO_LINE = AssistKind(
- 'dart.assist.convert.lineComment',
- 30,
- 'Convert to line documentation comment');
+ 'dart.assist.convert.lineComment',
+ 30,
+ 'Convert to line documentation comment',
+ );
static const CONVERT_INTO_ASYNC_BODY = AssistKind(
- 'dart.assist.convert.bodyToAsync', 29, 'Convert to async function body');
+ 'dart.assist.convert.bodyToAsync',
+ 29,
+ 'Convert to async function body',
+ );
static const CONVERT_INTO_BLOCK_BODY = AssistKind(
- 'dart.assist.convert.bodyToBlock', 30, 'Convert to block body');
+ 'dart.assist.convert.bodyToBlock',
+ 30,
+ 'Convert to block body',
+ );
static const CONVERT_INTO_EXPRESSION_BODY = AssistKind(
- 'dart.assist.convert.bodyToExpression', 30, 'Convert to expression body');
+ 'dart.assist.convert.bodyToExpression',
+ 30,
+ 'Convert to expression body',
+ );
static const CONVERT_INTO_FINAL_FIELD = AssistKind(
- 'dart.assist.convert.getterToFinalField', 30, 'Convert to final field');
+ 'dart.assist.convert.getterToFinalField',
+ 30,
+ 'Convert to final field',
+ );
static const CONVERT_INTO_FOR_INDEX = AssistKind(
- 'dart.assist.convert.forEachToForIndex', 30, 'Convert to for-index loop');
+ 'dart.assist.convert.forEachToForIndex',
+ 30,
+ 'Convert to for-index loop',
+ );
static const CONVERT_INTO_GENERIC_FUNCTION_SYNTAX = AssistKind(
- 'dart.assist.convert.toGenericFunctionSyntax',
- 30,
- "Convert into 'Function' syntax");
+ 'dart.assist.convert.toGenericFunctionSyntax',
+ 30,
+ "Convert into 'Function' syntax",
+ );
static const CONVERT_INTO_GETTER = AssistKind(
- 'dart.assist.convert.finalFieldToGetter', 30, 'Convert to getter');
- static const CONVERT_INTO_IS_NOT =
- AssistKind('dart.assist.convert.isNot', 30, 'Convert to is!');
+ 'dart.assist.convert.finalFieldToGetter',
+ 30,
+ 'Convert to getter',
+ );
+ static const CONVERT_INTO_IS_NOT = AssistKind(
+ 'dart.assist.convert.isNot',
+ 30,
+ 'Convert to is!',
+ );
static const CONVERT_INTO_IS_NOT_EMPTY = AssistKind(
- 'dart.assist.convert.isNotEmpty', 30, "Convert to 'isNotEmpty'");
+ 'dart.assist.convert.isNotEmpty',
+ 30,
+ "Convert to 'isNotEmpty'",
+ );
static const CONVERT_PART_OF_TO_URI = AssistKind(
- 'dart.assist.convert.partOfToPartUri', 30, 'Convert to use a URI');
+ 'dart.assist.convert.partOfToPartUri',
+ 30,
+ 'Convert to use a URI',
+ );
static const CONVERT_TO_DOUBLE_QUOTED_STRING = AssistKind(
- 'dart.assist.convert.toDoubleQuotedString',
- 30,
- 'Convert to double quoted string');
+ 'dart.assist.convert.toDoubleQuotedString',
+ 30,
+ 'Convert to double quoted string',
+ );
static const CONVERT_TO_FIELD_PARAMETER = AssistKind(
- 'dart.assist.convert.toConstructorFieldParameter',
- 30,
- 'Convert to field formal parameter');
+ 'dart.assist.convert.toConstructorFieldParameter',
+ 30,
+ 'Convert to field formal parameter',
+ );
static const CONVERT_TO_FOR_ELEMENT = AssistKind(
- 'dart.assist.convert.toForElement', 30, "Convert to a 'for' element");
+ 'dart.assist.convert.toForElement',
+ 30,
+ "Convert to a 'for' element",
+ );
static const CONVERT_TO_IF_ELEMENT = AssistKind(
- 'dart.assist.convert.toIfElement', 30, "Convert to an 'if' element");
+ 'dart.assist.convert.toIfElement',
+ 30,
+ "Convert to an 'if' element",
+ );
static const CONVERT_TO_INT_LITERAL = AssistKind(
- 'dart.assist.convert.toIntLiteral', 30, 'Convert to an int literal');
+ 'dart.assist.convert.toIntLiteral',
+ 30,
+ 'Convert to an int literal',
+ );
static const CONVERT_TO_LIST_LITERAL = AssistKind(
- 'dart.assist.convert.toListLiteral', 30, 'Convert to list literal');
+ 'dart.assist.convert.toListLiteral',
+ 30,
+ 'Convert to list literal',
+ );
static const CONVERT_TO_MAP_LITERAL = AssistKind(
- 'dart.assist.convert.toMapLiteral', 30, 'Convert to map literal');
+ 'dart.assist.convert.toMapLiteral',
+ 30,
+ 'Convert to map literal',
+ );
static const CONVERT_TO_MULTILINE_STRING = AssistKind(
- 'dart.assist.convert.toMultilineString',
- 30,
- 'Convert to multiline string');
+ 'dart.assist.convert.toMultilineString',
+ 30,
+ 'Convert to multiline string',
+ );
static const CONVERT_TO_NORMAL_PARAMETER = AssistKind(
- 'dart.assist.convert.toConstructorNormalParameter',
- 30,
- 'Convert to normal parameter');
- static const CONVERT_TO_NULL_AWARE =
- AssistKind('dart.assist.convert.toNullAware', 30, "Convert to use '?.'");
+ 'dart.assist.convert.toConstructorNormalParameter',
+ 30,
+ 'Convert to normal parameter',
+ );
+ static const CONVERT_TO_NULL_AWARE = AssistKind(
+ 'dart.assist.convert.toNullAware',
+ 30,
+ "Convert to use '?.'",
+ );
static const CONVERT_TO_PACKAGE_IMPORT = AssistKind(
- 'dart.assist.convert.relativeToPackageImport',
- 30,
- "Convert to 'package:' import");
+ 'dart.assist.convert.relativeToPackageImport',
+ 30,
+ "Convert to 'package:' import",
+ );
static const CONVERT_TO_RELATIVE_IMPORT = AssistKind(
- 'dart.assist.convert.packageToRelativeImport',
- 30,
- 'Convert to a relative import');
+ 'dart.assist.convert.packageToRelativeImport',
+ 30,
+ 'Convert to a relative import',
+ );
static const CONVERT_TO_SET_LITERAL = AssistKind(
- 'dart.assist.convert.toSetLiteral', 30, 'Convert to set literal');
+ 'dart.assist.convert.toSetLiteral',
+ 30,
+ 'Convert to set literal',
+ );
static const CONVERT_TO_SINGLE_QUOTED_STRING = AssistKind(
- 'dart.assist.convert.toSingleQuotedString',
- 30,
- 'Convert to single quoted string');
- static const CONVERT_TO_SPREAD =
- AssistKind('dart.assist.convert.toSpread', 30, 'Convert to a spread');
- static const ENCAPSULATE_FIELD =
- AssistKind('dart.assist.encapsulateField', 30, 'Encapsulate field');
- static const EXCHANGE_OPERANDS =
- AssistKind('dart.assist.exchangeOperands', 30, 'Exchange operands');
+ 'dart.assist.convert.toSingleQuotedString',
+ 30,
+ 'Convert to single quoted string',
+ );
+ static const CONVERT_TO_SPREAD = AssistKind(
+ 'dart.assist.convert.toSpread',
+ 30,
+ 'Convert to a spread',
+ );
+ static const ENCAPSULATE_FIELD = AssistKind(
+ 'dart.assist.encapsulateField',
+ 30,
+ 'Encapsulate field',
+ );
+ static const EXCHANGE_OPERANDS = AssistKind(
+ 'dart.assist.exchangeOperands',
+ 30,
+ 'Exchange operands',
+ );
// Flutter assists
static const FLUTTER_CONVERT_TO_CHILDREN = AssistKind(
- 'dart.assist.flutter.convert.childToChildren',
- 30,
- 'Convert to children:');
+ 'dart.assist.flutter.convert.childToChildren',
+ 30,
+ 'Convert to children:',
+ );
static const FLUTTER_CONVERT_TO_STATEFUL_WIDGET = AssistKind(
- 'dart.assist.flutter.convert.toStatefulWidget',
- 30,
- 'Convert to StatefulWidget');
+ 'dart.assist.flutter.convert.toStatefulWidget',
+ 30,
+ 'Convert to StatefulWidget',
+ );
// Flutter wrap specific assists
- static const FLUTTER_WRAP_GENERIC =
- AssistKind('dart.assist.flutter.wrap.generic', 31, 'Wrap with widget...');
+ static const FLUTTER_WRAP_GENERIC = AssistKind(
+ 'dart.assist.flutter.wrap.generic',
+ 31,
+ 'Wrap with widget...',
+ );
static const FLUTTER_WRAP_BUILDER = AssistKind(
- 'dart.assist.flutter.wrap.builder', 32, 'Wrap with Builder');
- static const FLUTTER_WRAP_CENTER =
- AssistKind('dart.assist.flutter.wrap.center', 32, 'Wrap with Center');
- static const FLUTTER_WRAP_COLUMN =
- AssistKind('dart.assist.flutter.wrap.column', 32, 'Wrap with Column');
+ 'dart.assist.flutter.wrap.builder',
+ 32,
+ 'Wrap with Builder',
+ );
+ static const FLUTTER_WRAP_CENTER = AssistKind(
+ 'dart.assist.flutter.wrap.center',
+ 32,
+ 'Wrap with Center',
+ );
+ static const FLUTTER_WRAP_COLUMN = AssistKind(
+ 'dart.assist.flutter.wrap.column',
+ 32,
+ 'Wrap with Column',
+ );
static const FLUTTER_WRAP_CONTAINER = AssistKind(
- 'dart.assist.flutter.wrap.container', 32, 'Wrap with Container');
- static const FLUTTER_WRAP_PADDING =
- AssistKind('dart.assist.flutter.wrap.padding', 32, 'Wrap with Padding');
- static const FLUTTER_WRAP_ROW =
- AssistKind('dart.assist.flutter.wrap.row', 32, 'Wrap with Row');
- static const FLUTTER_WRAP_SIZED_BOX =
- AssistKind('dart.assist.flutter.wrap.sizedBox', 32, 'Wrap with SizedBox');
+ 'dart.assist.flutter.wrap.container',
+ 32,
+ 'Wrap with Container',
+ );
+ static const FLUTTER_WRAP_PADDING = AssistKind(
+ 'dart.assist.flutter.wrap.padding',
+ 32,
+ 'Wrap with Padding',
+ );
+ static const FLUTTER_WRAP_ROW = AssistKind(
+ 'dart.assist.flutter.wrap.row',
+ 32,
+ 'Wrap with Row',
+ );
+ static const FLUTTER_WRAP_SIZED_BOX = AssistKind(
+ 'dart.assist.flutter.wrap.sizedBox',
+ 32,
+ 'Wrap with SizedBox',
+ );
static const FLUTTER_WRAP_STREAM_BUILDER = AssistKind(
- 'dart.assist.flutter.wrap.streamBuilder', 32, 'Wrap with StreamBuilder');
+ 'dart.assist.flutter.wrap.streamBuilder',
+ 32,
+ 'Wrap with StreamBuilder',
+ );
// Flutter re-order assists
- static const FLUTTER_SWAP_WITH_CHILD =
- AssistKind('dart.assist.flutter.swap.withChild', 33, 'Swap with child');
- static const FLUTTER_SWAP_WITH_PARENT =
- AssistKind('dart.assist.flutter.swap.withParent', 33, 'Swap with parent');
- static const FLUTTER_MOVE_DOWN =
- AssistKind('dart.assist.flutter.move.down', 34, 'Move widget down');
- static const FLUTTER_MOVE_UP =
- AssistKind('dart.assist.flutter.move.up', 34, 'Move widget up');
+ static const FLUTTER_SWAP_WITH_CHILD = AssistKind(
+ 'dart.assist.flutter.swap.withChild',
+ 33,
+ 'Swap with child',
+ );
+ static const FLUTTER_SWAP_WITH_PARENT = AssistKind(
+ 'dart.assist.flutter.swap.withParent',
+ 33,
+ 'Swap with parent',
+ );
+ static const FLUTTER_MOVE_DOWN = AssistKind(
+ 'dart.assist.flutter.move.down',
+ 34,
+ 'Move widget down',
+ );
+ static const FLUTTER_MOVE_UP = AssistKind(
+ 'dart.assist.flutter.move.up',
+ 34,
+ 'Move widget up',
+ );
// Flutter remove assist
- static const FLUTTER_REMOVE_WIDGET =
- AssistKind('dart.assist.flutter.removeWidget', 35, 'Remove this widget');
+ static const FLUTTER_REMOVE_WIDGET = AssistKind(
+ 'dart.assist.flutter.removeWidget',
+ 35,
+ 'Remove this widget',
+ );
static const IMPORT_ADD_SHOW = AssistKind(
- 'dart.assist.add.showCombinator', 30, "Add explicit 'show' combinator");
- static const INLINE_INVOCATION =
- AssistKind('dart.assist.inline', 30, "Inline invocation of '{0}'");
+ 'dart.assist.add.showCombinator',
+ 30,
+ "Add explicit 'show' combinator",
+ );
+ static const INLINE_INVOCATION = AssistKind(
+ 'dart.assist.inline',
+ 30,
+ "Inline invocation of '{0}'",
+ );
static const INTRODUCE_LOCAL_CAST_TYPE = AssistKind(
- 'dart.assist.introduceLocalCast',
- 30,
- 'Introduce new local with tested type');
- static const INVERT_IF_STATEMENT =
- AssistKind('dart.assist.invertIf', 30, "Invert 'if' statement");
- static const JOIN_IF_WITH_INNER = AssistKind('dart.assist.joinWithInnerIf',
- 30, "Join 'if' statement with inner 'if' statement");
- static const JOIN_IF_WITH_OUTER = AssistKind('dart.assist.joinWithOuterIf',
- 30, "Join 'if' statement with outer 'if' statement");
+ 'dart.assist.introduceLocalCast',
+ 30,
+ 'Introduce new local with tested type',
+ );
+ static const INVERT_IF_STATEMENT = AssistKind(
+ 'dart.assist.invertIf',
+ 30,
+ "Invert 'if' statement",
+ );
+ static const JOIN_IF_WITH_INNER = AssistKind(
+ 'dart.assist.joinWithInnerIf',
+ 30,
+ "Join 'if' statement with inner 'if' statement",
+ );
+ static const JOIN_IF_WITH_OUTER = AssistKind(
+ 'dart.assist.joinWithOuterIf',
+ 30,
+ "Join 'if' statement with outer 'if' statement",
+ );
static const JOIN_VARIABLE_DECLARATION = AssistKind(
- 'dart.assist.joinVariableDeclaration', 30, 'Join variable declaration');
+ 'dart.assist.joinVariableDeclaration',
+ 30,
+ 'Join variable declaration',
+ );
static const REMOVE_TYPE_ANNOTATION = AssistKind(
- // todo (pq): unify w/ fix
- 'dart.assist.remove.typeAnnotation',
- 29,
- 'Remove type annotation');
+ // todo (pq): unify w/ fix
+ 'dart.assist.remove.typeAnnotation',
+ 29,
+ 'Remove type annotation',
+ );
static const REPLACE_CONDITIONAL_WITH_IF_ELSE = AssistKind(
- 'dart.assist.convert.conditionalToIfElse',
- 30,
- "Replace conditional with 'if-else'");
+ 'dart.assist.convert.conditionalToIfElse',
+ 30,
+ "Replace conditional with 'if-else'",
+ );
static const REPLACE_IF_ELSE_WITH_CONDITIONAL = AssistKind(
- 'dart.assist.convert.ifElseToConditional',
- 30,
- "Replace 'if-else' with conditional ('c ? x : y')");
+ 'dart.assist.convert.ifElseToConditional',
+ 30,
+ "Replace 'if-else' with conditional ('c ? x : y')",
+ );
static const REPLACE_WITH_VAR = AssistKind(
- 'dart.assist.replace.withVar', 30, "Replace type annotation with 'var'");
- static const SHADOW_FIELD = AssistKind('dart.assist.shadowField', 30,
- 'Create a local variable that shadows the field');
+ 'dart.assist.replace.withVar',
+ 30,
+ "Replace type annotation with 'var'",
+ );
+ static const SHADOW_FIELD = AssistKind(
+ 'dart.assist.shadowField',
+ 30,
+ 'Create a local variable that shadows the field',
+ );
static const SORT_CHILD_PROPERTY_LAST = AssistKind(
- 'dart.assist.sort.child.properties.last',
- 30,
- 'Move child property to end of arguments');
- static const SPLIT_AND_CONDITION =
- AssistKind('dart.assist.splitIfConjunction', 30, 'Split && condition');
+ 'dart.assist.sort.child.properties.last',
+ 30,
+ 'Move child property to end of arguments',
+ );
+ static const SPLIT_AND_CONDITION = AssistKind(
+ 'dart.assist.splitIfConjunction',
+ 30,
+ 'Split && condition',
+ );
static const SPLIT_VARIABLE_DECLARATION = AssistKind(
- 'dart.assist.splitVariableDeclaration', 30, 'Split variable declaration');
- static const SURROUND_WITH_BLOCK =
- AssistKind('dart.assist.surround.block', 22, 'Surround with block');
+ 'dart.assist.splitVariableDeclaration',
+ 30,
+ 'Split variable declaration',
+ );
+ static const SURROUND_WITH_BLOCK = AssistKind(
+ 'dart.assist.surround.block',
+ 22,
+ 'Surround with block',
+ );
static const SURROUND_WITH_DO_WHILE = AssistKind(
- 'dart.assist.surround.doWhile', 27, "Surround with 'do-while'");
- static const SURROUND_WITH_FOR =
- AssistKind('dart.assist.surround.forEach', 26, "Surround with 'for'");
- static const SURROUND_WITH_FOR_IN =
- AssistKind('dart.assist.surround.forIn', 25, "Surround with 'for-in'");
- static const SURROUND_WITH_IF =
- AssistKind('dart.assist.surround.if', 23, "Surround with 'if'");
+ 'dart.assist.surround.doWhile',
+ 27,
+ "Surround with 'do-while'",
+ );
+ static const SURROUND_WITH_FOR = AssistKind(
+ 'dart.assist.surround.forEach',
+ 26,
+ "Surround with 'for'",
+ );
+ static const SURROUND_WITH_FOR_IN = AssistKind(
+ 'dart.assist.surround.forIn',
+ 25,
+ "Surround with 'for-in'",
+ );
+ static const SURROUND_WITH_IF = AssistKind(
+ 'dart.assist.surround.if',
+ 23,
+ "Surround with 'if'",
+ );
static const SURROUND_WITH_SET_STATE = AssistKind(
- 'dart.assist.surround.setState', 27, "Surround with 'setState'");
+ 'dart.assist.surround.setState',
+ 27,
+ "Surround with 'setState'",
+ );
static const SURROUND_WITH_TRY_CATCH = AssistKind(
- 'dart.assist.surround.tryCatch', 28, "Surround with 'try-catch'");
+ 'dart.assist.surround.tryCatch',
+ 28,
+ "Surround with 'try-catch'",
+ );
static const SURROUND_WITH_TRY_FINALLY = AssistKind(
- 'dart.assist.surround.tryFinally', 29, "Surround with 'try-finally'");
- static const SURROUND_WITH_WHILE =
- AssistKind('dart.assist.surround.while', 24, "Surround with 'while'");
- static const USE_CURLY_BRACES =
- AssistKind('dart.assist.surround.curlyBraces', 30, 'Use curly braces');
+ 'dart.assist.surround.tryFinally',
+ 29,
+ "Surround with 'try-finally'",
+ );
+ static const SURROUND_WITH_WHILE = AssistKind(
+ 'dart.assist.surround.while',
+ 24,
+ "Surround with 'while'",
+ );
+ static const USE_CURLY_BRACES = AssistKind(
+ 'dart.assist.surround.curlyBraces',
+ 30,
+ 'Use curly braces',
+ );
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart b/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart
index 5aa14c3..90903cd 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/assign_to_local_variable.dart
@@ -6,6 +6,7 @@
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
import 'package:analysis_server/src/services/correction/name_suggestion.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
import 'package:analysis_server/src/utilities/extensions/ast.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
@@ -17,6 +18,14 @@
@override
AssistKind get assistKind => DartAssistKind.ASSIGN_TO_LOCAL_VARIABLE;
+ String get _declarationKeyword {
+ if (_isLintEnabled(LintNames.prefer_final_locals)) {
+ return 'final';
+ } else {
+ return 'var';
+ }
+ }
+
@override
Future<void> compute(ChangeBuilder builder) async {
// prepare enclosing ExpressionStatement
@@ -56,7 +65,7 @@
if (suggestions.isNotEmpty) {
await builder.addDartFileEdit(file, (builder) {
builder.addInsertion(offset, (builder) {
- builder.write('var ');
+ builder.write('$_declarationKeyword ');
builder.addSimpleLinkedEdit('NAME', suggestions[0],
kind: LinkedEditSuggestionKind.VARIABLE,
suggestions: suggestions);
@@ -66,6 +75,11 @@
}
}
+ bool _isLintEnabled(String name) {
+ var analysisOptions = unit.declaredElement?.context.analysisOptions;
+ return analysisOptions?.isLintEnabled(name) ?? false;
+ }
+
/// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
static AssignToLocalVariable newInstance() => AssignToLocalVariable();
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
index 5d9ab45..a3cd739 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
@@ -121,10 +121,13 @@
var typeName = (targetNode is SimpleIdentifier)
? targetNode.name
: (targetNode as PrefixedIdentifier).prefix.name;
- yield* _importLibraryForElement(
- typeName,
- const [ElementKind.CLASS, ElementKind.FUNCTION_TYPE_ALIAS],
- const [TopLevelDeclarationKind.type]);
+ yield* _importLibraryForElement(typeName, const [
+ ElementKind.CLASS,
+ ElementKind.FUNCTION_TYPE_ALIAS,
+ ElementKind.TYPE_ALIAS
+ ], const [
+ TopLevelDeclarationKind.type
+ ]);
} else if (mightBeImplicitConstructor(targetNode)) {
var typeName = (targetNode as SimpleIdentifier).name;
yield* _importLibraryForElement(typeName, const [ElementKind.CLASS],
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 8ca363e..1d19faa 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -29,10 +29,16 @@
/// An enumeration of quick fix kinds for the errors found in an analysis
/// options file.
class AnalysisOptionsFixKind {
- static const REMOVE_LINT =
- FixKind('analysisOptions.fix.removeLint', 50, "Remove '{0}'");
- static const REMOVE_SETTING =
- FixKind('analysisOptions.fix.removeSetting', 50, "Remove '{0}'");
+ static const REMOVE_LINT = FixKind(
+ 'analysisOptions.fix.removeLint',
+ 50,
+ "Remove '{0}'",
+ );
+ static const REMOVE_SETTING = FixKind(
+ 'analysisOptions.fix.removeSetting',
+ 50,
+ "Remove '{0}'",
+ );
}
/// The implementation of [DartFixContext].
@@ -68,829 +74,1283 @@
/// An enumeration of quick fix kinds found in a Dart file.
class DartFixKind {
- static const ADD_ASYNC = FixKind('dart.fix.add.async',
- DartFixKindPriority.DEFAULT, "Add 'async' modifier");
+ static const ADD_ASYNC = FixKind(
+ 'dart.fix.add.async',
+ DartFixKindPriority.DEFAULT,
+ "Add 'async' modifier",
+ );
static const ADD_AWAIT = FixKind(
- 'dart.fix.add.await', DartFixKindPriority.DEFAULT, "Add 'await' keyword");
- static const ADD_AWAIT_MULTI = FixKind('dart.fix.add.await.multi',
- DartFixKindPriority.IN_FILE, "Add 'await's everywhere in file");
+ 'dart.fix.add.await',
+ DartFixKindPriority.DEFAULT,
+ "Add 'await' keyword",
+ );
+ static const ADD_AWAIT_MULTI = FixKind(
+ 'dart.fix.add.await.multi',
+ DartFixKindPriority.IN_FILE,
+ "Add 'await's everywhere in file",
+ );
static const ADD_EXPLICIT_CAST = FixKind(
- 'dart.fix.add.explicitCast', DartFixKindPriority.DEFAULT, 'Add cast');
- static const ADD_CONST = FixKind('dart.fix.add.const',
- DartFixKindPriority.DEFAULT, "Add 'const' modifier");
- static const ADD_CONST_MULTI = FixKind('dart.fix.add.const.multi',
- DartFixKindPriority.IN_FILE, "Add 'const' modifiers everywhere in file");
- static const ADD_CURLY_BRACES = FixKind('dart.fix.add.curlyBraces',
- DartFixKindPriority.DEFAULT, 'Add curly braces');
+ 'dart.fix.add.explicitCast',
+ DartFixKindPriority.DEFAULT,
+ 'Add cast',
+ );
+ static const ADD_CONST = FixKind(
+ 'dart.fix.add.const',
+ DartFixKindPriority.DEFAULT,
+ "Add 'const' modifier",
+ );
+ static const ADD_CONST_MULTI = FixKind(
+ 'dart.fix.add.const.multi',
+ DartFixKindPriority.IN_FILE,
+ "Add 'const' modifiers everywhere in file",
+ );
+ static const ADD_CURLY_BRACES = FixKind(
+ 'dart.fix.add.curlyBraces',
+ DartFixKindPriority.DEFAULT,
+ 'Add curly braces',
+ );
static const ADD_CURLY_BRACES_MULTI = FixKind(
- 'dart.fix.add.curlyBraces.multi',
- DartFixKindPriority.IN_FILE,
- 'Add curly braces everywhere in file');
+ 'dart.fix.add.curlyBraces.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Add curly braces everywhere in file',
+ );
static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = FixKind(
- 'dart.fix.add.diagnosticPropertyReference',
- DartFixKindPriority.DEFAULT,
- 'Add a debug reference to this property');
+ 'dart.fix.add.diagnosticPropertyReference',
+ DartFixKindPriority.DEFAULT,
+ 'Add a debug reference to this property',
+ );
static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE_MULTI = FixKind(
- 'dart.fix.add.diagnosticPropertyReference.multi',
- DartFixKindPriority.IN_FILE,
- 'Add missing debug property references everywhere in file');
- static const ADD_EOL_AT_END_OF_FILE = FixKind('dart.fix.add.eolAtEndOfFile',
- DartFixKindPriority.DEFAULT, 'Add EOL at end of file');
+ 'dart.fix.add.diagnosticPropertyReference.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Add missing debug property references everywhere in file',
+ );
+ static const ADD_EOL_AT_END_OF_FILE = FixKind(
+ 'dart.fix.add.eolAtEndOfFile',
+ DartFixKindPriority.DEFAULT,
+ 'Add EOL at end of file',
+ );
static const ADD_FIELD_FORMAL_PARAMETERS = FixKind(
- 'dart.fix.add.fieldFormalParameters',
- 70,
- 'Add final field formal parameters');
+ 'dart.fix.add.fieldFormalParameters',
+ 70,
+ 'Add final field formal parameters',
+ );
static const ADD_KEY_TO_CONSTRUCTORS = FixKind(
- 'dart.fix.add.keyToConstructors',
- DartFixKindPriority.DEFAULT,
- "Add 'key' to constructors");
+ 'dart.fix.add.keyToConstructors',
+ DartFixKindPriority.DEFAULT,
+ "Add 'key' to constructors",
+ );
static const ADD_LATE = FixKind(
- 'dart.fix.add.late', DartFixKindPriority.DEFAULT, "Add 'late' modifier");
+ 'dart.fix.add.late',
+ DartFixKindPriority.DEFAULT,
+ "Add 'late' modifier",
+ );
static const ADD_MISSING_ENUM_CASE_CLAUSES = FixKind(
- 'dart.fix.add.missingEnumCaseClauses',
- DartFixKindPriority.DEFAULT,
- 'Add missing case clauses');
+ 'dart.fix.add.missingEnumCaseClauses',
+ DartFixKindPriority.DEFAULT,
+ 'Add missing case clauses',
+ );
static const ADD_MISSING_PARAMETER_NAMED = FixKind(
- 'dart.fix.add.missingParameterNamed', 70, "Add named parameter '{0}'");
+ 'dart.fix.add.missingParameterNamed',
+ 70,
+ "Add named parameter '{0}'",
+ );
static const ADD_MISSING_PARAMETER_POSITIONAL = FixKind(
- 'dart.fix.add.missingParameterPositional',
- 69,
- 'Add optional positional parameter');
+ 'dart.fix.add.missingParameterPositional',
+ 69,
+ 'Add optional positional parameter',
+ );
static const ADD_MISSING_PARAMETER_REQUIRED = FixKind(
- 'dart.fix.add.missingParameterRequired',
- 70,
- 'Add required positional parameter');
+ 'dart.fix.add.missingParameterRequired',
+ 70,
+ 'Add required positional parameter',
+ );
static const ADD_MISSING_REQUIRED_ARGUMENT = FixKind(
- 'dart.fix.add.missingRequiredArgument',
- 70,
- "Add required argument '{0}'");
+ 'dart.fix.add.missingRequiredArgument',
+ 70,
+ "Add required argument '{0}'",
+ );
static const ADD_NE_NULL = FixKind(
- 'dart.fix.add.neNull', DartFixKindPriority.DEFAULT, 'Add != null');
- static const ADD_NE_NULL_MULTI = FixKind('dart.fix.add.neNull.multi',
- DartFixKindPriority.IN_FILE, 'Add != null everywhere in file');
+ 'dart.fix.add.neNull',
+ DartFixKindPriority.DEFAULT,
+ 'Add != null',
+ );
+ static const ADD_NE_NULL_MULTI = FixKind(
+ 'dart.fix.add.neNull.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Add != null everywhere in file',
+ );
static const ADD_NULL_CHECK = FixKind(
'dart.fix.add.nullCheck',
DartFixKindPriority.DEFAULT - 1,
'Add a null check (!)',
);
- static const ADD_OVERRIDE = FixKind('dart.fix.add.override',
- DartFixKindPriority.DEFAULT, "Add '@override' annotation");
+ static const ADD_OVERRIDE = FixKind(
+ 'dart.fix.add.override',
+ DartFixKindPriority.DEFAULT,
+ "Add '@override' annotation",
+ );
static const ADD_OVERRIDE_MULTI = FixKind(
- 'dart.fix.add.override.multi',
- DartFixKindPriority.IN_FILE,
- "Add '@override' annotations everywhere in file");
- static const ADD_REQUIRED = FixKind('dart.fix.add.required',
- DartFixKindPriority.DEFAULT, "Add '@required' annotation");
+ 'dart.fix.add.override.multi',
+ DartFixKindPriority.IN_FILE,
+ "Add '@override' annotations everywhere in file",
+ );
+ static const ADD_REQUIRED = FixKind(
+ 'dart.fix.add.required',
+ DartFixKindPriority.DEFAULT,
+ "Add '@required' annotation",
+ );
static const ADD_REQUIRED_MULTI = FixKind(
- 'dart.fix.add.required.multi',
- DartFixKindPriority.IN_FILE,
- "Add '@required' annotations everywhere in file");
- static const ADD_REQUIRED2 = FixKind('dart.fix.add.required',
- DartFixKindPriority.DEFAULT, "Add 'required' keyword");
+ 'dart.fix.add.required.multi',
+ DartFixKindPriority.IN_FILE,
+ "Add '@required' annotations everywhere in file",
+ );
+ static const ADD_REQUIRED2 = FixKind(
+ 'dart.fix.add.required',
+ DartFixKindPriority.DEFAULT,
+ "Add 'required' keyword",
+ );
static const ADD_REQUIRED2_MULTI = FixKind(
- 'dart.fix.add.required.multi',
- DartFixKindPriority.IN_FILE,
- "Add 'required' keywords everywhere in file");
- static const ADD_RETURN_TYPE = FixKind('dart.fix.add.returnType',
- DartFixKindPriority.DEFAULT, 'Add return type');
- static const ADD_RETURN_TYPE_MULTI = FixKind('dart.fix.add.returnType.multi',
- DartFixKindPriority.IN_FILE, 'Add return types everywhere in file');
- static const ADD_STATIC = FixKind('dart.fix.add.static',
- DartFixKindPriority.DEFAULT, "Add 'static' modifier");
+ 'dart.fix.add.required.multi',
+ DartFixKindPriority.IN_FILE,
+ "Add 'required' keywords everywhere in file",
+ );
+ static const ADD_RETURN_TYPE = FixKind(
+ 'dart.fix.add.returnType',
+ DartFixKindPriority.DEFAULT,
+ 'Add return type',
+ );
+ static const ADD_RETURN_TYPE_MULTI = FixKind(
+ 'dart.fix.add.returnType.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Add return types everywhere in file',
+ );
+ static const ADD_STATIC = FixKind(
+ 'dart.fix.add.static',
+ DartFixKindPriority.DEFAULT,
+ "Add 'static' modifier",
+ );
static const ADD_SUPER_CONSTRUCTOR_INVOCATION = FixKind(
- 'dart.fix.add.superConstructorInvocation',
- DartFixKindPriority.DEFAULT,
- 'Add super constructor {0} invocation');
- static const ADD_TYPE_ANNOTATION = FixKind('dart.fix.add.typeAnnotation',
- DartFixKindPriority.DEFAULT, 'Add type annotation');
+ 'dart.fix.add.superConstructorInvocation',
+ DartFixKindPriority.DEFAULT,
+ 'Add super constructor {0} invocation',
+ );
+ static const ADD_TYPE_ANNOTATION = FixKind(
+ 'dart.fix.add.typeAnnotation',
+ DartFixKindPriority.DEFAULT,
+ 'Add type annotation',
+ );
static const ADD_TYPE_ANNOTATION_MULTI = FixKind(
- 'dart.fix.add.typeAnnotation.multi',
- DartFixKindPriority.IN_FILE,
- 'Add type annotations everywhere in file');
- static const CHANGE_ARGUMENT_NAME =
- FixKind('dart.fix.change.argumentName', 60, "Change to '{0}'");
+ 'dart.fix.add.typeAnnotation.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Add type annotations everywhere in file',
+ );
+ static const CHANGE_ARGUMENT_NAME = FixKind(
+ 'dart.fix.change.argumentName',
+ 60,
+ "Change to '{0}'",
+ );
static const CHANGE_TO = FixKind(
- 'dart.fix.change.to', DartFixKindPriority.DEFAULT + 1, "Change to '{0}'");
+ 'dart.fix.change.to',
+ DartFixKindPriority.DEFAULT + 1,
+ "Change to '{0}'",
+ );
static const CHANGE_TO_NEAREST_PRECISE_VALUE = FixKind(
- 'dart.fix.change.toNearestPreciseValue',
- DartFixKindPriority.DEFAULT,
- 'Change to nearest precise int-as-double value: {0}');
+ 'dart.fix.change.toNearestPreciseValue',
+ DartFixKindPriority.DEFAULT,
+ 'Change to nearest precise int-as-double value: {0}',
+ );
static const CHANGE_TO_STATIC_ACCESS = FixKind(
- 'dart.fix.change.toStaticAccess',
- DartFixKindPriority.DEFAULT,
- "Change access to static using '{0}'");
+ 'dart.fix.change.toStaticAccess',
+ DartFixKindPriority.DEFAULT,
+ "Change access to static using '{0}'",
+ );
static const CHANGE_TYPE_ANNOTATION = FixKind(
- 'dart.fix.change.typeAnnotation',
- DartFixKindPriority.DEFAULT,
- "Change '{0}' to '{1}' type annotation");
+ 'dart.fix.change.typeAnnotation',
+ DartFixKindPriority.DEFAULT,
+ "Change '{0}' to '{1}' type annotation",
+ );
static const CONVERT_FLUTTER_CHILD = FixKind(
- 'dart.fix.flutter.convert.childToChildren',
- DartFixKindPriority.DEFAULT,
- 'Convert to children:');
+ 'dart.fix.flutter.convert.childToChildren',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to children:',
+ );
static const CONVERT_FLUTTER_CHILDREN = FixKind(
- 'dart.fix.flutter.convert.childrenToChild',
- DartFixKindPriority.DEFAULT,
- 'Convert to child:');
+ 'dart.fix.flutter.convert.childrenToChild',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to child:',
+ );
static const CONVERT_FOR_EACH_TO_FOR_LOOP = FixKind(
- 'dart.fix.convert.toForLoop',
- DartFixKindPriority.DEFAULT,
- "Convert 'forEach' to a 'for' loop");
+ 'dart.fix.convert.toForLoop',
+ DartFixKindPriority.DEFAULT,
+ "Convert 'forEach' to a 'for' loop",
+ );
static const CONVERT_FOR_EACH_TO_FOR_LOOP_MULTI = FixKind(
- 'dart.fix.convert.toForLoop.multi',
- DartFixKindPriority.IN_FILE,
- "Convert 'forEach' to a 'for' loop everywhere in file");
+ 'dart.fix.convert.toForLoop.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert 'forEach' to a 'for' loop everywhere in file",
+ );
static const CONVERT_INTO_EXPRESSION_BODY = FixKind(
- 'dart.fix.convert.toExpressionBody',
- DartFixKindPriority.DEFAULT,
- 'Convert to expression body');
+ 'dart.fix.convert.toExpressionBody',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to expression body',
+ );
static const CONVERT_INTO_EXPRESSION_BODY_MULTI = FixKind(
- 'dart.fix.convert.toExpressionBody.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to expression bodies everywhere in file');
- static const CONVERT_TO_CONTAINS = FixKind('dart.fix.convert.toContains',
- DartFixKindPriority.DEFAULT, "Convert to using 'contains'");
+ 'dart.fix.convert.toExpressionBody.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to expression bodies everywhere in file',
+ );
+ static const CONVERT_TO_CONTAINS = FixKind(
+ 'dart.fix.convert.toContains',
+ DartFixKindPriority.DEFAULT,
+ "Convert to using 'contains'",
+ );
static const CONVERT_TO_CONTAINS_MULTI = FixKind(
- 'dart.fix.convert.toContains.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to using 'contains' everywhere in file");
- static const CONVERT_TO_FOR_ELEMENT = FixKind('dart.fix.convert.toForElement',
- DartFixKindPriority.DEFAULT, "Convert to a 'for' element");
+ 'dart.fix.convert.toContains.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to using 'contains' everywhere in file",
+ );
+ static const CONVERT_TO_FOR_ELEMENT = FixKind(
+ 'dart.fix.convert.toForElement',
+ DartFixKindPriority.DEFAULT,
+ "Convert to a 'for' element",
+ );
static const CONVERT_TO_FOR_ELEMENT_MULTI = FixKind(
- 'dart.fix.convert.toForElement.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to 'for' elements everywhere in file");
+ 'dart.fix.convert.toForElement.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to 'for' elements everywhere in file",
+ );
static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX = FixKind(
- 'dart.fix.convert.toGenericFunctionSyntax',
- DartFixKindPriority.DEFAULT,
- "Convert into 'Function' syntax");
+ 'dart.fix.convert.toGenericFunctionSyntax',
+ DartFixKindPriority.DEFAULT,
+ "Convert into 'Function' syntax",
+ );
static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX_MULTI = FixKind(
- 'dart.fix.convert.toGenericFunctionSyntax.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to 'Function' syntax everywhere in file");
- static const CONVERT_TO_IF_ELEMENT = FixKind('dart.fix.convert.toIfElement',
- DartFixKindPriority.DEFAULT, "Convert to an 'if' element");
+ 'dart.fix.convert.toGenericFunctionSyntax.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to 'Function' syntax everywhere in file",
+ );
+ static const CONVERT_TO_IF_ELEMENT = FixKind(
+ 'dart.fix.convert.toIfElement',
+ DartFixKindPriority.DEFAULT,
+ "Convert to an 'if' element",
+ );
static const CONVERT_TO_IF_ELEMENT_MULTI = FixKind(
- 'dart.fix.convert.toIfElement.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to 'if' elements everywhere in file");
- static const CONVERT_TO_IF_NULL = FixKind('dart.fix.convert.toIfNull',
- DartFixKindPriority.DEFAULT, "Convert to use '??'");
+ 'dart.fix.convert.toIfElement.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to 'if' elements everywhere in file",
+ );
+ static const CONVERT_TO_IF_NULL = FixKind(
+ 'dart.fix.convert.toIfNull',
+ DartFixKindPriority.DEFAULT,
+ "Convert to use '??'",
+ );
static const CONVERT_TO_IF_NULL_MULTI = FixKind(
- 'dart.fix.convert.toIfNull.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to '??'s everywhere in file");
+ 'dart.fix.convert.toIfNull.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to '??'s everywhere in file",
+ );
static const CONVERT_TO_INITIALIZING_FORMAL = FixKind(
- 'dart.fix.convert.toInitializingFormal',
- DartFixKindPriority.DEFAULT,
- 'Convert to an initializing formal parameter');
- static const CONVERT_TO_INT_LITERAL = FixKind('dart.fix.convert.toIntLiteral',
- DartFixKindPriority.DEFAULT, 'Convert to an int literal');
+ 'dart.fix.convert.toInitializingFormal',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to an initializing formal parameter',
+ );
+ static const CONVERT_TO_INT_LITERAL = FixKind(
+ 'dart.fix.convert.toIntLiteral',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to an int literal',
+ );
static const CONVERT_TO_INT_LITERAL_MULTI = FixKind(
- 'dart.fix.convert.toIntLiteral.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to int literals everywhere in file');
+ 'dart.fix.convert.toIntLiteral.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to int literals everywhere in file',
+ );
static const CONVERT_TO_IS_NOT = FixKind(
- 'dart.fix.convert.isNot', DartFixKindPriority.DEFAULT, 'Convert to is!');
- static const CONVERT_TO_IS_NOT_MULTI = FixKind('dart.fix.convert.isNot.multi',
- DartFixKindPriority.IN_FILE, 'Convert to is! everywhere in file');
+ 'dart.fix.convert.isNot',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to is!',
+ );
+ static const CONVERT_TO_IS_NOT_MULTI = FixKind(
+ 'dart.fix.convert.isNot.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to is! everywhere in file',
+ );
static const CONVERT_TO_LINE_COMMENT = FixKind(
- 'dart.fix.convert.toLineComment',
- DartFixKindPriority.DEFAULT,
- 'Convert to line documentation comment');
+ 'dart.fix.convert.toLineComment',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to line documentation comment',
+ );
static const CONVERT_TO_LINE_COMMENT_MULTI = FixKind(
- 'dart.fix.convert.toLineComment.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to line documentation comments everywhere in file');
+ 'dart.fix.convert.toLineComment.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to line documentation comments everywhere in file',
+ );
static const CONVERT_TO_LIST_LITERAL = FixKind(
- 'dart.fix.convert.toListLiteral',
- DartFixKindPriority.DEFAULT,
- 'Convert to list literal');
+ 'dart.fix.convert.toListLiteral',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to list literal',
+ );
static const CONVERT_TO_LIST_LITERAL_MULTI = FixKind(
- 'dart.fix.convert.toListLiteral.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to list literals everywhere in file');
- static const CONVERT_TO_MAP_LITERAL = FixKind('dart.fix.convert.toMapLiteral',
- DartFixKindPriority.DEFAULT, 'Convert to map literal');
+ 'dart.fix.convert.toListLiteral.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to list literals everywhere in file',
+ );
+ static const CONVERT_TO_MAP_LITERAL = FixKind(
+ 'dart.fix.convert.toMapLiteral',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to map literal',
+ );
static const CONVERT_TO_MAP_LITERAL_MULTI = FixKind(
- 'dart.fix.convert.toMapLiteral.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to map literals everywhere in file');
+ 'dart.fix.convert.toMapLiteral.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to map literals everywhere in file',
+ );
static const CONVERT_TO_NAMED_ARGUMENTS = FixKind(
- 'dart.fix.convert.toNamedArguments',
- DartFixKindPriority.DEFAULT,
- 'Convert to named arguments');
- static const CONVERT_TO_NULL_AWARE = FixKind('dart.fix.convert.toNullAware',
- DartFixKindPriority.DEFAULT, "Convert to use '?.'");
+ 'dart.fix.convert.toNamedArguments',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to named arguments',
+ );
+ static const CONVERT_TO_NULL_AWARE = FixKind(
+ 'dart.fix.convert.toNullAware',
+ DartFixKindPriority.DEFAULT,
+ "Convert to use '?.'",
+ );
static const CONVERT_TO_NULL_AWARE_MULTI = FixKind(
- 'dart.fix.convert.toNullAware.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to use '?.' everywhere in file");
+ 'dart.fix.convert.toNullAware.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to use '?.' everywhere in file",
+ );
static const CONVERT_TO_NULL_AWARE_SPREAD = FixKind(
- 'dart.fix.convert.toNullAwareSpread',
- DartFixKindPriority.DEFAULT,
- "Convert to use '...?'");
+ 'dart.fix.convert.toNullAwareSpread',
+ DartFixKindPriority.DEFAULT,
+ "Convert to use '...?'",
+ );
static const CONVERT_TO_NULL_AWARE_SPREAD_MULTI = FixKind(
- 'dart.fix.convert.toNullAwareSpread.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to use '...?' everywhere in file");
- static const CONVERT_TO_ON_TYPE = FixKind('dart.fix.convert.toOnType',
- DartFixKindPriority.DEFAULT, "Convert to 'on {0}'");
+ 'dart.fix.convert.toNullAwareSpread.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to use '...?' everywhere in file",
+ );
+ static const CONVERT_TO_ON_TYPE = FixKind(
+ 'dart.fix.convert.toOnType',
+ DartFixKindPriority.DEFAULT,
+ "Convert to 'on {0}'",
+ );
static const CONVERT_TO_PACKAGE_IMPORT = FixKind(
- 'dart.fix.convert.toPackageImport',
- DartFixKindPriority.DEFAULT,
- "Convert to 'package:' import");
+ 'dart.fix.convert.toPackageImport',
+ DartFixKindPriority.DEFAULT,
+ "Convert to 'package:' import",
+ );
static const CONVERT_TO_PACKAGE_IMPORT_MULTI = FixKind(
- 'dart.fix.convert.toPackageImport.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to 'package:' imports everywhere in file");
+ 'dart.fix.convert.toPackageImport.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to 'package:' imports everywhere in file",
+ );
static const CONVERT_TO_RELATIVE_IMPORT = FixKind(
- 'dart.fix.convert.toRelativeImport',
- DartFixKindPriority.DEFAULT,
- 'Convert to relative import');
+ 'dart.fix.convert.toRelativeImport',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to relative import',
+ );
static const CONVERT_TO_RELATIVE_IMPORT_MULTI = FixKind(
- 'dart.fix.convert.toRelativeImport.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to relative imports everywhere in file');
- static const CONVERT_TO_SET_LITERAL = FixKind('dart.fix.convert.toSetLiteral',
- DartFixKindPriority.DEFAULT, 'Convert to set literal');
+ 'dart.fix.convert.toRelativeImport.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to relative imports everywhere in file',
+ );
+ static const CONVERT_TO_SET_LITERAL = FixKind(
+ 'dart.fix.convert.toSetLiteral',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to set literal',
+ );
static const CONVERT_TO_SET_LITERAL_MULTI = FixKind(
- 'dart.fix.convert.toSetLiteral.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to set literals everywhere in file');
+ 'dart.fix.convert.toSetLiteral.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to set literals everywhere in file',
+ );
static const CONVERT_TO_SINGLE_QUOTED_STRING = FixKind(
- 'dart.fix.convert.toSingleQuotedString',
- DartFixKindPriority.DEFAULT,
- 'Convert to single quoted string');
+ 'dart.fix.convert.toSingleQuotedString',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to single quoted string',
+ );
static const CONVERT_TO_SINGLE_QUOTED_STRING_MULTI = FixKind(
- 'dart.fix.convert.toSingleQuotedString.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to single quoted strings everywhere in file');
- static const CONVERT_TO_SPREAD = FixKind('dart.fix.convert.toSpread',
- DartFixKindPriority.DEFAULT, 'Convert to a spread');
+ 'dart.fix.convert.toSingleQuotedString.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to single quoted strings everywhere in file',
+ );
+ static const CONVERT_TO_SPREAD = FixKind(
+ 'dart.fix.convert.toSpread',
+ DartFixKindPriority.DEFAULT,
+ 'Convert to a spread',
+ );
static const CONVERT_TO_SPREAD_MULTI = FixKind(
- 'dart.fix.convert.toSpread.multi',
- DartFixKindPriority.IN_FILE,
- 'Convert to spreads everywhere in file');
- static const CONVERT_TO_WHERE_TYPE = FixKind('dart.fix.convert.toWhereType',
- DartFixKindPriority.DEFAULT, "Convert to use 'whereType'");
+ 'dart.fix.convert.toSpread.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Convert to spreads everywhere in file',
+ );
+ static const CONVERT_TO_WHERE_TYPE = FixKind(
+ 'dart.fix.convert.toWhereType',
+ DartFixKindPriority.DEFAULT,
+ "Convert to use 'whereType'",
+ );
static const CONVERT_TO_WHERE_TYPE_MULTI = FixKind(
- 'dart.fix.convert.toWhereType.multi',
- DartFixKindPriority.IN_FILE,
- "Convert to using 'whereType' everywhere in file");
- static const CREATE_CLASS = FixKind('dart.fix.create.class',
- DartFixKindPriority.DEFAULT, "Create class '{0}'");
- static const CREATE_CONSTRUCTOR = FixKind('dart.fix.create.constructor',
- DartFixKindPriority.DEFAULT, "Create constructor '{0}'");
+ 'dart.fix.convert.toWhereType.multi',
+ DartFixKindPriority.IN_FILE,
+ "Convert to using 'whereType' everywhere in file",
+ );
+ static const CREATE_CLASS = FixKind(
+ 'dart.fix.create.class',
+ DartFixKindPriority.DEFAULT,
+ "Create class '{0}'",
+ );
+ static const CREATE_CONSTRUCTOR = FixKind(
+ 'dart.fix.create.constructor',
+ DartFixKindPriority.DEFAULT,
+ "Create constructor '{0}'",
+ );
static const CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS = FixKind(
- 'dart.fix.create.constructorForFinalFields',
- DartFixKindPriority.DEFAULT,
- 'Create constructor for final fields');
+ 'dart.fix.create.constructorForFinalFields',
+ DartFixKindPriority.DEFAULT,
+ 'Create constructor for final fields',
+ );
static const CREATE_CONSTRUCTOR_SUPER = FixKind(
- 'dart.fix.create.constructorSuper',
- DartFixKindPriority.DEFAULT,
- 'Create constructor to call {0}');
- static const CREATE_FIELD =
- FixKind('dart.fix.create.field', 49, "Create field '{0}'");
+ 'dart.fix.create.constructorSuper',
+ DartFixKindPriority.DEFAULT,
+ 'Create constructor to call {0}',
+ );
+ static const CREATE_FIELD = FixKind(
+ 'dart.fix.create.field',
+ 49,
+ "Create field '{0}'",
+ );
static const CREATE_FILE = FixKind(
- 'dart.fix.create.file', DartFixKindPriority.DEFAULT, "Create file '{0}'");
- static const CREATE_FUNCTION =
- FixKind('dart.fix.create.function', 49, "Create function '{0}'");
- static const CREATE_GETTER = FixKind('dart.fix.create.getter',
- DartFixKindPriority.DEFAULT, "Create getter '{0}'");
- static const CREATE_LOCAL_VARIABLE = FixKind('dart.fix.create.localVariable',
- DartFixKindPriority.DEFAULT, "Create local variable '{0}'");
- static const CREATE_METHOD = FixKind('dart.fix.create.method',
- DartFixKindPriority.DEFAULT, "Create method '{0}'");
+ 'dart.fix.create.file',
+ DartFixKindPriority.DEFAULT,
+ "Create file '{0}'",
+ );
+ static const CREATE_FUNCTION = FixKind(
+ 'dart.fix.create.function',
+ 49,
+ "Create function '{0}'",
+ );
+ static const CREATE_GETTER = FixKind(
+ 'dart.fix.create.getter',
+ DartFixKindPriority.DEFAULT,
+ "Create getter '{0}'",
+ );
+ static const CREATE_LOCAL_VARIABLE = FixKind(
+ 'dart.fix.create.localVariable',
+ DartFixKindPriority.DEFAULT,
+ "Create local variable '{0}'",
+ );
+ static const CREATE_METHOD = FixKind(
+ 'dart.fix.create.method',
+ DartFixKindPriority.DEFAULT,
+ "Create method '{0}'",
+ );
// todo (pq): used by LintNames.hash_and_equals; consider removing.
- static const CREATE_METHOD_MULTI = FixKind('dart.fix.create.method.multi',
- DartFixKindPriority.IN_FILE, 'Create methods in file');
+ static const CREATE_METHOD_MULTI = FixKind(
+ 'dart.fix.create.method.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Create methods in file',
+ );
static const CREATE_MISSING_OVERRIDES = FixKind(
- 'dart.fix.create.missingOverrides',
- DartFixKindPriority.DEFAULT + 1,
- 'Create {0} missing override{1}');
- static const CREATE_MIXIN = FixKind('dart.fix.create.mixin',
- DartFixKindPriority.DEFAULT, "Create mixin '{0}'");
+ 'dart.fix.create.missingOverrides',
+ DartFixKindPriority.DEFAULT + 1,
+ 'Create {0} missing override{1}',
+ );
+ static const CREATE_MIXIN = FixKind(
+ 'dart.fix.create.mixin',
+ DartFixKindPriority.DEFAULT,
+ "Create mixin '{0}'",
+ );
static const CREATE_NO_SUCH_METHOD = FixKind(
- 'dart.fix.create.noSuchMethod', 49, "Create 'noSuchMethod' method");
- static const CREATE_SETTER = FixKind('dart.fix.create.setter',
- DartFixKindPriority.DEFAULT, "Create setter '{0}'");
- static const DATA_DRIVEN =
- FixKind('dart.fix.dataDriven', DartFixKindPriority.DEFAULT, '{0}');
- static const EXTEND_CLASS_FOR_MIXIN = FixKind('dart.fix.extendClassForMixin',
- DartFixKindPriority.DEFAULT, "Extend the class '{0}'");
- static const IGNORE_ERROR_LINE = FixKind('dart.fix.ignore.line',
- DartFixKindPriority.IGNORE, "Ignore '{0}' for this line");
- static const IGNORE_ERROR_FILE = FixKind('dart.fix.ignore.file',
- DartFixKindPriority.IGNORE - 1, "Ignore '{0}' for this file");
- static const IMPORT_ASYNC =
- FixKind('dart.fix.import.async', 49, "Import 'dart:async'");
- static const IMPORT_LIBRARY_PREFIX = FixKind('dart.fix.import.libraryPrefix',
- 49, "Use imported library '{0}' with prefix '{1}'");
+ 'dart.fix.create.noSuchMethod',
+ 49,
+ "Create 'noSuchMethod' method",
+ );
+ static const CREATE_SETTER = FixKind(
+ 'dart.fix.create.setter',
+ DartFixKindPriority.DEFAULT,
+ "Create setter '{0}'",
+ );
+ static const DATA_DRIVEN = FixKind(
+ 'dart.fix.dataDriven',
+ DartFixKindPriority.DEFAULT,
+ '{0}',
+ );
+ static const EXTEND_CLASS_FOR_MIXIN = FixKind(
+ 'dart.fix.extendClassForMixin',
+ DartFixKindPriority.DEFAULT,
+ "Extend the class '{0}'",
+ );
+ static const IGNORE_ERROR_LINE = FixKind(
+ 'dart.fix.ignore.line',
+ DartFixKindPriority.IGNORE,
+ "Ignore '{0}' for this line",
+ );
+ static const IGNORE_ERROR_FILE = FixKind(
+ 'dart.fix.ignore.file',
+ DartFixKindPriority.IGNORE - 1,
+ "Ignore '{0}' for this file",
+ );
+ static const IMPORT_ASYNC = FixKind(
+ 'dart.fix.import.async',
+ 49,
+ "Import 'dart:async'",
+ );
+ static const IMPORT_LIBRARY_PREFIX = FixKind(
+ 'dart.fix.import.libraryPrefix',
+ 49,
+ "Use imported library '{0}' with prefix '{1}'",
+ );
static const IMPORT_LIBRARY_PROJECT1 = FixKind(
- 'dart.fix.import.libraryProject1',
- DartFixKindPriority.DEFAULT + 3,
- "Import library '{0}'");
+ 'dart.fix.import.libraryProject1',
+ DartFixKindPriority.DEFAULT + 3,
+ "Import library '{0}'",
+ );
static const IMPORT_LIBRARY_PROJECT2 = FixKind(
- 'dart.fix.import.libraryProject2',
- DartFixKindPriority.DEFAULT + 2,
- "Import library '{0}'");
+ 'dart.fix.import.libraryProject2',
+ DartFixKindPriority.DEFAULT + 2,
+ "Import library '{0}'",
+ );
static const IMPORT_LIBRARY_PROJECT3 = FixKind(
- 'dart.fix.import.libraryProject3',
- DartFixKindPriority.DEFAULT + 1,
- "Import library '{0}'");
- static const IMPORT_LIBRARY_SDK = FixKind('dart.fix.import.librarySdk',
- DartFixKindPriority.DEFAULT + 4, "Import library '{0}'");
- static const IMPORT_LIBRARY_SHOW = FixKind('dart.fix.import.libraryShow',
- DartFixKindPriority.DEFAULT + 5, "Update library '{0}' import");
- static const INLINE_INVOCATION = FixKind('dart.fix.inlineInvocation',
- DartFixKindPriority.DEFAULT - 20, "Inline invocation of '{0}'");
+ 'dart.fix.import.libraryProject3',
+ DartFixKindPriority.DEFAULT + 1,
+ "Import library '{0}'",
+ );
+ static const IMPORT_LIBRARY_SDK = FixKind(
+ 'dart.fix.import.librarySdk',
+ DartFixKindPriority.DEFAULT + 4,
+ "Import library '{0}'",
+ );
+ static const IMPORT_LIBRARY_SHOW = FixKind(
+ 'dart.fix.import.libraryShow',
+ DartFixKindPriority.DEFAULT + 5,
+ "Update library '{0}' import",
+ );
+ static const INLINE_INVOCATION = FixKind(
+ 'dart.fix.inlineInvocation',
+ DartFixKindPriority.DEFAULT - 20,
+ "Inline invocation of '{0}'",
+ );
static const INLINE_INVOCATION_MULTI = FixKind(
- 'dart.fix.inlineInvocation.multi',
- DartFixKindPriority.IN_FILE - 20,
- 'Inline invocations everywhere in file');
- static const INLINE_TYPEDEF = FixKind('dart.fix.inlineTypedef',
- DartFixKindPriority.DEFAULT - 20, "Inline the definition of '{0}'");
+ 'dart.fix.inlineInvocation.multi',
+ DartFixKindPriority.IN_FILE - 20,
+ 'Inline invocations everywhere in file',
+ );
+ static const INLINE_TYPEDEF = FixKind(
+ 'dart.fix.inlineTypedef',
+ DartFixKindPriority.DEFAULT - 20,
+ "Inline the definition of '{0}'",
+ );
static const INLINE_TYPEDEF_MULTI = FixKind(
- 'dart.fix.inlineTypedef.multi',
- DartFixKindPriority.IN_FILE - 20,
- 'Inline type definitions everywhere in file');
+ 'dart.fix.inlineTypedef.multi',
+ DartFixKindPriority.IN_FILE - 20,
+ 'Inline type definitions everywhere in file',
+ );
static const INSERT_SEMICOLON = FixKind(
- 'dart.fix.insertSemicolon', DartFixKindPriority.DEFAULT, "Insert ';'");
- static const MAKE_CLASS_ABSTRACT = FixKind('dart.fix.makeClassAbstract',
- DartFixKindPriority.DEFAULT, "Make class '{0}' abstract");
- static const MAKE_FIELD_NOT_FINAL = FixKind('dart.fix.makeFieldNotFinal',
- DartFixKindPriority.DEFAULT, "Make field '{0}' not final");
- static const MAKE_FINAL =
- FixKind('dart.fix.makeFinal', DartFixKindPriority.DEFAULT, 'Make final');
+ 'dart.fix.insertSemicolon',
+ DartFixKindPriority.DEFAULT,
+ "Insert ';'",
+ );
+ static const MAKE_CLASS_ABSTRACT = FixKind(
+ 'dart.fix.makeClassAbstract',
+ DartFixKindPriority.DEFAULT,
+ "Make class '{0}' abstract",
+ );
+ static const MAKE_FIELD_NOT_FINAL = FixKind(
+ 'dart.fix.makeFieldNotFinal',
+ DartFixKindPriority.DEFAULT,
+ "Make field '{0}' not final",
+ );
+ static const MAKE_FINAL = FixKind(
+ 'dart.fix.makeFinal',
+ DartFixKindPriority.DEFAULT,
+ 'Make final',
+ );
// todo (pq): consider parameterizing: 'Make {fields} final...'
- static const MAKE_FINAL_MULTI = FixKind('dart.fix.makeFinal.multi',
- DartFixKindPriority.IN_FILE, 'Make final where possible in file');
+ static const MAKE_FINAL_MULTI = FixKind(
+ 'dart.fix.makeFinal.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Make final where possible in file',
+ );
static const MAKE_RETURN_TYPE_NULLABLE = FixKind(
- 'dart.fix.makeReturnTypeNullable',
- DartFixKindPriority.DEFAULT,
- 'Make the return type nullable');
+ 'dart.fix.makeReturnTypeNullable',
+ DartFixKindPriority.DEFAULT,
+ 'Make the return type nullable',
+ );
static const MOVE_TYPE_ARGUMENTS_TO_CLASS = FixKind(
- 'dart.fix.moveTypeArgumentsToClass',
- DartFixKindPriority.DEFAULT,
- 'Move type arguments to after class name');
+ 'dart.fix.moveTypeArgumentsToClass',
+ DartFixKindPriority.DEFAULT,
+ 'Move type arguments to after class name',
+ );
static const MAKE_VARIABLE_NOT_FINAL = FixKind(
- 'dart.fix.makeVariableNotFinal',
- DartFixKindPriority.DEFAULT,
- "Make variable '{0}' not final");
- static const MAKE_VARIABLE_NULLABLE = FixKind('dart.fix.makeVariableNullable',
- DartFixKindPriority.DEFAULT, "Make '{0}' nullable");
- static const ORGANIZE_IMPORTS = FixKind('dart.fix.organize.imports',
- DartFixKindPriority.DEFAULT, 'Organize Imports');
+ 'dart.fix.makeVariableNotFinal',
+ DartFixKindPriority.DEFAULT,
+ "Make variable '{0}' not final",
+ );
+ static const MAKE_VARIABLE_NULLABLE = FixKind(
+ 'dart.fix.makeVariableNullable',
+ DartFixKindPriority.DEFAULT,
+ "Make '{0}' nullable",
+ );
+ static const ORGANIZE_IMPORTS = FixKind(
+ 'dart.fix.organize.imports',
+ DartFixKindPriority.DEFAULT,
+ 'Organize Imports',
+ );
static const QUALIFY_REFERENCE = FixKind(
- 'dart.fix.qualifyReference', DartFixKindPriority.DEFAULT, "Use '{0}'");
- static const REMOVE_ANNOTATION = FixKind('dart.fix.remove.annotation',
- DartFixKindPriority.DEFAULT, "Remove the '{0}' annotation");
- static const REMOVE_ARGUMENT = FixKind('dart.fix.remove.argument',
- DartFixKindPriority.DEFAULT, 'Remove argument');
+ 'dart.fix.qualifyReference',
+ DartFixKindPriority.DEFAULT,
+ "Use '{0}'",
+ );
+ static const REMOVE_ANNOTATION = FixKind(
+ 'dart.fix.remove.annotation',
+ DartFixKindPriority.DEFAULT,
+ "Remove the '{0}' annotation",
+ );
+ static const REMOVE_ARGUMENT = FixKind(
+ 'dart.fix.remove.argument',
+ DartFixKindPriority.DEFAULT,
+ 'Remove argument',
+ );
// todo (pq): used by LintNames.avoid_redundant_argument_values; consider a parameterized message
- static const REMOVE_ARGUMENT_MULTI = FixKind('dart.fix.remove.argument.multi',
- DartFixKindPriority.IN_FILE, 'Remove arguments in file');
+ static const REMOVE_ARGUMENT_MULTI = FixKind(
+ 'dart.fix.remove.argument.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove arguments in file',
+ );
static const REMOVE_AWAIT = FixKind(
- 'dart.fix.remove.await', DartFixKindPriority.DEFAULT, 'Remove await');
- static const REMOVE_AWAIT_MULTI = FixKind('dart.fix.remove.await.multi',
- DartFixKindPriority.IN_FILE, 'Remove awaits in file');
- static const REMOVE_COMPARISON = FixKind('dart.fix.remove.comparison',
- DartFixKindPriority.DEFAULT, 'Remove comparison');
+ 'dart.fix.remove.await',
+ DartFixKindPriority.DEFAULT,
+ 'Remove await',
+ );
+ static const REMOVE_AWAIT_MULTI = FixKind(
+ 'dart.fix.remove.await.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove awaits in file',
+ );
+ static const REMOVE_COMPARISON = FixKind(
+ 'dart.fix.remove.comparison',
+ DartFixKindPriority.DEFAULT,
+ 'Remove comparison',
+ );
static const REMOVE_COMPARISON_MULTI = FixKind(
- 'dart.fix.remove.comparison.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove comparisons in file');
+ 'dart.fix.remove.comparison.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove comparisons in file',
+ );
static const REMOVE_CONST = FixKind(
- 'dart.fix.remove.const', DartFixKindPriority.DEFAULT, 'Remove const');
- static const REMOVE_DEAD_CODE = FixKind('dart.fix.remove.deadCode',
- DartFixKindPriority.DEFAULT, 'Remove dead code');
- static const REMOVE_DUPLICATE_CASE = FixKind('dart.fix.remove.duplicateCase',
- DartFixKindPriority.DEFAULT, 'Remove duplicate case statement');
+ 'dart.fix.remove.const',
+ DartFixKindPriority.DEFAULT,
+ 'Remove const',
+ );
+ static const REMOVE_DEAD_CODE = FixKind(
+ 'dart.fix.remove.deadCode',
+ DartFixKindPriority.DEFAULT,
+ 'Remove dead code',
+ );
+ static const REMOVE_DUPLICATE_CASE = FixKind(
+ 'dart.fix.remove.duplicateCase',
+ DartFixKindPriority.DEFAULT,
+ 'Remove duplicate case statement',
+ );
// todo (pq): is this dangerous to bulk apply? Consider removing.
static const REMOVE_DUPLICATE_CASE_MULTI = FixKind(
- 'dart.fix.remove.duplicateCase.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove duplicate case statement');
- static const REMOVE_EMPTY_CATCH = FixKind('dart.fix.remove.emptyCatch',
- DartFixKindPriority.DEFAULT, 'Remove empty catch clause');
+ 'dart.fix.remove.duplicateCase.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove duplicate case statement',
+ );
+ static const REMOVE_EMPTY_CATCH = FixKind(
+ 'dart.fix.remove.emptyCatch',
+ DartFixKindPriority.DEFAULT,
+ 'Remove empty catch clause',
+ );
static const REMOVE_EMPTY_CATCH_MULTI = FixKind(
- 'dart.fix.remove.emptyCatch.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove empty catch clauses everywhere in file');
+ 'dart.fix.remove.emptyCatch.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove empty catch clauses everywhere in file',
+ );
static const REMOVE_EMPTY_CONSTRUCTOR_BODY = FixKind(
- 'dart.fix.remove.emptyConstructorBody',
- DartFixKindPriority.DEFAULT,
- 'Remove empty constructor body');
+ 'dart.fix.remove.emptyConstructorBody',
+ DartFixKindPriority.DEFAULT,
+ 'Remove empty constructor body',
+ );
static const REMOVE_EMPTY_CONSTRUCTOR_BODY_MULTI = FixKind(
- 'dart.fix.remove.emptyConstructorBody.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove empty constructor bodies in file');
- static const REMOVE_EMPTY_ELSE = FixKind('dart.fix.remove.emptyElse',
- DartFixKindPriority.DEFAULT, 'Remove empty else clause');
+ 'dart.fix.remove.emptyConstructorBody.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove empty constructor bodies in file',
+ );
+ static const REMOVE_EMPTY_ELSE = FixKind(
+ 'dart.fix.remove.emptyElse',
+ DartFixKindPriority.DEFAULT,
+ 'Remove empty else clause',
+ );
static const REMOVE_EMPTY_ELSE_MULTI = FixKind(
- 'dart.fix.remove.emptyElse.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove empty else clauses everywhere in file');
+ 'dart.fix.remove.emptyElse.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove empty else clauses everywhere in file',
+ );
static const REMOVE_EMPTY_STATEMENT = FixKind(
- 'dart.fix.remove.emptyStatement',
- DartFixKindPriority.DEFAULT,
- 'Remove empty statement');
+ 'dart.fix.remove.emptyStatement',
+ DartFixKindPriority.DEFAULT,
+ 'Remove empty statement',
+ );
static const REMOVE_EMPTY_STATEMENT_MULTI = FixKind(
- 'dart.fix.remove.emptyStatement.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove empty statements everywhere in file');
+ 'dart.fix.remove.emptyStatement.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove empty statements everywhere in file',
+ );
static const REMOVE_IF_NULL_OPERATOR = FixKind(
- 'dart.fix.remove.ifNullOperator',
- DartFixKindPriority.DEFAULT,
- "Remove the '??' operator");
+ 'dart.fix.remove.ifNullOperator',
+ DartFixKindPriority.DEFAULT,
+ "Remove the '??' operator",
+ );
static const REMOVE_IF_NULL_OPERATOR_MULTI = FixKind(
- 'dart.fix.remove.ifNullOperator.multi',
- DartFixKindPriority.IN_FILE,
- "Remove unnecessary '??' operators everywhere in file");
- static const REMOVE_INITIALIZER = FixKind('dart.fix.remove.initializer',
- DartFixKindPriority.DEFAULT, 'Remove initializer');
+ 'dart.fix.remove.ifNullOperator.multi',
+ DartFixKindPriority.IN_FILE,
+ "Remove unnecessary '??' operators everywhere in file",
+ );
+ static const REMOVE_INITIALIZER = FixKind(
+ 'dart.fix.remove.initializer',
+ DartFixKindPriority.DEFAULT,
+ 'Remove initializer',
+ );
static const REMOVE_INITIALIZER_MULTI = FixKind(
- 'dart.fix.remove.initializer.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary initializers everywhere in file');
+ 'dart.fix.remove.initializer.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary initializers everywhere in file',
+ );
static const REMOVE_INTERPOLATION_BRACES = FixKind(
- 'dart.fix.remove.interpolationBraces',
- DartFixKindPriority.DEFAULT,
- 'Remove unnecessary interpolation braces');
+ 'dart.fix.remove.interpolationBraces',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unnecessary interpolation braces',
+ );
static const REMOVE_INTERPOLATION_BRACES_MULTI = FixKind(
- 'dart.fix.remove.interpolationBraces.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary interpolation braces everywhere in file');
+ 'dart.fix.remove.interpolationBraces.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary interpolation braces everywhere in file',
+ );
static const REMOVE_METHOD_DECLARATION = FixKind(
- 'dart.fix.remove.methodDeclaration',
- DartFixKindPriority.DEFAULT,
- 'Remove method declaration');
+ 'dart.fix.remove.methodDeclaration',
+ DartFixKindPriority.DEFAULT,
+ 'Remove method declaration',
+ );
// todo (pq): parameterize to make scope explicit
static const REMOVE_METHOD_DECLARATION_MULTI = FixKind(
- 'dart.fix.remove.methodDeclaration.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary method declarations in file');
+ 'dart.fix.remove.methodDeclaration.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary method declarations in file',
+ );
static const REMOVE_NAME_FROM_COMBINATOR = FixKind(
- 'dart.fix.remove.nameFromCombinator',
- DartFixKindPriority.DEFAULT,
- "Remove name from '{0}'");
+ 'dart.fix.remove.nameFromCombinator',
+ DartFixKindPriority.DEFAULT,
+ "Remove name from '{0}'",
+ );
static const REMOVE_NON_NULL_ASSERTION = FixKind(
- 'dart.fix.remove.nonNullAssertion',
- DartFixKindPriority.DEFAULT,
- "Remove the '!'");
+ 'dart.fix.remove.nonNullAssertion',
+ DartFixKindPriority.DEFAULT,
+ "Remove the '!'",
+ );
static const REMOVE_NON_NULL_ASSERTION_MULTI = FixKind(
- 'dart.fix.remove.nonNullAssertion.multi',
- DartFixKindPriority.IN_FILE,
- "Remove '!'s in file");
- static const REMOVE_OPERATOR = FixKind('dart.fix.remove.operator',
- DartFixKindPriority.DEFAULT, 'Remove the operator');
+ 'dart.fix.remove.nonNullAssertion.multi',
+ DartFixKindPriority.IN_FILE,
+ "Remove '!'s in file",
+ );
+ static const REMOVE_OPERATOR = FixKind(
+ 'dart.fix.remove.operator',
+ DartFixKindPriority.DEFAULT,
+ 'Remove the operator',
+ );
static const REMOVE_OPERATOR_MULTI = FixKind(
- 'dart.fix.remove.operator.multi.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove operators in file');
+ 'dart.fix.remove.operator.multi.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove operators in file',
+ );
static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = FixKind(
- 'dart.fix.remove.parametersInGetterDeclaration',
- DartFixKindPriority.DEFAULT,
- 'Remove parameters in getter declaration');
+ 'dart.fix.remove.parametersInGetterDeclaration',
+ DartFixKindPriority.DEFAULT,
+ 'Remove parameters in getter declaration',
+ );
static const REMOVE_PARENTHESIS_IN_GETTER_INVOCATION = FixKind(
- 'dart.fix.remove.parenthesisInGetterInvocation',
- DartFixKindPriority.DEFAULT,
- 'Remove parentheses in getter invocation');
- static const REMOVE_QUESTION_MARK = FixKind('dart.fix.remove.questionMark',
- DartFixKindPriority.DEFAULT, "Remove the '?'");
+ 'dart.fix.remove.parenthesisInGetterInvocation',
+ DartFixKindPriority.DEFAULT,
+ 'Remove parentheses in getter invocation',
+ );
+ static const REMOVE_QUESTION_MARK = FixKind(
+ 'dart.fix.remove.questionMark',
+ DartFixKindPriority.DEFAULT,
+ "Remove the '?'",
+ );
static const REMOVE_QUESTION_MARK_MULTI = FixKind(
- 'dart.fix.remove.questionMark.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary question marks in file');
- static const REMOVE_RETURNED_VALUE = FixKind('dart.fix.remove.returnedValue',
- DartFixKindPriority.DEFAULT, 'Remove invalid returned value');
+ 'dart.fix.remove.questionMark.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary question marks in file',
+ );
+ static const REMOVE_RETURNED_VALUE = FixKind(
+ 'dart.fix.remove.returnedValue',
+ DartFixKindPriority.DEFAULT,
+ 'Remove invalid returned value',
+ );
static const REMOVE_RETURNED_VALUE_MULTI = FixKind(
- 'dart.fix.remove.returnedValue.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove invalid returned values in file');
+ 'dart.fix.remove.returnedValue.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove invalid returned values in file',
+ );
static const REMOVE_THIS_EXPRESSION = FixKind(
- 'dart.fix.remove.thisExpression',
- DartFixKindPriority.DEFAULT,
- "Remove 'this' expression");
+ 'dart.fix.remove.thisExpression',
+ DartFixKindPriority.DEFAULT,
+ "Remove 'this' expression",
+ );
static const REMOVE_THIS_EXPRESSION_MULTI = FixKind(
- 'dart.fix.remove.thisExpression.multi',
- DartFixKindPriority.IN_FILE,
- "Remove unnecessary 'this' expressions everywhere in file");
+ 'dart.fix.remove.thisExpression.multi',
+ DartFixKindPriority.IN_FILE,
+ "Remove unnecessary 'this' expressions everywhere in file",
+ );
static const REMOVE_TYPE_ANNOTATION = FixKind(
- 'dart.fix.remove.typeAnnotation',
- DartFixKindPriority.DEFAULT,
- 'Remove type annotation');
+ 'dart.fix.remove.typeAnnotation',
+ DartFixKindPriority.DEFAULT,
+ 'Remove type annotation',
+ );
static const REMOVE_TYPE_ANNOTATION_MULTI = FixKind(
- 'dart.fix.remove.typeAnnotation.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary type annotations in file');
- static const REMOVE_TYPE_ARGUMENTS =
- FixKind('dart.fix.remove.typeArguments', 49, 'Remove type arguments');
+ 'dart.fix.remove.typeAnnotation.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary type annotations in file',
+ );
+ static const REMOVE_TYPE_ARGUMENTS = FixKind(
+ 'dart.fix.remove.typeArguments',
+ 49,
+ 'Remove type arguments',
+ );
static const REMOVE_UNNECESSARY_CAST = FixKind(
- 'dart.fix.remove.unnecessaryCast',
- DartFixKindPriority.DEFAULT,
- 'Remove unnecessary cast');
+ 'dart.fix.remove.unnecessaryCast',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unnecessary cast',
+ );
static const REMOVE_UNNECESSARY_CAST_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryCast.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove all unnecessary casts in file');
+ 'dart.fix.remove.unnecessaryCast.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove all unnecessary casts in file',
+ );
static const REMOVE_UNNECESSARY_CONST = FixKind(
- 'dart.fix.remove.unnecessaryConst',
- DartFixKindPriority.DEFAULT,
- 'Remove unnecessary const keyword');
+ 'dart.fix.remove.unnecessaryConst',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unnecessary const keyword',
+ );
static const REMOVE_UNNECESSARY_CONST_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryConst.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary const keywords everywhere in file');
+ 'dart.fix.remove.unnecessaryConst.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary const keywords everywhere in file',
+ );
static const REMOVE_UNNECESSARY_NEW = FixKind(
- 'dart.fix.remove.unnecessaryNew',
- DartFixKindPriority.DEFAULT,
- 'Remove unnecessary new keyword');
+ 'dart.fix.remove.unnecessaryNew',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unnecessary new keyword',
+ );
static const REMOVE_UNNECESSARY_NEW_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryNew.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unnecessary new keywords everywhere in file');
+ 'dart.fix.remove.unnecessaryNew.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unnecessary new keywords everywhere in file',
+ );
static const REMOVE_UNNECESSARY_CONTAINER = FixKind(
- 'dart.fix.remove.unnecessaryContainer',
- DartFixKindPriority.DEFAULT,
- "Remove unnecessary 'Container'");
+ 'dart.fix.remove.unnecessaryContainer',
+ DartFixKindPriority.DEFAULT,
+ "Remove unnecessary 'Container'",
+ );
static const REMOVE_UNNECESSARY_CONTAINER_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryContainer.multi',
- DartFixKindPriority.IN_FILE,
- "Remove unnecessary 'Container's in file");
+ 'dart.fix.remove.unnecessaryContainer.multi',
+ DartFixKindPriority.IN_FILE,
+ "Remove unnecessary 'Container's in file",
+ );
static const REMOVE_UNNECESSARY_PARENTHESES = FixKind(
- 'dart.fix.remove.unnecessaryParentheses',
- DartFixKindPriority.DEFAULT,
- 'Remove unnecessary parentheses');
+ 'dart.fix.remove.unnecessaryParentheses',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unnecessary parentheses',
+ );
static const REMOVE_UNNECESSARY_PARENTHESES_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryParentheses.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove all unnecessary parentheses in file');
+ 'dart.fix.remove.unnecessaryParentheses.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove all unnecessary parentheses in file',
+ );
static const REMOVE_UNNECESSARY_STRING_ESCAPE = FixKind(
- 'dart.fix.remove.unnecessaryStringEscape',
- DartFixKindPriority.DEFAULT,
- "Remove unnecessary '\\' in string");
+ 'dart.fix.remove.unnecessaryStringEscape',
+ DartFixKindPriority.DEFAULT,
+ "Remove unnecessary '\\' in string",
+ );
static const REMOVE_UNNECESSARY_STRING_ESCAPE_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryStringEscape.multi',
- DartFixKindPriority.DEFAULT,
- "Remove unnecessary '\\' in strings in file");
+ 'dart.fix.remove.unnecessaryStringEscape.multi',
+ DartFixKindPriority.DEFAULT,
+ "Remove unnecessary '\\' in strings in file",
+ );
static const REMOVE_UNNECESSARY_STRING_INTERPOLATION = FixKind(
- 'dart.fix.remove.unnecessaryStringInterpolation',
- DartFixKindPriority.DEFAULT,
- 'Remove unnecessary string interpolation');
+ 'dart.fix.remove.unnecessaryStringInterpolation',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unnecessary string interpolation',
+ );
static const REMOVE_UNNECESSARY_STRING_INTERPOLATION_MULTI = FixKind(
- 'dart.fix.remove.unnecessaryStringInterpolation.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove all unnecessary string interpolations in file');
+ 'dart.fix.remove.unnecessaryStringInterpolation.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove all unnecessary string interpolations in file',
+ );
static const REMOVE_UNUSED_CATCH_CLAUSE = FixKind(
- 'dart.fix.remove.unusedCatchClause',
- DartFixKindPriority.DEFAULT,
- "Remove unused 'catch' clause");
+ 'dart.fix.remove.unusedCatchClause',
+ DartFixKindPriority.DEFAULT,
+ "Remove unused 'catch' clause",
+ );
static const REMOVE_UNUSED_CATCH_STACK = FixKind(
- 'dart.fix.remove.unusedCatchStack',
- DartFixKindPriority.DEFAULT,
- 'Remove unused stack trace variable');
- static const REMOVE_UNUSED_ELEMENT = FixKind('dart.fix.remove.unusedElement',
- DartFixKindPriority.DEFAULT, 'Remove unused element');
- static const REMOVE_UNUSED_FIELD = FixKind('dart.fix.remove.unusedField',
- DartFixKindPriority.DEFAULT, 'Remove unused field');
- static const REMOVE_UNUSED_IMPORT = FixKind('dart.fix.remove.unusedImport',
- DartFixKindPriority.DEFAULT, 'Remove unused import');
+ 'dart.fix.remove.unusedCatchStack',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unused stack trace variable',
+ );
+ static const REMOVE_UNUSED_ELEMENT = FixKind(
+ 'dart.fix.remove.unusedElement',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unused element',
+ );
+ static const REMOVE_UNUSED_FIELD = FixKind(
+ 'dart.fix.remove.unusedField',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unused field',
+ );
+ static const REMOVE_UNUSED_IMPORT = FixKind(
+ 'dart.fix.remove.unusedImport',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unused import',
+ );
static const REMOVE_UNUSED_IMPORT_MULTI = FixKind(
- 'dart.fix.remove.unusedImport.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove all unused imports in file');
- static const REMOVE_UNUSED_LABEL = FixKind('dart.fix.remove.unusedLabel',
- DartFixKindPriority.DEFAULT, 'Remove unused label');
+ 'dart.fix.remove.unusedImport.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove all unused imports in file',
+ );
+ static const REMOVE_UNUSED_LABEL = FixKind(
+ 'dart.fix.remove.unusedLabel',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unused label',
+ );
static const REMOVE_UNUSED_LOCAL_VARIABLE = FixKind(
- 'dart.fix.remove.unusedLocalVariable',
- DartFixKindPriority.DEFAULT,
- 'Remove unused local variable');
+ 'dart.fix.remove.unusedLocalVariable',
+ DartFixKindPriority.DEFAULT,
+ 'Remove unused local variable',
+ );
static const REMOVE_UNUSED_PARAMETER = FixKind(
- 'dart.fix.remove.unusedParameter',
- DartFixKindPriority.DEFAULT,
- 'Remove the unused parameter');
+ 'dart.fix.remove.unusedParameter',
+ DartFixKindPriority.DEFAULT,
+ 'Remove the unused parameter',
+ );
static const REMOVE_UNUSED_PARAMETER_MULTI = FixKind(
- 'dart.fix.remove.unusedParameter.multi',
- DartFixKindPriority.IN_FILE,
- 'Remove unused parameters everywhere in file');
- static const RENAME_TO_CAMEL_CASE = FixKind('dart.fix.rename.toCamelCase',
- DartFixKindPriority.DEFAULT, "Rename to '{0}'");
+ 'dart.fix.remove.unusedParameter.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Remove unused parameters everywhere in file',
+ );
+ static const RENAME_TO_CAMEL_CASE = FixKind(
+ 'dart.fix.rename.toCamelCase',
+ DartFixKindPriority.DEFAULT,
+ "Rename to '{0}'",
+ );
static const RENAME_TO_CAMEL_CASE_MULTI = FixKind(
- 'dart.fix.rename.toCamelCase.multi',
- DartFixKindPriority.IN_FILE,
- 'Rename to camel case everywhere in file');
+ 'dart.fix.rename.toCamelCase.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Rename to camel case everywhere in file',
+ );
static const REPLACE_BOOLEAN_WITH_BOOL = FixKind(
- 'dart.fix.replace.booleanWithBool',
- DartFixKindPriority.DEFAULT,
- "Replace 'boolean' with 'bool'");
+ 'dart.fix.replace.booleanWithBool',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'boolean' with 'bool'",
+ );
static const REPLACE_BOOLEAN_WITH_BOOL_MULTI = FixKind(
- 'dart.fix.replace.booleanWithBool.multi',
- DartFixKindPriority.IN_FILE,
- "Replace all 'boolean's with 'bool' in file");
+ 'dart.fix.replace.booleanWithBool.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace all 'boolean's with 'bool' in file",
+ );
static const REPLACE_CASCADE_WITH_DOT = FixKind(
- 'dart.fix.replace.cascadeWithDot',
- DartFixKindPriority.DEFAULT,
- "Replace '..' with '.'");
+ 'dart.fix.replace.cascadeWithDot',
+ DartFixKindPriority.DEFAULT,
+ "Replace '..' with '.'",
+ );
static const REPLACE_CASCADE_WITH_DOT_MULTI = FixKind(
- 'dart.fix.replace.cascadeWithDot.multi',
- DartFixKindPriority.IN_FILE,
- "Replace unnecessary '..'s with '.'s everywhere in file");
+ 'dart.fix.replace.cascadeWithDot.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace unnecessary '..'s with '.'s everywhere in file",
+ );
static const REPLACE_COLON_WITH_EQUALS = FixKind(
- 'dart.fix.replace.colonWithEquals',
- DartFixKindPriority.DEFAULT,
- "Replace ':' with '='");
+ 'dart.fix.replace.colonWithEquals',
+ DartFixKindPriority.DEFAULT,
+ "Replace ':' with '='",
+ );
static const REPLACE_COLON_WITH_EQUALS_MULTI = FixKind(
- 'dart.fix.replace.colonWithEquals.multi',
- DartFixKindPriority.IN_FILE,
- "Replace ':'s with '='s everywhere in file");
+ 'dart.fix.replace.colonWithEquals.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace ':'s with '='s everywhere in file",
+ );
static const REPLACE_WITH_FILLED = FixKind(
- 'dart.fix.replace.finalWithListFilled',
- DartFixKindPriority.DEFAULT,
- "Replace with 'List.filled'");
+ 'dart.fix.replace.finalWithListFilled',
+ DartFixKindPriority.DEFAULT,
+ "Replace with 'List.filled'",
+ );
static const REPLACE_FINAL_WITH_CONST = FixKind(
- 'dart.fix.replace.finalWithConst',
- DartFixKindPriority.DEFAULT,
- "Replace 'final' with 'const'");
+ 'dart.fix.replace.finalWithConst',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'final' with 'const'",
+ );
static const REPLACE_FINAL_WITH_CONST_MULTI = FixKind(
- 'dart.fix.replace.finalWithConst.multi',
- DartFixKindPriority.IN_FILE,
- "Replace 'final' with 'const' where possible in file");
- static const REPLACE_NEW_WITH_CONST = FixKind('dart.fix.replace.newWithConst',
- DartFixKindPriority.DEFAULT, "Replace 'new' with 'const'");
+ 'dart.fix.replace.finalWithConst.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace 'final' with 'const' where possible in file",
+ );
+ static const REPLACE_NEW_WITH_CONST = FixKind(
+ 'dart.fix.replace.newWithConst',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'new' with 'const'",
+ );
static const REPLACE_NEW_WITH_CONST_MULTI = FixKind(
- 'dart.fix.replace.newWithConst.multi',
- DartFixKindPriority.IN_FILE,
- "Replace 'new' with 'const' where possible in file");
+ 'dart.fix.replace.newWithConst.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace 'new' with 'const' where possible in file",
+ );
static const REPLACE_NULL_WITH_CLOSURE = FixKind(
- 'dart.fix.replace.nullWithClosure',
- DartFixKindPriority.DEFAULT,
- "Replace 'null' with a closure");
+ 'dart.fix.replace.nullWithClosure',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'null' with a closure",
+ );
static const REPLACE_NULL_WITH_CLOSURE_MULTI = FixKind(
- 'dart.fix.replace.nullWithClosure.multi',
- DartFixKindPriority.IN_FILE,
- "Replace 'null's with closures where possible in file");
- static const REPLACE_FINAL_WITH_VAR = FixKind('dart.fix.replace.finalWithVar',
- DartFixKindPriority.DEFAULT, "Replace 'final' with 'var'");
+ 'dart.fix.replace.nullWithClosure.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace 'null's with closures where possible in file",
+ );
+ static const REPLACE_FINAL_WITH_VAR = FixKind(
+ 'dart.fix.replace.finalWithVar',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'final' with 'var'",
+ );
static const REPLACE_FINAL_WITH_VAR_MULTI = FixKind(
- 'dart.fix.replace.finalWithVar.multi',
- DartFixKindPriority.IN_FILE,
- "Replace 'final' with 'var' where possible in file");
- static const REPLACE_NULL_WITH_VOID = FixKind('dart.fix.replace.nullWithVoid',
- DartFixKindPriority.DEFAULT, "Replace 'Null' with 'void'");
+ 'dart.fix.replace.finalWithVar.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace 'final' with 'var' where possible in file",
+ );
+ static const REPLACE_NULL_WITH_VOID = FixKind(
+ 'dart.fix.replace.nullWithVoid',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'Null' with 'void'",
+ );
static const REPLACE_NULL_WITH_VOID_MULTI = FixKind(
- 'dart.fix.replace.nullWithVoid.multi',
- DartFixKindPriority.DEFAULT,
- "Replace 'Null' with 'void' everywhere in file");
- static const REPLACE_RETURN_TYPE = FixKind('dart.fix.replace.returnType',
- DartFixKindPriority.DEFAULT, "Replace the return type with '{0}'");
+ 'dart.fix.replace.nullWithVoid.multi',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'Null' with 'void' everywhere in file",
+ );
+ static const REPLACE_RETURN_TYPE = FixKind(
+ 'dart.fix.replace.returnType',
+ DartFixKindPriority.DEFAULT,
+ "Replace the return type with '{0}'",
+ );
static const REPLACE_RETURN_TYPE_FUTURE = FixKind(
- 'dart.fix.replace.returnTypeFuture',
- DartFixKindPriority.DEFAULT,
- "Return 'Future' from 'async' function");
+ 'dart.fix.replace.returnTypeFuture',
+ DartFixKindPriority.DEFAULT,
+ "Return 'Future' from 'async' function",
+ );
static const REPLACE_CONTAINER_WITH_SIZED_BOX = FixKind(
- 'dart.fix.replace.containerWithSizedBox',
- DartFixKindPriority.DEFAULT,
- "Replace with 'SizedBox'");
+ 'dart.fix.replace.containerWithSizedBox',
+ DartFixKindPriority.DEFAULT,
+ "Replace with 'SizedBox'",
+ );
static const REPLACE_CONTAINER_WITH_SIZED_BOX_MULTI = FixKind(
- 'dart.fix.replace.containerWithSizedBox.multi',
- DartFixKindPriority.DEFAULT,
- "Replace with 'SizedBox' everywhere in file");
+ 'dart.fix.replace.containerWithSizedBox.multi',
+ DartFixKindPriority.DEFAULT,
+ "Replace with 'SizedBox' everywhere in file",
+ );
static const REPLACE_VAR_WITH_DYNAMIC = FixKind(
- 'dart.fix.replace.varWithDynamic',
- DartFixKindPriority.DEFAULT,
- "Replace 'var' with 'dynamic'");
+ 'dart.fix.replace.varWithDynamic',
+ DartFixKindPriority.DEFAULT,
+ "Replace 'var' with 'dynamic'",
+ );
static const REPLACE_WITH_EIGHT_DIGIT_HEX = FixKind(
- 'dart.fix.replace.withEightDigitHex',
- DartFixKindPriority.DEFAULT,
- "Replace with '{0}'");
+ 'dart.fix.replace.withEightDigitHex',
+ DartFixKindPriority.DEFAULT,
+ "Replace with '{0}'",
+ );
static const REPLACE_WITH_EIGHT_DIGIT_HEX_MULTI = FixKind(
- 'dart.fix.replace.withEightDigitHex.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace with hex digits everywhere in file');
- static const REPLACE_WITH_BRACKETS = FixKind('dart.fix.replace.withBrackets',
- DartFixKindPriority.DEFAULT, 'Replace with { }');
+ 'dart.fix.replace.withEightDigitHex.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace with hex digits everywhere in file',
+ );
+ static const REPLACE_WITH_BRACKETS = FixKind(
+ 'dart.fix.replace.withBrackets',
+ DartFixKindPriority.DEFAULT,
+ 'Replace with { }',
+ );
static const REPLACE_WITH_BRACKETS_MULTI = FixKind(
- 'dart.fix.replace.withBrackets.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace with { } everywhere in file');
+ 'dart.fix.replace.withBrackets.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace with { } everywhere in file',
+ );
static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT = FixKind(
- 'dart.fix.replace.withConditionalAssignment',
- DartFixKindPriority.DEFAULT,
- 'Replace with ??=');
+ 'dart.fix.replace.withConditionalAssignment',
+ DartFixKindPriority.DEFAULT,
+ 'Replace with ??=',
+ );
static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT_MULTI = FixKind(
- 'dart.fix.replace.withConditionalAssignment.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace with ??= everywhere in file');
+ 'dart.fix.replace.withConditionalAssignment.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace with ??= everywhere in file',
+ );
static const REPLACE_WITH_EXTENSION_NAME = FixKind(
- 'dart.fix.replace.withExtensionName',
- DartFixKindPriority.DEFAULT,
- "Replace with '{0}'");
+ 'dart.fix.replace.withExtensionName',
+ DartFixKindPriority.DEFAULT,
+ "Replace with '{0}'",
+ );
static const REPLACE_WITH_IDENTIFIER = FixKind(
- 'dart.fix.replace.withIdentifier',
- DartFixKindPriority.DEFAULT,
- 'Replace with identifier');
+ 'dart.fix.replace.withIdentifier',
+ DartFixKindPriority.DEFAULT,
+ 'Replace with identifier',
+ );
// todo (pq): parameterize message (used by LintNames.avoid_types_on_closure_parameters)
static const REPLACE_WITH_IDENTIFIER_MULTI = FixKind(
- 'dart.fix.replace.withIdentifier.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace with identifier everywhere in file');
+ 'dart.fix.replace.withIdentifier.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace with identifier everywhere in file',
+ );
static const REPLACE_WITH_INTERPOLATION = FixKind(
- 'dart.fix.replace.withInterpolation',
- DartFixKindPriority.DEFAULT,
- 'Replace with interpolation');
+ 'dart.fix.replace.withInterpolation',
+ DartFixKindPriority.DEFAULT,
+ 'Replace with interpolation',
+ );
static const REPLACE_WITH_INTERPOLATION_MULTI = FixKind(
- 'dart.fix.replace.withInterpolation.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace with interpolations everywhere in file');
- static const REPLACE_WITH_IS_EMPTY = FixKind('dart.fix.replace.withIsEmpty',
- DartFixKindPriority.DEFAULT, "Replace with 'isEmpty'");
+ 'dart.fix.replace.withInterpolation.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace with interpolations everywhere in file',
+ );
+ static const REPLACE_WITH_IS_EMPTY = FixKind(
+ 'dart.fix.replace.withIsEmpty',
+ DartFixKindPriority.DEFAULT,
+ "Replace with 'isEmpty'",
+ );
static const REPLACE_WITH_IS_EMPTY_MULTI = FixKind(
- 'dart.fix.replace.withIsEmpty.multi',
- DartFixKindPriority.IN_FILE,
- "Replace with 'isEmpty' everywhere in file");
+ 'dart.fix.replace.withIsEmpty.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace with 'isEmpty' everywhere in file",
+ );
static const REPLACE_WITH_IS_NOT_EMPTY = FixKind(
- 'dart.fix.replace.withIsNotEmpty',
- DartFixKindPriority.DEFAULT,
- "Replace with 'isNotEmpty'");
+ 'dart.fix.replace.withIsNotEmpty',
+ DartFixKindPriority.DEFAULT,
+ "Replace with 'isNotEmpty'",
+ );
static const REPLACE_WITH_IS_NOT_EMPTY_MULTI = FixKind(
- 'dart.fix.replace.withIsNotEmpty.multi',
- DartFixKindPriority.IN_FILE,
- "Replace with 'isNotEmpty' everywhere in file");
+ 'dart.fix.replace.withIsNotEmpty.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace with 'isNotEmpty' everywhere in file",
+ );
static const REPLACE_WITH_NOT_NULL_AWARE = FixKind(
- 'dart.fix.replace.withNotNullAware',
- DartFixKindPriority.DEFAULT,
- "Replace with '{0}'");
+ 'dart.fix.replace.withNotNullAware',
+ DartFixKindPriority.DEFAULT,
+ "Replace with '{0}'",
+ );
static const REPLACE_WITH_NOT_NULL_AWARE_MULTI = FixKind(
- 'dart.fix.replace.withNotNullAware.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace with non-null-aware operator everywhere in file.');
+ 'dart.fix.replace.withNotNullAware.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace with non-null-aware operator everywhere in file.',
+ );
static const REPLACE_WITH_NULL_AWARE = FixKind(
- 'dart.fix.replace.withNullAware',
- DartFixKindPriority.DEFAULT,
- "Replace the '.' with a '?.' in the invocation");
- static const REPLACE_WITH_TEAR_OFF = FixKind('dart.fix.replace.withTearOff',
- DartFixKindPriority.DEFAULT, 'Replace function literal with tear-off');
+ 'dart.fix.replace.withNullAware',
+ DartFixKindPriority.DEFAULT,
+ "Replace the '.' with a '?.' in the invocation",
+ );
+ static const REPLACE_WITH_TEAR_OFF = FixKind(
+ 'dart.fix.replace.withTearOff',
+ DartFixKindPriority.DEFAULT,
+ 'Replace function literal with tear-off',
+ );
static const REPLACE_WITH_TEAR_OFF_MULTI = FixKind(
- 'dart.fix.replace.withTearOff.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace function literals with tear-offs everywhere in file');
- static const REPLACE_WITH_VAR = FixKind('dart.fix.replace.withVar',
- DartFixKindPriority.DEFAULT, "Replace type annotation with 'var'");
+ 'dart.fix.replace.withTearOff.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace function literals with tear-offs everywhere in file',
+ );
+ static const REPLACE_WITH_VAR = FixKind(
+ 'dart.fix.replace.withVar',
+ DartFixKindPriority.DEFAULT,
+ "Replace type annotation with 'var'",
+ );
static const REPLACE_WITH_VAR_MULTI = FixKind(
- 'dart.fix.replace.withVar.multi',
- DartFixKindPriority.IN_FILE,
- "Replace type annotations with 'var' in file");
+ 'dart.fix.replace.withVar.multi',
+ DartFixKindPriority.IN_FILE,
+ "Replace type annotations with 'var' in file",
+ );
static const SORT_CHILD_PROPERTY_LAST = FixKind(
- 'dart.fix.sort.childPropertyLast',
- DartFixKindPriority.DEFAULT,
- 'Move child property to end of arguments');
+ 'dart.fix.sort.childPropertyLast',
+ DartFixKindPriority.DEFAULT,
+ 'Move child property to end of arguments',
+ );
static const SORT_CHILD_PROPERTY_LAST_MULTI = FixKind(
- 'dart.fix.sort.childPropertyLast.multi',
- DartFixKindPriority.IN_FILE,
- 'Move child properties to ends of arguments everywhere in file');
- static const UPDATE_SDK_CONSTRAINTS = FixKind('dart.fix.updateSdkConstraints',
- DartFixKindPriority.DEFAULT, 'Update the SDK constraints');
+ 'dart.fix.sort.childPropertyLast.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Move child properties to ends of arguments everywhere in file',
+ );
+ static const UPDATE_SDK_CONSTRAINTS = FixKind(
+ 'dart.fix.updateSdkConstraints',
+ DartFixKindPriority.DEFAULT,
+ 'Update the SDK constraints',
+ );
static const USE_CONST = FixKind(
- 'dart.fix.use.const', DartFixKindPriority.DEFAULT, 'Change to constant');
+ 'dart.fix.use.const',
+ DartFixKindPriority.DEFAULT,
+ 'Change to constant',
+ );
static const USE_EFFECTIVE_INTEGER_DIVISION = FixKind(
- 'dart.fix.use.effectiveIntegerDivision',
- DartFixKindPriority.DEFAULT,
- 'Use effective integer division ~/');
- static const USE_EQ_EQ_NULL = FixKind('dart.fix.use.eqEqNull',
- DartFixKindPriority.DEFAULT, "Use == null instead of 'is Null'");
+ 'dart.fix.use.effectiveIntegerDivision',
+ DartFixKindPriority.DEFAULT,
+ 'Use effective integer division ~/',
+ );
+ static const USE_EQ_EQ_NULL = FixKind(
+ 'dart.fix.use.eqEqNull',
+ DartFixKindPriority.DEFAULT,
+ "Use == null instead of 'is Null'",
+ );
static const USE_EQ_EQ_NULL_MULTI = FixKind(
- 'dart.fix.use.eqEqNull.multi',
- DartFixKindPriority.IN_FILE,
- "Use == null instead of 'is Null' everywhere in file");
- static const USE_IS_NOT_EMPTY = FixKind('dart.fix.use.isNotEmpty',
- DartFixKindPriority.DEFAULT, "Use x.isNotEmpty instead of '!x.isEmpty'");
+ 'dart.fix.use.eqEqNull.multi',
+ DartFixKindPriority.IN_FILE,
+ "Use == null instead of 'is Null' everywhere in file",
+ );
+ static const USE_IS_NOT_EMPTY = FixKind(
+ 'dart.fix.use.isNotEmpty',
+ DartFixKindPriority.DEFAULT,
+ "Use x.isNotEmpty instead of '!x.isEmpty'",
+ );
static const USE_IS_NOT_EMPTY_MULTI = FixKind(
- 'dart.fix.use.isNotEmpty.multi',
- DartFixKindPriority.IN_FILE,
- "Use x.isNotEmpty instead of '!x.isEmpty' everywhere in file");
- static const USE_NOT_EQ_NULL = FixKind('dart.fix.use.notEqNull',
- DartFixKindPriority.DEFAULT, "Use != null instead of 'is! Null'");
+ 'dart.fix.use.isNotEmpty.multi',
+ DartFixKindPriority.IN_FILE,
+ "Use x.isNotEmpty instead of '!x.isEmpty' everywhere in file",
+ );
+ static const USE_NOT_EQ_NULL = FixKind(
+ 'dart.fix.use.notEqNull',
+ DartFixKindPriority.DEFAULT,
+ "Use != null instead of 'is! Null'",
+ );
static const USE_NOT_EQ_NULL_MULTI = FixKind(
- 'dart.fix.use.notEqNull.multi',
- DartFixKindPriority.IN_FILE,
- "Use != null instead of 'is! Null' everywhere in file");
- static const USE_RETHROW = FixKind('dart.fix.use.rethrow',
- DartFixKindPriority.DEFAULT, 'Replace throw with rethrow');
+ 'dart.fix.use.notEqNull.multi',
+ DartFixKindPriority.IN_FILE,
+ "Use != null instead of 'is! Null' everywhere in file",
+ );
+ static const USE_RETHROW = FixKind(
+ 'dart.fix.use.rethrow',
+ DartFixKindPriority.DEFAULT,
+ 'Replace throw with rethrow',
+ );
static const USE_RETHROW_MULTI = FixKind(
- 'dart.fix.use.rethrow.multi',
- DartFixKindPriority.IN_FILE,
- 'Replace throw with rethrow where possible in file');
- static const WRAP_IN_FUTURE = FixKind('dart.fix.wrap.future',
- DartFixKindPriority.DEFAULT, "Wrap in 'Future.value'");
- static const WRAP_IN_TEXT = FixKind('dart.fix.flutter.wrap.text',
- DartFixKindPriority.DEFAULT, "Wrap in a 'Text' widget");
+ 'dart.fix.use.rethrow.multi',
+ DartFixKindPriority.IN_FILE,
+ 'Replace throw with rethrow where possible in file',
+ );
+ static const WRAP_IN_FUTURE = FixKind(
+ 'dart.fix.wrap.future',
+ DartFixKindPriority.DEFAULT,
+ "Wrap in 'Future.value'",
+ );
+ static const WRAP_IN_TEXT = FixKind(
+ 'dart.fix.flutter.wrap.text',
+ DartFixKindPriority.DEFAULT,
+ "Wrap in a 'Text' widget",
+ );
}
class DartFixKindPriority {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart b/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart
index e53d57d..3bc6161 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/dart/top_level_declarations.dart
@@ -91,6 +91,7 @@
case DeclarationKind.CLASS_TYPE_ALIAS:
case DeclarationKind.ENUM:
case DeclarationKind.FUNCTION_TYPE_ALIAS:
+ case DeclarationKind.TYPE_ALIAS:
case DeclarationKind.MIXIN:
return TopLevelDeclarationKind.type;
case DeclarationKind.EXTENSION:
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_command.dart b/pkg/analysis_server/lib/src/services/pub/pub_command.dart
index a649d65..5f24d1a 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_command.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_command.dart
@@ -20,6 +20,9 @@
late final String _pubPath;
late final String _pubEnvironmentValue;
+ /// Active processes that should be killed when shutting down.
+ final _activeProcesses = <Process>{};
+
/// Tracks the last queued command to avoid overlapping because pub does not
/// do its own locking when accessing the cache.
///
@@ -78,6 +81,14 @@
.toList();
}
+ /// Terminates any in-process commands with [ProcessSignal.sigterm].
+ void shutdown() {
+ _activeProcesses.forEach((process) {
+ _instrumentationService.logInfo('Terminating process ${process.pid}');
+ process.kill();
+ });
+ }
+
/// Runs a pub command and decodes JSON from `stdout`.
///
/// Returns null if:
@@ -96,19 +107,25 @@
try {
final command = [_pubPath, ...args];
- _instrumentationService.logInfo('Running pub command $command');
- final result = await _processRunner.run(_pubPath, args,
+ _instrumentationService.logInfo('Starting pub command $command');
+ final process = await _processRunner.start(_pubPath, args,
workingDirectory: workingDirectory,
environment: {_pubEnvironmentKey: _pubEnvironmentValue});
+ _activeProcesses.add(process);
- if (result.exitCode != 0) {
- _instrumentationService.logError(
- 'pub command returned ${result.exitCode} exit code: ${result.stderr}.');
+ final exitCode = await process.exitCode;
+ _activeProcesses.remove(process);
+ final stdout = await process.stdout.transform(utf8.decoder).join();
+ final stderr = await process.stderr.transform(utf8.decoder).join();
+
+ if (exitCode != 0) {
+ _instrumentationService
+ .logError('pub command returned $exitCode exit code: $stderr.');
return null;
}
try {
- final results = jsonDecode(result.stdout);
+ final results = jsonDecode(stdout);
_instrumentationService.logInfo('pub command completed successfully');
return results;
} catch (e) {
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
index 4b6ef3a8..1db29fd 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_package_service.dart
@@ -329,7 +329,10 @@
}
}
- void shutdown() => _nextPackageNameListRequestTimer?.cancel();
+ void shutdown() {
+ _nextPackageNameListRequestTimer?.cancel();
+ _command?.shutdown();
+ }
@visibleForTesting
void writeDiskCache([PackageDetailsCache? cache]) {
diff --git a/pkg/analysis_server/lib/src/utilities/process.dart b/pkg/analysis_server/lib/src/utilities/process.dart
index 70ea179..334850d 100644
--- a/pkg/analysis_server/lib/src/utilities/process.dart
+++ b/pkg/analysis_server/lib/src/utilities/process.dart
@@ -3,30 +3,26 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
-import 'dart:convert';
import 'dart:io';
/// An abstraction over [Process] from 'dart:io' to allow mocking in tests.
class ProcessRunner {
- Future<ProcessResult> run(
+ Future<Process> start(
String executable,
List<String> arguments, {
String? workingDirectory,
Map<String, String>? environment,
bool includeParentEnvironment = true,
bool runInShell = false,
- Encoding? stdoutEncoding = systemEncoding,
- Encoding? stderrEncoding = systemEncoding,
- }) async {
- return Process.run(
+ ProcessStartMode mode = ProcessStartMode.normal,
+ }) {
+ return Process.start(
executable,
arguments,
workingDirectory: workingDirectory,
environment: environment,
includeParentEnvironment: includeParentEnvironment,
runInShell: runInShell,
- stdoutEncoding: stdoutEncoding,
- stderrEncoding: stderrEncoding,
);
}
}
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index 5a156c0..0169e37 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -1170,6 +1170,16 @@
assertHasRegion(HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE, 'V2 = 3');
}
+ Future<void> test_TYPE_ALIAS() async {
+ addTestFile('''
+typedef A = double;
+void f(A a) {}
+''');
+ await prepareHighlights();
+ assertHasRegion(HighlightRegionType.TYPE_ALIAS, 'A');
+ assertHasRegion(HighlightRegionType.TYPE_ALIAS, 'A a');
+ }
+
Future<void> test_TYPE_ALIAS_dynamicType() async {
addTestFile('''
typedef A = dynamic;
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 13d807c..d122baf 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -366,6 +366,7 @@
extension Ex on A {}
mixin M { }
typedef T = Function(Object);
+typedef T2 = double;
var v = 0;
''');
@@ -400,6 +401,10 @@
element: ElementKind.FUNCTION_TYPE_ALIAS,
kind: CompletionSuggestionKind.INVOCATION);
assertSuggestion(
+ completion: 'T2',
+ element: ElementKind.TYPE_ALIAS,
+ kind: CompletionSuggestionKind.INVOCATION);
+ assertSuggestion(
completion: 'v',
element: ElementKind.TOP_LEVEL_VARIABLE,
kind: CompletionSuggestionKind.INVOCATION);
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index cb5baf6..358e8c8 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -100,6 +100,7 @@
}
typedef functionType();
+typedef genericTypeDef = double;
function(dynamicType) {
print('string');
@@ -117,8 +118,8 @@
check(HighlightRegionType.ANNOTATION, ['@override']);
check(HighlightRegionType.BUILT_IN,
['as', 'get', 'import', 'set', 'static', 'typedef']);
- check(
- HighlightRegionType.CLASS, ['Class', 'Class2', 'Future', 'Map', 'int']);
+ check(HighlightRegionType.CLASS,
+ ['Class', 'Class2', 'double', 'Future', 'Map', 'int']);
check(HighlightRegionType.COMMENT_BLOCK, ['/* Block comment */']);
check(HighlightRegionType.COMMENT_DOCUMENTATION,
['/**\n * Doc comment\n */']);
@@ -132,6 +133,7 @@
check(HighlightRegionType.TOP_LEVEL_FUNCTION_REFERENCE, ['print']);
check(HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION, ['function']);
check(HighlightRegionType.FUNCTION_TYPE_ALIAS, ['functionType']);
+ check(HighlightRegionType.TYPE_ALIAS, ['genericTypeDef']);
check(HighlightRegionType.INSTANCE_GETTER_DECLARATION, ['getter']);
check(HighlightRegionType.IDENTIFIER_DEFAULT, ['unresolvedIdentifier']);
check(HighlightRegionType.IMPORT_PREFIX, ['async']);
diff --git a/pkg/analysis_server/test/lsp/completion_yaml_test.dart b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
index 246d2f7..444b101 100644
--- a/pkg/analysis_server/test/lsp/completion_yaml_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
@@ -2,14 +2,13 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'dart:io';
-
import 'package:analysis_server/src/services/pub/pub_api.dart';
import 'package:http/http.dart';
import 'package:linter/src/rules.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import '../mocks.dart';
import 'completion.dart';
import 'server_abstract.dart';
@@ -432,8 +431,8 @@
]
}
''';
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, json, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, json, '');
final content = '''
name: foo
@@ -486,8 +485,8 @@
]
}
''';
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, initialJson, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, initialJson, '');
final content = '''
name: foo
@@ -510,8 +509,8 @@
// Modify the underlying file which should trigger an update of the
// cached data.
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, updatedJson, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, updatedJson, '');
modifyFile(pubspecFilePath, '$content# trailing comment');
await pumpEventQueue(times: 500);
@@ -547,8 +546,8 @@
]
}
''';
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, initialJson, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, initialJson, '');
final content = '''
name: foo
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index 896b994..b55938b 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -18,31 +18,38 @@
@reflectiveTest
class MappingTest extends AbstractLspAnalysisServerTest {
- Future<void> test_completionItemKind_firstNotSupported() async {
- // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
- // did not support it, it'll map to Variable if the client doesn't support
- // that.
- var supportedKinds = {
- lsp.CompletionItemKind.TypeParameter,
- lsp.CompletionItemKind.Variable,
- };
- var result = lsp.elementKindToCompletionItemKind(
- supportedKinds,
- server.ElementKind.TYPE_PARAMETER,
+ void test_completionItemKind_enum() {
+ // Enums should always map to Enums, never EumMember.
+ verifyCompletionItemKind(
+ kind: server.ElementKind.ENUM,
+ supportedKinds: {
+ lsp.CompletionItemKind.Enum,
+ lsp.CompletionItemKind.EnumMember,
+ },
+ expectedKind: lsp.CompletionItemKind.Enum,
);
- expect(result, equals(lsp.CompletionItemKind.TypeParameter));
}
- Future<void> test_completionItemKind_firstSupported() async {
- // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
- // did not support it, it'll map to Variable if the client doesn't support
+ void test_completionItemKind_enumValueNotSupported() {
+ // ENUM_CONSTANT maps to EnumMember first, but since originally LSP
+ // did not support it, it'll map to Enum if the client doesn't support
// that.
- var supportedKinds = {lsp.CompletionItemKind.Variable};
- var result = lsp.elementKindToCompletionItemKind(
- supportedKinds,
- server.ElementKind.TYPE_PARAMETER,
+ verifyCompletionItemKind(
+ kind: server.ElementKind.ENUM_CONSTANT,
+ supportedKinds: {lsp.CompletionItemKind.Enum},
+ expectedKind: lsp.CompletionItemKind.Enum,
);
- expect(result, equals(lsp.CompletionItemKind.Variable));
+ }
+
+ void test_completionItemKind_enumValueSupported() {
+ verifyCompletionItemKind(
+ kind: server.ElementKind.ENUM_CONSTANT,
+ supportedKinds: {
+ lsp.CompletionItemKind.Enum,
+ lsp.CompletionItemKind.EnumMember,
+ },
+ expectedKind: lsp.CompletionItemKind.EnumMember,
+ );
}
Future<void> test_completionItemKind_knownMapping() async {
@@ -72,6 +79,28 @@
expect(result, isNull);
}
+ void test_completionItemKind_typeParamNotSupported() {
+ // TYPE_PARAMETER maps to TypeParameter first, but since originally LSP
+ // did not support it, it'll map to Variable if the client doesn't support
+ // that.
+ verifyCompletionItemKind(
+ kind: server.ElementKind.TYPE_PARAMETER,
+ supportedKinds: {lsp.CompletionItemKind.Variable},
+ expectedKind: lsp.CompletionItemKind.Variable,
+ );
+ }
+
+ void test_completionItemKind_typeParamSupported() {
+ verifyCompletionItemKind(
+ kind: server.ElementKind.TYPE_PARAMETER,
+ supportedKinds: {
+ lsp.CompletionItemKind.TypeParameter,
+ lsp.CompletionItemKind.Variable,
+ },
+ expectedKind: lsp.CompletionItemKind.TypeParameter,
+ );
+ }
+
void test_relevanceToSortText() {
// The expected order is the same as from the highest relevance.
final expectedOrder =
@@ -119,4 +148,15 @@
var result = lsp.buildSnippetStringWithTabStops('a, b', [0, 1]);
expect(result, equals(r'${0:a}, b'));
}
+
+ /// Verifies that [kind] maps to [expectedKind] when the client supports
+ /// [supportedKinds].
+ void verifyCompletionItemKind({
+ required server.ElementKind kind,
+ required Set<lsp.CompletionItemKind> supportedKinds,
+ required lsp.CompletionItemKind expectedKind,
+ }) {
+ final result = lsp.elementKindToCompletionItemKind(supportedKinds, kind);
+ expect(result, equals(expectedKind));
+ }
}
diff --git a/pkg/analysis_server/test/lsp/pub_package_service_test.dart b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
index c22a0f5..83f4023 100644
--- a/pkg/analysis_server/test/lsp/pub_package_service_test.dart
+++ b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'dart:async';
import 'dart:io';
import 'package:analysis_server/src/services/pub/pub_api.dart';
@@ -99,13 +100,13 @@
Future<void> test_doesNotRunConcurrently() async {
var isRunning = false;
- processRunner.runHandler = (executable, args, {dir, env}) async {
+ processRunner.startHandler = (executable, args, {dir, env}) async {
expect(isRunning, isFalse,
reason: 'pub commands should not run concurrently');
isRunning = true;
await pumpEventQueue(times: 500);
isRunning = false;
- return ProcessResult(0, 0, '', '');
+ return MockProcess(0, 0, 'a', 'a');
};
await Future.wait([
pubCommand.outdatedVersions(pubspecPath),
@@ -113,8 +114,26 @@
]);
}
+ Future<void> test_killsCommandOnShutdown() async {
+ // Create a process that won't complete (unless it's killed, where
+ // the MockProcess will complete it with a non-zero exit code).
+ final process = MockProcess(0, Completer<int>().future, '', '');
+ processRunner.startHandler = (executable, args, {dir, env}) => process;
+
+ // Start running the (endless) command.
+ final commandFuture = pubCommand.outdatedVersions(pubspecPath);
+ await pumpEventQueue(times: 500);
+
+ // Trigger shutdown, which should kill any in-process commands.
+ pubCommand.shutdown();
+
+ // Expect the process we created above terminates with non-zero exit code.
+ expect(await process.exitCode, equals(MockProcess.killedExitCode));
+ expect(commandFuture, completes);
+ }
+
Future<void> test_outdated_args() async {
- processRunner.runHandler = (executable, args, {dir, env}) {
+ processRunner.startHandler = (executable, args, {dir, env}) {
var expectedPubPath = path.join(
path.dirname(Platform.resolvedExecutable),
Platform.isWindows ? 'pub.bat' : 'pub',
@@ -132,15 +151,15 @@
env!['PUB_ENVIRONMENT'],
anyOf(equals('analysis_server.pub_api'),
endsWith(':analysis_server.pub_api')));
- return ProcessResult(0, 0, '', '');
+ return MockProcess(0, 0, '', '');
};
await pubCommand.outdatedVersions(pubspecPath);
}
Future<void> test_outdated_invalidJson() async {
- processRunner.runHandler = (String executable, List<String> args,
+ processRunner.startHandler = (String executable, List<String> args,
{dir, env}) =>
- ProcessResult(1, 0, 'NOT VALID JSON', '');
+ MockProcess(1, 0, 'NOT VALID JSON', '');
final result = await pubCommand.outdatedVersions(pubspecPath);
expect(result, isEmpty);
}
@@ -158,8 +177,8 @@
]
}
''';
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, validJson, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, validJson, '');
final result = await pubCommand.outdatedVersions(pubspecPath);
expect(result, hasLength(1));
final package = result.first;
@@ -192,11 +211,11 @@
}
''';
- processRunner.runHandler = (executable, args, {dir, env}) {
+ processRunner.startHandler = (executable, args, {dir, env}) {
// Return different json based on the directory we were invoked in.
final json =
dir == path.dirname(pubspecPath) ? pubspecJson1 : pubspecJson2;
- return ProcessResult(1, 0, json, '');
+ return MockProcess(1, 0, json, '');
};
final result1 = await pubCommand.outdatedVersions(pubspecPath);
final result2 = await pubCommand.outdatedVersions(pubspec2Path);
@@ -205,8 +224,8 @@
}
Future<void> test_outdated_nonZeroExitCode() async {
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 123, '{}', '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 123, '{}', '');
final result = await pubCommand.outdatedVersions(pubspecPath);
expect(result, isEmpty);
}
@@ -232,8 +251,8 @@
]
}
''';
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, validJson, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, validJson, '');
final result = await pubCommand.outdatedVersions(pubspecPath);
expect(result, hasLength(2));
result.forEachIndexed((index, package) {
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index e1f3ecd..b8e733e 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -50,9 +50,44 @@
}
}
+class MockProcess implements Process {
+ static int killedExitCode = -1;
+
+ final int _pid;
+ final _exitCodeCompleter = Completer<int>();
+ final String _stdout, _stderr;
+
+ MockProcess(this._pid, FutureOr<int> _exitCode, this._stdout, this._stderr) {
+ Future.value(_exitCode).then(_exitCodeCompleter.complete);
+ }
+
+ @override
+ Future<int> get exitCode => _exitCodeCompleter.future;
+
+ @override
+ int get pid => _pid;
+
+ @override
+ Stream<List<int>> get stderr => Future.value(utf8.encode(_stderr)).asStream();
+
+ @override
+ Stream<List<int>> get stdout => Future.value(utf8.encode(_stdout)).asStream();
+
+ @override
+ bool kill([ProcessSignal signal = ProcessSignal.sigterm]) {
+ _exitCodeCompleter.complete(killedExitCode);
+ return true;
+ }
+
+ @override
+ dynamic noSuchMethod(Invocation invocation) {
+ return super.noSuchMethod(invocation);
+ }
+}
+
class MockProcessRunner implements ProcessRunner {
- FutureOr<ProcessResult> Function(String executable, List<String> arguments,
- {String? dir, Map<String, String>? env})? runHandler =
+ FutureOr<Process> Function(String executable, List<String> arguments,
+ {String? dir, Map<String, String>? env}) startHandler =
(executable, arguments, {dir, env}) => throw UnimplementedError();
@override
@@ -61,17 +96,16 @@
}
@override
- Future<ProcessResult> run(
+ Future<Process> start(
String executable,
List<String> arguments, {
String? workingDirectory,
Map<String, String>? environment,
bool includeParentEnvironment = true,
bool runInShell = false,
- Encoding? stdoutEncoding = systemEncoding,
- Encoding? stderrEncoding = systemEncoding,
+ ProcessStartMode mode = ProcessStartMode.normal,
}) async {
- return runHandler!(executable, arguments,
+ return await startHandler(executable, arguments,
dir: workingDirectory, env: environment);
}
}
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 85c36ff..25f7bdb 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -586,6 +586,7 @@
expect(ElementKind(ElementKind.SETTER.name), ElementKind.SETTER);
expect(ElementKind(ElementKind.TOP_LEVEL_VARIABLE.name),
ElementKind.TOP_LEVEL_VARIABLE);
+ expect(ElementKind(ElementKind.TYPE_ALIAS.name), ElementKind.TYPE_ALIAS);
expect(ElementKind(ElementKind.TYPE_PARAMETER.name),
ElementKind.TYPE_PARAMETER);
expect(ElementKind(ElementKind.UNIT_TEST_TEST.name),
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index a1f4900..3d64012 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -200,6 +200,7 @@
int v;
typedef void tf1();
typedef tf2<T> = int Function<S>(T tp, S sp);
+typedef td3 = double;
''');
await _getDeclarations();
@@ -209,6 +210,7 @@
assertHas('v', ElementKind.TOP_LEVEL_VARIABLE);
assertHas('tf1', ElementKind.FUNCTION_TYPE_ALIAS);
assertHas('tf2', ElementKind.FUNCTION_TYPE_ALIAS);
+ assertHas('td3', ElementKind.TYPE_ALIAS);
}
Future<void> _getDeclarations(
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
index 68ef83c..3b95fd5 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
@@ -469,6 +469,83 @@
''');
}
+ Future<void> test_suggestion_typedef() async {
+ var path = convertPath('/home/test/lib/a.dart');
+ var uriStr = 'package:test/a.dart';
+
+ newFile(path, content: r'''
+typedef MyAlias = double;
+''');
+
+ var set = await waitForSetWithUri(uriStr);
+ assertJsonText(_getSuggestion(set, 'MyAlias'), '''
+{
+ "label": "MyAlias",
+ "declaringLibraryUri": "package:test/a.dart",
+ "element": {
+ "kind": "TYPE_ALIAS",
+ "name": "MyAlias",
+ "location": {
+ "file": ${jsonOfPath(path)},
+ "offset": 8,
+ "length": 0,
+ "startLine": 1,
+ "startColumn": 9,
+ "endLine": 1,
+ "endColumn": 9
+ },
+ "flags": 0
+ },
+ "relevanceTags": [
+ "ElementKind.TYPE_ALIAS",
+ "package:test/a.dart::MyAlias",
+ "MyAlias"
+ ]
+}
+''');
+ }
+
+ Future<void> test_suggestion_typedef_function() async {
+ var path = convertPath('/home/test/lib/a.dart');
+ var uriStr = 'package:test/a.dart';
+
+ newFile(path, content: r'''
+typedef MyAlias = void Function();
+''');
+
+ var set = await waitForSetWithUri(uriStr);
+ assertJsonText(_getSuggestion(set, 'MyAlias'), '''
+{
+ "label": "MyAlias",
+ "declaringLibraryUri": "package:test/a.dart",
+ "element": {
+ "kind": "FUNCTION_TYPE_ALIAS",
+ "name": "MyAlias",
+ "location": {
+ "file": ${jsonOfPath(path)},
+ "offset": 8,
+ "length": 0,
+ "startLine": 1,
+ "startColumn": 9,
+ "endLine": 1,
+ "endColumn": 9
+ },
+ "flags": 0,
+ "parameters": "()",
+ "returnType": "void"
+ },
+ "parameterNames": [],
+ "parameterTypes": [],
+ "relevanceTags": [
+ "ElementKind.FUNCTION_TYPE_ALIAS",
+ "package:test/a.dart::MyAlias",
+ "MyAlias"
+ ],
+ "requiredParameterCount": 0
+}
+''');
+ }
+
static void assertNoSuggestion(AvailableSuggestionSet set, String label,
{ElementKind? kind}) {
var suggestion = set.items.singleWhereOrNull(
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
index 195678c..24bd1c3 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
@@ -178,6 +178,7 @@
ElementKind.ENUM,
ElementKind.FUNCTION_TYPE_ALIAS,
ElementKind.MIXIN,
+ ElementKind.TYPE_ALIAS,
]),
);
}
@@ -210,6 +211,7 @@
ElementKind.MIXIN,
ElementKind.SETTER,
ElementKind.TOP_LEVEL_VARIABLE,
+ ElementKind.TYPE_ALIAS,
]),
);
}
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
index 4eab94d..051c4eb 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'dart:io';
-
import 'package:analysis_server/src/services/completion/yaml/pubspec_generator.dart';
import 'package:analysis_server/src/services/pub/pub_api.dart';
import 'package:analysis_server/src/services/pub/pub_command.dart';
@@ -358,8 +356,8 @@
]
}
''';
- processRunner.runHandler =
- (executable, args, {dir, env}) => ProcessResult(1, 0, json, '');
+ processRunner.startHandler =
+ (executable, args, {dir, env}) => MockProcess(1, 0, json, '');
pubPackageService.beginCachePreloads([convertPath('/home/test/$fileName')]);
await pumpEventQueue(times: 500);
@@ -376,9 +374,9 @@
/// processes to cache the version numbers.
void test_packageVersion_withDEPSfile() async {
var didRun = false;
- processRunner.runHandler = (executable, args, {dir, env}) {
+ processRunner.startHandler = (executable, args, {dir, env}) {
didRun = true;
- return ProcessResult(1, 0, '', '');
+ return MockProcess(1, 0, '', '');
};
newFile('/home/DEPS');
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
index 3fa857a..f2c08ed 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assign_to_local_variable_test.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/src/services/correction/assist.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/utilities/assist/assist.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -79,6 +80,20 @@
await assertNoAssistAt('345');
}
+ Future<void> test_lint_prefer_final_locals() async {
+ createAnalysisOptionsFile(lints: [LintNames.prefer_final_locals]);
+ await resolveTestCode(r'''
+main() {
+ 12345;
+}
+''');
+ await assertHasAssistAt('345', '''
+main() {
+ final i = 12345;
+}
+''');
+ }
+
Future<void> test_recovery_splitExpression() async {
verifyNoTestUnitErrors = false;
await resolveTestCode('''
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 2b83639..c2d09bb 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -801,6 +801,11 @@
return false;
}
+ final setConfig = this.setConfig;
+ if (setConfig == null) {
+ return true;
+ }
+
if (listValue != null) {
var type = value.type;
if (type is InterfaceType) {
@@ -816,16 +821,13 @@
}
}
- final setConfig = this.setConfig;
- if (setConfig != null) {
- for (var item in iterableValue) {
- Expression expression = element.expression;
- var existingValue = setConfig.uniqueValues[item];
- if (existingValue != null) {
- setConfig.duplicateElements[expression] = existingValue;
- } else {
- setConfig.uniqueValues[item] = expression;
- }
+ for (var item in iterableValue) {
+ Expression expression = element.expression;
+ var existingValue = setConfig.uniqueValues[item];
+ if (existingValue != null) {
+ setConfig.duplicateElements[expression] = existingValue;
+ } else {
+ setConfig.uniqueValues[item] = expression;
}
}
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 446a47a..87fd68d 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -899,16 +899,22 @@
ParameterElementImpl implicitParameter;
if (superParameter is ConstVariableElement) {
var constVariable = superParameter as ConstVariableElement;
- implicitParameter =
- DefaultParameterElementImpl(superParameter.name, -1)
- ..constantInitializer = constVariable.constantInitializer;
+ implicitParameter = DefaultParameterElementImpl(
+ name: superParameter.name,
+ nameOffset: -1,
+ // ignore: deprecated_member_use_from_same_package
+ parameterKind: superParameter.parameterKind,
+ )..constantInitializer = constVariable.constantInitializer;
} else {
- implicitParameter = ParameterElementImpl(superParameter.name, -1);
+ implicitParameter = ParameterElementImpl(
+ name: superParameter.name,
+ nameOffset: -1,
+ // ignore: deprecated_member_use_from_same_package
+ parameterKind: superParameter.parameterKind,
+ );
}
implicitParameter.isConst = superParameter.isConst;
implicitParameter.isFinal = superParameter.isFinal;
- // ignore: deprecated_member_use_from_same_package
- implicitParameter.parameterKind = superParameter.parameterKind;
implicitParameter.isSynthetic = true;
implicitParameter.type =
substitution.substituteType(superParameter.type);
@@ -1672,8 +1678,15 @@
extends FieldFormalParameterElementImpl with ConstVariableElement {
/// Initialize a newly created parameter element to have the given [name] and
/// [nameOffset].
- DefaultFieldFormalParameterElementImpl(String name, int nameOffset)
- : super(name, nameOffset);
+ DefaultFieldFormalParameterElementImpl({
+ required String name,
+ required int nameOffset,
+ required ParameterKind parameterKind,
+ }) : super(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: parameterKind,
+ );
@override
String? get defaultValueCode {
@@ -1686,8 +1699,15 @@
with ConstVariableElement {
/// Initialize a newly created parameter element to have the given [name] and
/// [nameOffset].
- DefaultParameterElementImpl(String? name, int nameOffset)
- : super(name, nameOffset);
+ DefaultParameterElementImpl({
+ required String? name,
+ required int nameOffset,
+ required ParameterKind parameterKind,
+ }) : super(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: parameterKind,
+ );
@override
String? get defaultValueCode {
@@ -3367,8 +3387,15 @@
/// Initialize a newly created parameter element to have the given [name] and
/// [nameOffset].
- FieldFormalParameterElementImpl(String name, int nameOffset)
- : super(name, nameOffset);
+ FieldFormalParameterElementImpl({
+ required String name,
+ required int nameOffset,
+ required ParameterKind parameterKind,
+ }) : super(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: parameterKind,
+ );
/// Initializing formals are visible only in the "formal parameter
/// initializer scope", which is the current scope of the initializer list
@@ -4819,8 +4846,8 @@
/// typed parameter.
List<TypeParameterElement> _typeParameters = const [];
- /// The kind of this parameter.
- ParameterKind? _parameterKind;
+ @override
+ final ParameterKind parameterKind;
/// The Dart code of the default value.
String? _defaultValueCode;
@@ -4832,15 +4859,22 @@
/// Initialize a newly created parameter element to have the given [name] and
/// [nameOffset].
- ParameterElementImpl(String? name, int nameOffset) : super(name, nameOffset);
+ ParameterElementImpl({
+ required String? name,
+ required int nameOffset,
+ required this.parameterKind,
+ }) : super(name, nameOffset);
- /// Creates a synthetic parameter with [name], [type] and [kind].
+ /// Creates a synthetic parameter with [name], [type] and [parameterKind].
factory ParameterElementImpl.synthetic(
- String? name, DartType type, ParameterKind kind) {
- ParameterElementImpl element = ParameterElementImpl(name, -1);
+ String? name, DartType type, ParameterKind parameterKind) {
+ var element = ParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: parameterKind,
+ );
element.type = type;
element.isSynthetic = true;
- element.parameterKind = kind;
return element;
}
@@ -4893,18 +4927,6 @@
ElementKind get kind => ElementKind.PARAMETER;
@override
- ParameterKind get parameterKind {
- if (_parameterKind != null) return _parameterKind!;
-
- // TODO(migration): Make it impossible by construction.
- throw StateError('The kind must set.');
- }
-
- set parameterKind(ParameterKind parameterKind) {
- _parameterKind = parameterKind;
- }
-
- @override
List<ParameterElement> get parameters {
return _parameters;
}
@@ -4955,10 +4977,13 @@
ParameterElementImpl_ofImplicitSetter(
PropertyAccessorElementImpl_ImplicitSetter setter)
: setter = setter,
- super('_${setter.variable.name}', -1) {
+ super(
+ name: '_${setter.variable.name}',
+ nameOffset: -1,
+ parameterKind: ParameterKind.REQUIRED,
+ ) {
enclosingElement = setter;
isSynthetic = true;
- parameterKind = ParameterKind.REQUIRED;
}
@override
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 4f6246e..4f0e447 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -8,7 +8,6 @@
import 'package:analyzer/src/dart/element/member.dart';
import 'package:analyzer/src/dart/element/type_algebra.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/correct_override.dart';
import 'package:analyzer/src/generated/utilities_general.dart';
/// Failure because of there is no most specific signature in [candidates].
@@ -76,16 +75,16 @@
return null;
}
+ var targetLibrary = targetClass.library as LibraryElementImpl;
+ var typeSystem = targetLibrary.typeSystem;
+
var validOverrides = <ExecutableElement>[];
for (var i = 0; i < candidates.length; i++) {
ExecutableElement? validOverride = candidates[i];
- var overrideHelper = CorrectOverrideHelper(
- library: targetClass.library as LibraryElementImpl,
- thisMember: validOverride,
- );
+ var validOverrideType = validOverride.type;
for (var j = 0; j < candidates.length; j++) {
var candidate = candidates[j];
- if (!overrideHelper.isCorrectOverrideOf(superMember: candidate)) {
+ if (!typeSystem.isSubtypeOf(validOverrideType, candidate.type)) {
validOverride = null;
break;
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
index e70c49d..e2a2b97 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -39,11 +39,16 @@
);
}
var name = node.constructorName.name;
- if (element == null && name != null) {
+ if (element == null &&
+ name != null &&
+ _resolver.isConstructorTearoffsEnabled) {
// The illegal construction, which looks like a type-instantiated
// constructor tearoff, may be an attempt to reference a member on
// [enclosingElement]. Try to provide a helpful error, and fall back to
// "unknown constructor."
+ //
+ // Only report errors when the constructor tearoff feature is enabled,
+ // to avoid reporting redundant errors.
var enclosingElement = node.constructorName.type.name.staticElement;
if (enclosingElement is TypeAliasElement) {
enclosingElement = enclosingElement.aliasedType.element;
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index 4004a9c..4db5773 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -53,11 +53,27 @@
_resolvePrefixedIdentifierFunction(node, function);
} else if (function is PropertyAccessImpl) {
_resolvePropertyAccessFunction(node, function);
+ } else if (function is ConstructorReferenceImpl) {
+ var typeArguments = node.typeArguments;
+ if (typeArguments != null) {
+ // Something like `List.filled<int>`.
+ function.accept(_resolver);
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
+ typeArguments,
+ [function.constructorName.type.name, function.constructorName.name],
+ );
+ _resolve(node: node, rawType: function.staticType);
+ }
} else {
// TODO(srawlins): Handle `function` being a [SuperExpression].
function.accept(_resolver);
- _resolveDisallowedExpression(node, node.function.staticType);
+ if (function.staticType is FunctionType) {
+ _resolve(node: node, rawType: function.staticType);
+ } else {
+ _resolveDisallowedExpression(node, function.staticType);
+ }
}
}
@@ -144,16 +160,33 @@
}
if (rawType is FunctionType) {
- var typeArguments = _checkTypeArguments(
- // `node.typeArguments`, coming from the parser, is never null.
- node.typeArguments!, name, rawType.typeFormals,
- CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
- );
+ // A FunctionReference with type arguments and with a
+ // ConstructorReference child is invalid. E.g. `List.filled<int>`.
+ // [CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR] is
+ // reported elsewhere; don't check type arguments here.
+ if (node.function is ConstructorReference) {
+ node.staticType = DynamicTypeImpl.instance;
+ } else {
+ var typeArguments = _checkTypeArguments(
+ // `node.typeArguments`, coming from the parser, is never null.
+ node.typeArguments!, name, rawType.typeFormals,
+ CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
+ );
- var invokeType = rawType.instantiate(typeArguments);
- node.typeArgumentTypes = typeArguments;
- node.staticType = invokeType;
+ var invokeType = rawType.instantiate(typeArguments);
+ node.typeArgumentTypes = typeArguments;
+ node.staticType = invokeType;
+ }
} else {
+ if (_resolver.isConstructorTearoffsEnabled) {
+ // Only report constructor tearoff-related errors if the constructor
+ // tearoff feature is enabled.
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION,
+ node.function,
+ [],
+ );
+ }
node.staticType = DynamicTypeImpl.instance;
}
}
@@ -186,11 +219,15 @@
/// with what the user may be intending.
void _resolveDisallowedExpression(
FunctionReferenceImpl node, DartType? rawType) {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION,
- node.function,
- [],
- );
+ if (_resolver.isConstructorTearoffsEnabled) {
+ // Only report constructor tearoff-related errors if the constructor
+ // tearoff feature is enabled.
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION,
+ node.function,
+ [],
+ );
+ }
_resolve(node: node, rawType: rawType);
}
@@ -227,7 +264,7 @@
if (member is PropertyAccessorElement) {
function.accept(_resolver);
- _resolveDisallowedExpression(node, member.returnType);
+ _resolve(node: node, rawType: member.returnType);
return;
}
@@ -367,6 +404,15 @@
return;
} else {
targetType = target.typeOrThrow;
+ if (targetType.isDynamic) {
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+ node,
+ [],
+ );
+ node.staticType = DynamicTypeImpl.instance;
+ return;
+ }
}
var propertyElement = _resolver.typePropertyResolver
@@ -380,7 +426,7 @@
.getter;
if (propertyElement is TypeParameterElement) {
- _resolveDisallowedExpression(node, propertyElement!.type);
+ _resolve(node: node, rawType: propertyElement!.type);
return;
}
@@ -480,7 +526,7 @@
}
if (method is PropertyAccessorElement) {
- _resolveDisallowedExpression(node, method.returnType);
+ _resolve(node: node, rawType: method.returnType);
return;
}
@@ -532,17 +578,17 @@
} else if (element is PropertyAccessorElement) {
function.staticElement = element;
function.staticType = element.returnType;
- _resolveDisallowedExpression(node, element.returnType);
+ _resolve(node: node, rawType: element.returnType);
return;
} else if (element is ExecutableElement) {
function.staticElement = element;
function.staticType = element.type;
- _resolveDisallowedExpression(node, element.type);
+ _resolve(node: node, rawType: element.type);
return;
} else if (element is VariableElement) {
function.staticElement = element;
function.staticType = element.type;
- _resolveDisallowedExpression(node, element.type);
+ _resolve(node: node, rawType: element.type);
return;
} else {
_resolveDisallowedExpression(node, DynamicTypeImpl.instance);
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 7d522ef..9efde38 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -344,9 +344,17 @@
var nameOffset = nameNode?.offset ?? -1;
if (node.parameter is FieldFormalParameter) {
// Only for recovery, this should not happen in valid code.
- element = DefaultFieldFormalParameterElementImpl(name, nameOffset);
+ element = DefaultFieldFormalParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ );
} else {
- element = DefaultParameterElementImpl(name, nameOffset);
+ element = DefaultParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ );
}
_elementHolder.addParameter(element);
@@ -354,7 +362,6 @@
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.parameter.covariantKeyword != null;
element.isFinal = node.isFinal;
- element.parameterKind = node.kind;
if (normalParameter is SimpleFormalParameterImpl &&
normalParameter.type == null) {
@@ -459,14 +466,14 @@
} else {
// Only for recovery, this should not happen in valid code.
element = FieldFormalParameterElementImpl(
- nameNode.name,
- nameNode.offset,
+ name: nameNode.name,
+ nameOffset: nameNode.offset,
+ parameterKind: node.kind,
);
_elementHolder.enclose(element);
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
- element.parameterKind = node.kind;
_setCodeRange(element, node);
}
nameNode.staticElement = element;
@@ -638,12 +645,15 @@
if (_elementWalker != null) {
element = _elementWalker!.getParameter();
} else {
- element = ParameterElementImpl(nameNode.name, nameNode.offset);
+ element = ParameterElementImpl(
+ name: nameNode.name,
+ nameOffset: nameNode.offset,
+ parameterKind: node.kind,
+ );
_elementHolder.addParameter(element);
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
- element.parameterKind = node.kind;
_setCodeRange(element, node);
}
nameNode.staticElement = element;
@@ -751,6 +761,20 @@
void visitInstanceCreationExpression(InstanceCreationExpression node) {
var newNode = _astRewriter.instanceCreationExpression(_nameScope, node);
if (newNode != node) {
+ if (node.constructorName.type.typeArguments != null &&
+ newNode is MethodInvocation &&
+ newNode.target is FunctionReference &&
+ !_libraryElement.featureSet.isEnabled(Feature.constructor_tearoffs)) {
+ // A function reference with explicit type arguments (an expression of
+ // the form `a<...>.m(...)` or `p.a<...>.m(...)` where `a` does not
+ // refer to a class name, nor a type alias), is illegal without the
+ // constructor tearoff feature.
+ //
+ // This is a case where the parser does not report an error, because the
+ // parser thinks this could be an InstanceCreationExpression.
+ _errorReporter.reportErrorForNode(
+ HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS, node, []);
+ }
return newNode.accept(this);
}
@@ -904,9 +928,17 @@
element = _elementWalker!.getParameter();
} else {
if (nameNode != null) {
- element = ParameterElementImpl(nameNode.name, nameNode.offset);
+ element = ParameterElementImpl(
+ name: nameNode.name,
+ nameOffset: nameNode.offset,
+ parameterKind: node.kind,
+ );
} else {
- element = ParameterElementImpl('', -1);
+ element = ParameterElementImpl(
+ name: '',
+ nameOffset: -1,
+ parameterKind: node.kind,
+ );
}
_elementHolder.addParameter(element);
@@ -914,7 +946,6 @@
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
- element.parameterKind = node.kind;
if (node.type == null) {
element.hasImplicitType = true;
}
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index d77a5bb..edf4483 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -773,7 +773,8 @@
@override
void visitTypeName(TypeName node) {
- if (node.question != null) {
+ var question = node.question;
+ if (question != null) {
var name = node.name.name;
var type = node.typeOrThrow;
// Only report non-aliased, non-user-defined `Null?` and `dynamic?`. Do
@@ -781,8 +782,8 @@
if ((type.element == _nullType.element ||
(type.isDynamic && name == 'dynamic')) &&
type.alias == null) {
- _errorReporter.reportErrorForNode(
- HintCode.UNNECESSARY_QUESTION_MARK, node, [name]);
+ _errorReporter.reportErrorForToken(
+ HintCode.UNNECESSARY_QUESTION_MARK, question, [name]);
}
}
super.visitTypeName(node);
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index cdf06145..b53f44c 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -163,7 +163,11 @@
static FieldFormalParameterElementImpl fieldFormalParameter(
Identifier name) =>
- FieldFormalParameterElementImpl(name.name, name.offset);
+ FieldFormalParameterElementImpl(
+ name: name.name,
+ nameOffset: name.offset,
+ parameterKind: ParameterKind.REQUIRED,
+ );
/// Destroy any static state retained by [ElementFactory]. This should be
/// called from the `setUp` method of any tests that use [ElementFactory], in
@@ -266,27 +270,37 @@
}
static ParameterElementImpl namedParameter(String name) {
- ParameterElementImpl parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.NAMED;
- return parameter;
+ return ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.NAMED,
+ );
}
static ParameterElementImpl namedParameter2(String name, DartType type) {
- ParameterElementImpl parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.NAMED;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.NAMED,
+ );
parameter.type = type;
return parameter;
}
static ParameterElementImpl positionalParameter(String name) {
- ParameterElementImpl parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.POSITIONAL;
- return parameter;
+ return ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.POSITIONAL,
+ );
}
static ParameterElementImpl positionalParameter2(String name, DartType type) {
- ParameterElementImpl parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.POSITIONAL;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.POSITIONAL,
+ );
parameter.type = type;
return parameter;
}
@@ -294,14 +308,19 @@
static PrefixElementImpl prefix(String name) => PrefixElementImpl(name, 0);
static ParameterElementImpl requiredParameter(String name) {
- ParameterElementImpl parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.REQUIRED;
- return parameter;
+ return ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.REQUIRED,
+ );
}
static ParameterElementImpl requiredParameter2(String name, DartType type) {
- ParameterElementImpl parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.REQUIRED;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.REQUIRED,
+ );
parameter.type = type;
return parameter;
}
@@ -383,9 +402,12 @@
static List<ParameterElementImpl> _requiredParameters(
List<DartType> argumentTypes) {
var parameters = argumentTypes.mapIndexed((index, type) {
- var parameter = ParameterElementImpl("a$index", index);
+ var parameter = ParameterElementImpl(
+ name: 'a$index',
+ nameOffset: index,
+ parameterKind: ParameterKind.REQUIRED,
+ );
parameter.type = type;
- parameter.parameterKind = ParameterKind.REQUIRED;
return parameter;
}).toList();
return parameters;
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index d4cd689..715eef2 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -122,6 +122,7 @@
METHOD,
MIXIN,
SETTER,
+ TYPE_ALIAS,
VARIABLE
}
@@ -888,6 +889,7 @@
case DeclarationKind.ENUM:
case DeclarationKind.MIXIN:
case DeclarationKind.FUNCTION_TYPE_ALIAS:
+ case DeclarationKind.TYPE_ALIAS:
var name = declaration.name;
return <String>['$uriStr::$name'];
case DeclarationKind.CONSTRUCTOR:
@@ -1013,6 +1015,8 @@
return DeclarationKind.MIXIN;
case idl.AvailableDeclarationKind.SETTER:
return DeclarationKind.SETTER;
+ case idl.AvailableDeclarationKind.TYPE_ALIAS:
+ return DeclarationKind.TYPE_ALIAS;
case idl.AvailableDeclarationKind.VARIABLE:
return DeclarationKind.VARIABLE;
default:
@@ -1048,6 +1052,8 @@
return idl.AvailableDeclarationKind.MIXIN;
case DeclarationKind.SETTER:
return idl.AvailableDeclarationKind.SETTER;
+ case DeclarationKind.TYPE_ALIAS:
+ return idl.AvailableDeclarationKind.TYPE_ALIAS;
case DeclarationKind.VARIABLE:
return idl.AvailableDeclarationKind.VARIABLE;
default:
@@ -1141,7 +1147,7 @@
class _File {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 16;
+ static const int DATA_VERSION = 17;
/// The next value for [id].
static int _nextId = 0;
@@ -1672,21 +1678,30 @@
}
} else if (node is GenericTypeAlias) {
var functionType = node.functionType;
- if (functionType == null) continue;
-
- var parameters = functionType.parameters;
- addDeclaration(
- isDeprecated: isDeprecated,
- kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
- name: node.name,
- parameters: parameters.toSource(),
- parameterNames: _getFormalParameterNames(parameters),
- parameterTypes: _getFormalParameterTypes(parameters),
- relevanceTags: ['ElementKind.FUNCTION_TYPE_ALIAS'],
- requiredParameterCount: _getFormalParameterRequiredCount(parameters),
- returnType: _getTypeAnnotationString(functionType.returnType),
- typeParameters: functionType.typeParameters?.toSource(),
- );
+ var type = node.type;
+ if (functionType != null) {
+ var parameters = functionType.parameters;
+ addDeclaration(
+ isDeprecated: isDeprecated,
+ kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
+ name: node.name,
+ parameters: parameters.toSource(),
+ parameterNames: _getFormalParameterNames(parameters),
+ parameterTypes: _getFormalParameterTypes(parameters),
+ relevanceTags: ['ElementKind.FUNCTION_TYPE_ALIAS'],
+ requiredParameterCount:
+ _getFormalParameterRequiredCount(parameters),
+ returnType: _getTypeAnnotationString(functionType.returnType),
+ typeParameters: functionType.typeParameters?.toSource(),
+ );
+ } else if (type is TypeName && type.name.name.isNotEmpty) {
+ addDeclaration(
+ isDeprecated: isDeprecated,
+ kind: DeclarationKind.TYPE_ALIAS,
+ name: node.name,
+ relevanceTags: ['ElementKind.TYPE_ALIAS'],
+ );
+ }
} else if (node is FunctionTypeAlias) {
var parameters = node.parameters;
addDeclaration(
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 55f086c..4d7e28d 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -36,6 +36,8 @@
SETTER,
+ TYPE_ALIAS,
+
VARIABLE
}
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index cc6271a..ea3274f 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -387,6 +387,7 @@
METHOD,
MIXIN,
SETTER,
+ TYPE_ALIAS,
VARIABLE
}
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 00cf9f8..a75433d 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -405,10 +405,10 @@
var nonDefaultElement = parameter.declaredElement!;
var element = DefaultParameterElementImpl(
- nonDefaultElement.name,
- nonDefaultElement.nameOffset,
+ name: nonDefaultElement.name,
+ nameOffset: nonDefaultElement.nameOffset,
+ parameterKind: kind,
);
- element.parameterKind = kind;
if (parameter is SimpleFormalParameterImpl) {
parameter.declaredElement = element;
}
@@ -1037,8 +1037,11 @@
var actualType = _reader.readRequiredType();
_reader.readByte(); // TODO(scheglov) inherits covariant
- var element = ParameterElementImpl(identifier?.name ?? '', -1);
- element.parameterKind = node.kind;
+ var element = ParameterElementImpl(
+ name: identifier?.name ?? '',
+ nameOffset: -1,
+ parameterKind: node.kind,
+ );
element.type = actualType;
node.declaredElement = element;
identifier?.staticElement = element;
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 129e709..8767463 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -987,20 +987,35 @@
ParameterElementImpl element;
if (kind.isRequiredPositional) {
if (isInitializingFormal) {
- element = FieldFormalParameterElementImpl(name, -1);
+ element = FieldFormalParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ );
} else {
- element = ParameterElementImpl(name, -1);
+ element = ParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ );
}
} else {
if (isInitializingFormal) {
- element = DefaultFieldFormalParameterElementImpl(name, -1);
+ element = DefaultFieldFormalParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ );
} else {
- element = DefaultParameterElementImpl(name, -1);
+ element = DefaultParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ );
}
element.reference = reference;
reference.element = element;
}
- element.parameterKind = kind;
ParameterElementFlags.read(_reader, element);
element.typeParameters = _readTypeParameters();
element.parameters = _readParameters(element, reference);
@@ -1656,13 +1671,17 @@
if (kind.isRequiredPositional) {
ParameterElementImpl element;
if (isInitializingFormal) {
- element = FieldFormalParameterElementImpl(name, -1)
- ..parameterKind = kind
- ..type = type;
+ element = FieldFormalParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ )..type = type;
} else {
- element = ParameterElementImpl(name, -1)
- ..parameterKind = kind
- ..type = type;
+ element = ParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ )..type = type;
}
element.hasImplicitType = hasImplicitType;
element.typeParameters = typeParameters;
@@ -1674,9 +1693,11 @@
}
return element;
} else {
- var element = DefaultParameterElementImpl(name, -1)
- ..parameterKind = kind
- ..type = type;
+ var element = DefaultParameterElementImpl(
+ name: name,
+ nameOffset: -1,
+ parameterKind: kind,
+ )..type = type;
element.hasImplicitType = hasImplicitType;
element.typeParameters = typeParameters;
element.parameters = _readFormalParameters(unitElement);
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 8f9bd66..a503d40 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -350,12 +350,19 @@
ParameterElementImpl element;
var parent = node.parent;
if (parent is DefaultFormalParameter) {
- element = DefaultFieldFormalParameterElementImpl(name, nameOffset)
- ..constantInitializer = parent.defaultValue;
+ element = DefaultFieldFormalParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ )..constantInitializer = parent.defaultValue;
_linker.elementNodes[element] = parent;
_enclosingContext.addParameter(name, element);
} else {
- element = FieldFormalParameterElementImpl(name, nameOffset);
+ element = FieldFormalParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ );
_linker.elementNodes[element] = node;
_enclosingContext.addParameter(null, element);
}
@@ -363,7 +370,6 @@
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
element.metadata = _buildAnnotations(node.metadata);
- element.parameterKind = node.kind;
_setCodeRange(element, node);
nameNode.staticElement = element;
@@ -497,17 +503,23 @@
ParameterElementImpl element;
var parent = node.parent;
if (parent is DefaultFormalParameter) {
- element = DefaultParameterElementImpl(name, nameOffset)
- ..constantInitializer = parent.defaultValue;
+ element = DefaultParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ )..constantInitializer = parent.defaultValue;
_linker.elementNodes[element] = parent;
} else {
- element = ParameterElementImpl(name, nameOffset);
+ element = ParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ );
_linker.elementNodes[element] = node;
}
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
element.metadata = _buildAnnotations(node.metadata);
- element.parameterKind = node.kind;
_setCodeRange(element, node);
nameNode.staticElement = element;
@@ -764,12 +776,19 @@
ParameterElementImpl element;
var parent = node.parent;
if (parent is DefaultFormalParameter) {
- element = DefaultParameterElementImpl(name, nameOffset)
- ..constantInitializer = parent.defaultValue;
+ element = DefaultParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ )..constantInitializer = parent.defaultValue;
_linker.elementNodes[element] = parent;
_enclosingContext.addParameter(name, element);
} else {
- element = ParameterElementImpl(name, nameOffset);
+ element = ParameterElementImpl(
+ name: name,
+ nameOffset: nameOffset,
+ parameterKind: node.kind,
+ );
_linker.elementNodes[element] = node;
_enclosingContext.addParameter(null, element);
}
@@ -778,7 +797,6 @@
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
element.metadata = _buildAnnotations(node.metadata);
- element.parameterKind = node.kind;
_setCodeRange(element, node);
node.declaredElement = element;
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index a3d5f14..f289112 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
@@ -1073,23 +1073,32 @@
ParameterElement _namedParameter(String name, DartType type,
{String? initializerCode}) {
- var parameter = DefaultParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.NAMED;
+ var parameter = DefaultParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.NAMED,
+ );
parameter.type = type;
parameter.defaultValueCode = initializerCode;
return parameter;
}
ParameterElement _positionalParameter(String name, DartType type) {
- var parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.POSITIONAL;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.POSITIONAL,
+ );
parameter.type = type;
return parameter;
}
ParameterElement _requiredParameter(String name, DartType type) {
- var parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.REQUIRED;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.REQUIRED,
+ );
parameter.type = type;
return parameter;
}
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 2933f98..5b8ad2f 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -473,8 +473,11 @@
required DartType type,
bool isCovariant = false,
}) {
- var parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.NAMED;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.NAMED,
+ );
parameter.type = type;
parameter.isExplicitlyCovariant = isCovariant;
return parameter;
@@ -485,8 +488,11 @@
required DartType type,
bool isCovariant = false,
}) {
- var parameter = ParameterElementImpl(name, 0);
- parameter.parameterKind = ParameterKind.NAMED_REQUIRED;
+ var parameter = ParameterElementImpl(
+ name: name,
+ nameOffset: 0,
+ parameterKind: ParameterKind.NAMED_REQUIRED,
+ );
parameter.type = type;
parameter.isExplicitlyCovariant = isCovariant;
return parameter;
@@ -498,8 +504,11 @@
bool isCovariant = false,
String? defaultValueCode,
}) {
- var parameter = ParameterElementImpl(name ?? '', 0);
- parameter.parameterKind = ParameterKind.POSITIONAL;
+ var parameter = ParameterElementImpl(
+ name: name ?? '',
+ nameOffset: 0,
+ parameterKind: ParameterKind.POSITIONAL,
+ );
parameter.type = type;
parameter.isExplicitlyCovariant = isCovariant;
parameter.defaultValueCode = defaultValueCode;
@@ -556,8 +565,11 @@
required DartType type,
bool isCovariant = false,
}) {
- var parameter = ParameterElementImpl(name ?? '', 0);
- parameter.parameterKind = ParameterKind.REQUIRED;
+ var parameter = ParameterElementImpl(
+ name: name ?? '',
+ nameOffset: 0,
+ parameterKind: ParameterKind.REQUIRED,
+ );
parameter.type = type;
parameter.isExplicitlyCovariant = isCovariant;
return parameter;
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index 19a469c..41a03fc 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -250,8 +250,8 @@
parseCompilationUnit("const enum E {ONE}", errors: [
// Fasta interprets the `const` as a malformed top level const
// and `enum` as the start of an enum declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
]);
}
@@ -370,9 +370,9 @@
createParser('class C { C< }');
parser.parseCompilationUnit2();
listener.assertErrors([
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 1),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 13, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 13, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 1),
]);
}
@@ -381,9 +381,9 @@
parser.parseCompilationUnit2();
listener.assertErrors([
expectedError(ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT, 12, 4),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 3),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 17, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 17, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 17, 1),
]);
}
@@ -393,9 +393,9 @@
listener.assertErrors([
expectedError(ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT, 12, 4),
expectedError(ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT, 17, 6),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 22, 1),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 24, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 24, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 24, 1),
]);
}
@@ -420,8 +420,8 @@
parseCompilationUnit("const typedef F();", errors: [
// Fasta interprets the `const` as a malformed top level const
// and `typedef` as the start of an typedef declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 7),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 7),
]);
}
@@ -761,9 +761,9 @@
void test_expectedExecutable_inClass_afterVoid() {
parseCompilationUnit('class C { void 2 void }', errors: [
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 15, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 15, 1),
expectedError(ParserErrorCode.EXPECTED_TOKEN, 17, 4),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 22, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 22, 1)
]);
}
@@ -780,11 +780,11 @@
void test_expectedExecutable_topLevel_afterVoid() {
CompilationUnit unit = parseCompilationUnit('void 2 void', errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 4),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 1),
expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 5, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 11, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 0),
]);
expect(unit, isNotNull);
}
@@ -832,7 +832,7 @@
void test_expectedToken_parseStatement_afterVoid() {
parseStatement("void}", expectedEndOffset: 4);
listener.assertErrors([
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 4),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 1)
]);
}
@@ -875,8 +875,8 @@
void test_expectedToken_uriAndSemicolonMissingAfterExport() {
CompilationUnit unit = parseCompilationUnit("export class A {}", errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 6),
expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 7, 5),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 5),
]);
ExportDirective directive = unit.directives[0] as ExportDirective;
expect(directive.uri, isNotNull);
@@ -1177,8 +1177,8 @@
ClassMember member = parser.parseClassMember('C');
expectNotNullIfNoErrors(member);
listener.assertErrors([
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 0)
]);
}
@@ -1194,8 +1194,8 @@
parseCompilationUnit("final enum E {ONE}", errors: [
// Fasta interprets the `final` as a malformed top level final
// and `enum` as the start of a enum declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
]);
}
@@ -1211,8 +1211,8 @@
parseCompilationUnit("final typedef F();", errors: [
// Fasta interprets the `final` as a malformed top level final
// and `typedef` as the start of an typedef declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 7),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 7),
]);
}
@@ -1434,8 +1434,8 @@
expectNotNullIfNoErrors(statement);
listener.assertErrors([
expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1)
]);
}
@@ -1696,8 +1696,8 @@
parseCompilationUnit(
"typedef T = typedef F = Map<String, dynamic> Function();",
errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 12, 7),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 12, 7),
]);
}
@@ -2180,9 +2180,9 @@
void test_missingStatement() {
parseStatement("is");
listener.assertErrors([
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 2),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 2),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 2, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 2, 0)
]);
}
@@ -2353,8 +2353,8 @@
void test_nonIdentifierLibraryName_partOf() {
CompilationUnit unit = parseCompilationUnit("part of 3;", errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 2),
expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 8, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 1),
expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 9, 1)
]);
@@ -2758,8 +2758,8 @@
// https://github.com/Dart-Code/Dart-Code/issues/1548
parseCompilationUnit(r"main() { String s = 'a' 'b', 'c$foo'; return s; }",
errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 27, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 29, 2),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 29, 2),
]);
}
@@ -2945,8 +2945,8 @@
parseCompilationUnit("var class C {}", errors: [
// Fasta interprets the `var` as a malformed top level var
// and `class` as the start of a class declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 3),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 5),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 5),
]);
}
@@ -2954,8 +2954,8 @@
parseCompilationUnit("var enum E {ONE}", errors: [
// Fasta interprets the `var` as a malformed top level var
// and `enum` as the start of an enum declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 3),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 4),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 4),
]);
}
@@ -2971,8 +2971,8 @@
parseCompilationUnit("var typedef F();", errors: [
// Fasta interprets the `var` as a malformed top level var
// and `typedef` as the start of an typedef declaration.
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 3),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 4, 7),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 7),
]);
}
diff --git a/pkg/analyzer/test/generated/nnbd_parser_test.dart b/pkg/analyzer/test/generated/nnbd_parser_test.dart
index f8f5bcd..113fa2b 100644
--- a/pkg/analyzer/test/generated/nnbd_parser_test.dart
+++ b/pkg/analyzer/test/generated/nnbd_parser_test.dart
@@ -236,7 +236,7 @@
expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 1, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
]);
}
diff --git a/pkg/analyzer/test/generated/recovery_parser_test.dart b/pkg/analyzer/test/generated/recovery_parser_test.dart
index 1abb18e..523a736 100644
--- a/pkg/analyzer/test/generated/recovery_parser_test.dart
+++ b/pkg/analyzer/test/generated/recovery_parser_test.dart
@@ -336,9 +336,9 @@
parser.parseCompilationUnit2();
listener.assertErrors([
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 26, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 27, 0),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 26, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 26, 1),
expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 27, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 27, 0)
]);
}
@@ -906,8 +906,8 @@
void test_incompleteLocalVariable_atTheEndOfBlock_modifierOnly() {
Statement statement = parseStatement('final }', expectedEndOffset: 6);
listener.assertErrors([
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 5),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 1),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 1)
]);
expect(statement, isVariableDeclarationStatement);
expect(statement.toSource(), 'final ;');
@@ -1411,8 +1411,8 @@
void test_nonStringLiteralUri_import() {
parseCompilationUnit("import dart:io; class C {}", errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 6),
expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 7, 4),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 7, 4),
expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 4),
expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 11, 1),
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index e1a4243..02d0f4b 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -224,8 +224,8 @@
void test_parseElseAlone() {
parseCompilationUnit('main() { else return 0; } ', errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 4),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 9, 4),
expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 9, 4),
]);
}
@@ -1742,10 +1742,10 @@
void test_partial_typeArg1_34850() {
var unit = parseCompilationUnit('<bar<', errors: [
expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 4, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 5, 0),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 5, 0),
]);
// Validate that recovery has properly updated the token stream.
analyzer.Token token = unit.beginToken;
@@ -1759,10 +1759,10 @@
void test_partial_typeArg2_34850() {
var unit = parseCompilationUnit('foo <bar<', errors: [
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 0),
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 9, 0),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 9, 0),
]);
// Validate that recovery has properly updated the token stream.
analyzer.Token token = unit.beginToken;
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index 16aed27..acf54ac 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -79,9 +79,9 @@
expect(member, isNotNull);
assertErrors(errors: [
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 12, 2),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 1),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 14, 0),
expectedError(ParserErrorCode.MISSING_IDENTIFIER, 14, 0),
- expectedError(ParserErrorCode.EXPECTED_TOKEN, 14, 0),
]);
expect(member, isTopLevelVariableDeclaration);
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
index 087615a..00b6b27 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -230,14 +230,7 @@
A<int>.foo<int>;
}
''', [
- error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 42,
- 10),
- // TODO(srawlins): Stop reporting the error below; the code is not
- // precise, and it is duplicate with the code above.
- error(
- CompileTimeErrorCode
- .WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
- 52,
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 52,
5),
]);
@@ -805,6 +798,29 @@
@reflectiveTest
class ConstructorReferenceResolutionWithoutConstructorTearoffsTest
extends PubPackageResolutionTest with WithoutConstructorTearoffsMixin {
+ test_class_generic_nonConstructor() async {
+ await assertErrorsInCode('''
+class A<T> {
+ static int i = 1;
+}
+
+void bar() {
+ A<int>.i;
+}
+''', [
+ error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 52, 5),
+ ]);
+
+ var classElement = findElement.class_('A');
+ assertConstructorReference(
+ findNode.constructorReference('A<int>.i;'),
+ null,
+ classElement,
+ 'dynamic',
+ expectedTypeNameType: 'A<int>',
+ );
+ }
+
test_constructorTearoff() async {
await assertErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index 619e5c7..f695287 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -10,11 +11,78 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FunctionReferenceResolutionTest);
+ defineReflectiveTests(
+ FunctionReferenceResolutionWithoutConstructorTearoffsTest);
});
}
@reflectiveTest
class FunctionReferenceResolutionTest extends PubPackageResolutionTest {
+ test_constructorFunction_named() async {
+ await assertNoErrorsInCode('''
+class A<T> {
+ A.foo() {}
+}
+
+var x = (A.foo)<int>;
+''');
+
+ assertFunctionReference(findNode.functionReference('(A.foo)<int>;'),
+ findElement.constructor('foo'), 'A<int> Function()');
+ }
+
+ test_constructorFunction_unnamed() async {
+ await assertNoErrorsInCode('''
+class A<T> {
+ A();
+}
+
+var x = (A.new)<int>;
+''');
+
+ assertFunctionReference(findNode.functionReference('(A.new)<int>;'),
+ findElement.unnamedConstructor('A'), 'A<int> Function()');
+ }
+
+ test_constructorReference() async {
+ await assertErrorsInCode('''
+class A<T> {
+ A.foo() {}
+}
+
+var x = A.foo<int>;
+''', [
+ error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR, 42,
+ 5),
+ ]);
+
+ assertFunctionReference(findNode.functionReference('A.foo<int>;'),
+ findElement.constructor('foo'), 'dynamic');
+ }
+
+ test_explicitReceiver_dynamicTyped() async {
+ await assertErrorsInCode('''
+dynamic f(dynamic x) => x;
+
+class C {
+ T instanceMethod<T>(T t) => t;
+}
+
+main() {
+ C c = new C();
+ f(c).instanceMethod<int>;
+}
+''', [
+ error(CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+ 102, 24),
+ ]);
+
+ assertFunctionReference(
+ findNode.functionReference('f(c).instanceMethod<int>;'),
+ null,
+ 'dynamic');
+ }
+
test_explicitReceiver_unknown() async {
await assertErrorsInCode('''
bar() {
@@ -195,25 +263,6 @@
reference, findElement.method('foo'), 'void Function(int)');
}
- test_instanceGetter() async {
- await assertErrorsInCode('''
-abstract class A {
- late void Function<T>(T) foo;
-
- bar() {
- foo<int>;
- }
-}
-
-''', [
- error(
- CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 66, 3),
- ]);
-
- assertFunctionReference(findNode.functionReference('foo<int>;'),
- findElement.getter('foo'), 'void Function(int)');
- }
-
test_instanceGetter_explicitReceiver() async {
await assertErrorsInCode('''
class A {
@@ -232,6 +281,22 @@
findElement.getter('foo'), 'void Function(int)');
}
+ test_instanceGetter_functionTyped() async {
+ await assertNoErrorsInCode('''
+abstract class A {
+ late void Function<T>(T) foo;
+
+ bar() {
+ foo<int>;
+ }
+}
+
+''');
+
+ assertFunctionReference(findNode.functionReference('foo<int>;'),
+ findElement.getter('foo'), 'void Function(int)');
+ }
+
test_instanceMethod() async {
await assertNoErrorsInCode('''
class A {
@@ -308,6 +373,8 @@
}
}
''', [
+ error(
+ CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 24, 9),
error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 30, 3),
]);
@@ -321,6 +388,8 @@
super.foo<int>;
}
''', [
+ error(
+ CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 10, 9),
error(CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, 10, 5),
]);
@@ -538,35 +607,57 @@
}
test_localVariable() async {
- await assertErrorsInCode('''
+ await assertNoErrorsInCode('''
void bar(void Function<T>(T a) foo) {
foo<int>;
}
+''');
+
+ var reference = findNode.functionReference('foo<int>;');
+ assertFunctionReference(
+ reference, findElement.parameter('foo'), 'void Function(int)');
+ }
+
+ test_localVariable_typeVariable_boundToFunction() async {
+ await assertErrorsInCode('''
+void bar<T extends Function>(T foo) {
+ foo<int>;
+}
''', [
error(
CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 40, 3),
]);
var reference = findNode.functionReference('foo<int>;');
- assertFunctionReference(
- reference, findElement.parameter('foo'), 'void Function(int)');
+ assertFunctionReference(reference, findElement.parameter('foo'), 'dynamic');
}
- test_localVariable_typeVariable() async {
- await assertErrorsInCode('''
+ test_localVariable_typeVariable_functionTyped() async {
+ await assertNoErrorsInCode('''
void bar<T extends void Function<U>(U)>(T foo) {
foo<int>;
}
-''', [
- error(
- CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 51, 3),
- ]);
+''');
var reference = findNode.functionReference('foo<int>;');
assertFunctionReference(
reference, findElement.parameter('foo'), 'void Function(int)');
}
+ test_localVariable_typeVariable_nonFunction() async {
+ await assertErrorsInCode('''
+void bar<T>(T foo) {
+ foo<int>;
+}
+''', [
+ error(
+ CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 23, 3),
+ ]);
+
+ var reference = findNode.functionReference('foo<int>;');
+ assertFunctionReference(reference, findElement.parameter('foo'), 'dynamic');
+ }
+
test_nonGenericFunction() async {
await assertErrorsInCode('''
class A {
@@ -587,14 +678,11 @@
}
test_otherExpression() async {
- await assertErrorsInCode('''
+ await assertNoErrorsInCode('''
void f(void Function<T>(T a) foo, void Function<T>(T a) bar) {
(1 == 2 ? foo : bar)<int>;
}
-''', [
- error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 65,
- 20),
- ]);
+''');
var reference = findNode.functionReference('(1 == 2 ? foo : bar)<int>;');
assertType(reference, 'void Function(int)');
@@ -607,8 +695,6 @@
(1 == 2 ? foo : bar)<int, String>;
}
''', [
- error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 65,
- 20),
error(
CompileTimeErrorCode
.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
@@ -973,3 +1059,24 @@
findNode.functionReference('foo<int>;'), null, 'dynamic');
}
}
+
+@reflectiveTest
+class FunctionReferenceResolutionWithoutConstructorTearoffsTest
+ extends PubPackageResolutionTest with WithoutConstructorTearoffsMixin {
+ test_localVariable() async {
+ // This code includes a disallowed type instantiation (local variable),
+ // but in the case that the experiment is not enabled, we suppress the
+ // associated error.
+ await assertErrorsInCode('''
+void bar(void Function<T>(T a) foo) {
+ foo<int>;
+}
+''', [
+ error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 43, 5),
+ ]);
+
+ var reference = findNode.functionReference('foo<int>;');
+ assertFunctionReference(
+ reference, findElement.parameter('foo'), 'void Function(int)');
+ }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 11dce12..9e3ea8b 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -893,13 +893,15 @@
} else if (node is FunctionExpressionInvocation) {
return node.staticElement;
} else if (node is FunctionReference) {
- var function = node.function;
+ var function = node.function.unParenthesized;
if (function is Identifier) {
return function.staticElement;
} else if (function is PropertyAccess) {
return function.propertyName.staticElement;
+ } else if (function is ConstructorReference) {
+ return function.constructorName.staticElement;
} else {
- fail('Unsupported node: (${node.runtimeType}) $node');
+ fail('Unsupported node: (${function.runtimeType}) $function');
}
} else if (node is Identifier) {
return node.staticElement;
diff --git a/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
index 817d86c..5ffb6a3 100644
--- a/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
@@ -111,7 +111,36 @@
]);
}
- test_spread_list() async {
+ test_spread_intoList_list() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ const A();
+ operator ==(other) => false;
+}
+
+main() {
+ const [...[A()]];
+}
+''');
+ }
+
+ test_spread_intoList_set() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A();
+ operator ==(other) => false;
+}
+
+main() {
+ const [...{A()}];
+}
+''', [
+ error(
+ CompileTimeErrorCode.CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS, 79, 3),
+ ]);
+ }
+
+ test_spread_intoSet_list() async {
await assertErrorsInCode(r'''
class A {
const A();
@@ -127,7 +156,7 @@
]);
}
- test_spread_set() async {
+ test_spread_intoSet_set() async {
await assertErrorsInCode(r'''
class A {
const A();
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
index 5d374e08..346a895 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
@@ -15,6 +15,22 @@
@reflectiveTest
class InconsistentInheritanceTest extends PubPackageResolutionTest {
+ /// https://github.com/dart-lang/sdk/issues/47026
+ test_class_covariantInSuper_withTwoUnrelated() async {
+ await assertErrorsInCode('''
+class D1 {}
+class D2 {}
+class D implements D1, D2 {}
+
+class A { void m(covariant D d) {} }
+abstract class B1 { void m(D1 d1); }
+abstract class B2 { void m(D2 d2); }
+class C extends A implements B1, B2 {}
+''', [
+ error(CompileTimeErrorCode.INCONSISTENT_INHERITANCE, 171, 1),
+ ]);
+ }
+
test_class_parameterType() async {
await assertErrorsInCode(r'''
abstract class A {
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
index 337484e..0f8bb36 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
@@ -25,7 +25,7 @@
await assertErrorsInCode('''
dynamic? a;
''', [
- error(HintCode.UNNECESSARY_QUESTION_MARK, 0, 8),
+ error(HintCode.UNNECESSARY_QUESTION_MARK, 7, 1),
]);
}
@@ -39,7 +39,7 @@
await assertErrorsInCode('''
Null? a;
''', [
- error(HintCode.UNNECESSARY_QUESTION_MARK, 0, 5),
+ error(HintCode.UNNECESSARY_QUESTION_MARK, 4, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
index d743c6e..bb50f9a 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
@@ -123,8 +123,6 @@
(1 == 2 ? foo : bar)<int>;
}
''', [
- error(CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 60,
- 20),
error(
CompileTimeErrorCode
.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index a939f53..5c4c599 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -2537,6 +2537,61 @@
);
}
+ test_TYPE_ALIAS() async {
+ newFile('/home/test/lib/test.dart', content: r'''
+typedef A = double;
+
+@deprecated
+typedef B = double;
+
+/// aaa
+///
+/// bbb bbb
+typedef C = double;
+''');
+
+ tracker.addContext(testAnalysisContext);
+ await _doAllTrackerWork();
+
+ var library = _getLibrary('package:test/test.dart');
+ _assertDeclaration(
+ _getDeclaration(library.declarations, 'A'),
+ 'A',
+ DeclarationKind.TYPE_ALIAS,
+ parameters: null,
+ parameterNames: null,
+ parameterTypes: null,
+ relevanceTags: ['ElementKind.TYPE_ALIAS', 'package:test/test.dart::A'],
+ requiredParameterCount: null,
+ returnType: null,
+ );
+ _assertDeclaration(
+ _getDeclaration(library.declarations, 'B'),
+ 'B',
+ DeclarationKind.TYPE_ALIAS,
+ isDeprecated: true,
+ parameters: null,
+ parameterNames: null,
+ parameterTypes: null,
+ relevanceTags: ['ElementKind.TYPE_ALIAS', 'package:test/test.dart::B'],
+ requiredParameterCount: null,
+ returnType: null,
+ );
+ _assertDeclaration(
+ _getDeclaration(library.declarations, 'C'),
+ 'C',
+ DeclarationKind.TYPE_ALIAS,
+ docSummary: 'aaa',
+ docComplete: 'aaa\n\nbbb bbb',
+ parameters: null,
+ parameterNames: null,
+ parameterTypes: null,
+ relevanceTags: ['ElementKind.TYPE_ALIAS', 'package:test/test.dart::C'],
+ requiredParameterCount: null,
+ returnType: null,
+ );
+ }
+
test_VARIABLE() async {
newFile('/home/test/lib/test.dart', content: r'''
int a;
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index b7d456d..a4fc1ce 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -28,6 +28,7 @@
if (args.length != 1) {
print('Error: IDL path is required');
print('usage: dart generate.dart path/to/idl.dart');
+ return;
}
String idlPath = args[0];
await GeneratedContent.generateAll(
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 9972eb6..449c2b2 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -149,7 +149,7 @@
}
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
FunctionType getType(CommonElements types) => type;
@@ -195,7 +195,7 @@
// Primitive constants don't have dependencies.
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
}
class NullConstantValue extends PrimitiveConstantValue {
@@ -549,7 +549,7 @@
int get hashCode => representedType.hashCode * 13;
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
accept(ConstantValueVisitor visitor, arg) => visitor.visitType(this, arg);
@@ -732,7 +732,7 @@
@override
List<ConstantValue> getDependencies() {
- List<ConstantValue> result = <ConstantValue>[];
+ List<ConstantValue> result = [];
result.addAll(keys);
result.addAll(values);
return result;
@@ -802,7 +802,7 @@
int get hashCode => cls.hashCode * 43;
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
accept(ConstantValueVisitor visitor, arg) {
@@ -843,7 +843,7 @@
get hashCode => name.hashCode * 17;
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
accept(ConstantValueVisitor visitor, arg) {
@@ -876,7 +876,7 @@
bool get isDummy => true;
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
accept(ConstantValueVisitor visitor, arg) {
@@ -904,7 +904,7 @@
const LateSentinelConstantValue._();
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
accept(ConstantValueVisitor visitor, arg) {
@@ -935,7 +935,7 @@
bool get isDummy => true;
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
accept(ConstantValueVisitor visitor, arg) {
@@ -1063,7 +1063,7 @@
}
@override
- List<ConstantValue> getDependencies() => <ConstantValue>[function];
+ List<ConstantValue> getDependencies() => [function];
@override
accept(ConstantValueVisitor visitor, arg) =>
@@ -1120,7 +1120,7 @@
get hashCode => (referenced.hashCode * 17 + unit.hashCode) & 0x3fffffff;
@override
- List<ConstantValue> getDependencies() => <ConstantValue>[referenced];
+ List<ConstantValue> getDependencies() => [referenced];
@override
accept(ConstantValueVisitor visitor, arg) =>
@@ -1155,7 +1155,7 @@
}
@override
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
+ List<ConstantValue> getDependencies() => const [];
@override
DartType getType(CommonElements types) => types.dynamicType;
diff --git a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
index 3f08d13..69cd2c4 100644
--- a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
+++ b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
@@ -81,6 +81,9 @@
}
/// Returns the [EntityDataInfo] associated with a given [EntityData].
+ /// Note: In the event of a cache miss, i.e. the first time we ever see a new
+ /// [EntityData], we will add all reachable deferred roots to the queue for
+ /// processing.
EntityDataInfo getInfo(EntityData data) {
// Check for cached [EntityDataInfo], otherwise create a new one and
// collect dependencies.
@@ -92,35 +95,25 @@
data.accept(visitor);
info = infoBuilder.info;
entityDataToInfo[data] = info;
+
+ // This is the first time we have seen this [EntityData] before so process
+ // all deferred roots.
+ info.deferredRoots.forEach((entity, imports) {
+ for (ImportEntity deferredImport in imports) {
+ queue.addEntityData(entity, importSets.singleton(deferredImport));
+ }
+ });
}
return info;
}
- /// Whether to enqueue a deferred entityData.
- ///
- /// Due to the nature of the algorithm, some dependencies may be visited more
- /// than once. However, we know that new deferred-imports are only discovered
- /// when we are visiting the main output unit (size == 0) or code reachable
- /// from a deferred import (size == 1). After that, we are rediscovering the
- /// same nodes we have already seen.
- bool _shouldAddDeferredEntity(ImportSet newSet) => newSet.length <= 1;
-
/// Updates the dependencies of a given [EntityData] from [oldSet] to
/// [newSet].
void updateDependencies(
EntityData entityData, ImportSet oldSet, ImportSet newSet) {
var info = getInfo(entityData);
- // Process all [DeferredEntityDataInfo]s.
- if (_shouldAddDeferredEntity(newSet)) {
- info.deferredRoots.forEach((entity, imports) {
- for (ImportEntity deferredImport in imports) {
- queue.addEntityData(entity, importSets.singleton(deferredImport));
- }
- });
- }
-
- // Process all [directEntityData].
+ // Process all direct dependencies.
for (var entity in info.directDependencies) {
update(entity, oldSet, newSet);
}
diff --git a/pkg/compiler/lib/src/helpers/stats.dart b/pkg/compiler/lib/src/helpers/stats.dart
index a356c93..3459d74 100644
--- a/pkg/compiler/lib/src/helpers/stats.dart
+++ b/pkg/compiler/lib/src/helpers/stats.dart
@@ -251,14 +251,12 @@
void end(String id) {}
/// Start a stat entry for [id] with additional [data].
- void open(String id,
- [Map<String, dynamic> data = const <String, dynamic>{}]) {}
+ void open(String id, [Map<String, dynamic> data = const {}]) {}
/// Create a stat entry for [id] with additional [data] and content created by
/// [createChildContent].
void child(String id,
- [Map<String, dynamic> data = const <String, dynamic>{},
- void createChildContent()]) {
+ [Map<String, dynamic> data = const {}, void createChildContent()]) {
open(id, data);
if (createChildContent != null) createChildContent();
close(id);
@@ -293,8 +291,7 @@
: super(output: output, examples: examples);
@override
- void open(String id,
- [Map<String, dynamic> data = const <String, dynamic>{}]) {
+ void open(String id, [Map<String, dynamic> data = const {}]) {
if (extraLevel > 0) return;
StringBuffer sb = StringBuffer();
@@ -364,8 +361,7 @@
}
@override
- void open(String id,
- [Map<String, dynamic> data = const <String, dynamic>{}]) {
+ void open(String id, [Map<String, dynamic> data = const {}]) {
StringBuffer sb = StringBuffer();
sb.write(indentation);
sb.write('<$id');
@@ -534,8 +530,7 @@
Map<dynamic, Map> maps = {};
Map<dynamic, Map<dynamic, List>> frequencyMaps = {};
Map<dynamic, Map> setsMap = {};
- Map<dynamic, Map<dynamic, List>> countersMap =
- <dynamic, Map<dynamic, List>>{};
+ Map<dynamic, Map<dynamic, List>> countersMap = {};
Map<dynamic, _StackTraceTree> traceMap = {};
@override
int stackTraceSampleFrequency = 1;
@@ -812,7 +807,7 @@
Map<K, V> sortMap<K, V>(Map<K, V> map, [int compare(K a, K b)]) {
List<K> keys = map.keys.toList();
keys.sort(compare);
- Map<K, V> sortedMap = Map<K, V>();
+ Map<K, V> sortedMap = {};
keys.forEach((K k) => sortedMap[k] = map[k]);
return sortedMap;
}
diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart
index 3bdb6b3..ff168df 100644
--- a/pkg/compiler/lib/src/helpers/trace.dart
+++ b/pkg/compiler/lib/src/helpers/trace.dart
@@ -118,7 +118,7 @@
int maxColumnNoLength = 0;
String stackTrace = '$s';
- List<StackTraceLine> lines = <StackTraceLine>[];
+ List<StackTraceLine> lines = [];
// Parse each line in the stack trace. The supported line formats from the
// Dart VM are:
// #n <method-name> (<uri>:<line-no>:<column-no>)
diff --git a/pkg/compiler/lib/src/helpers/track_map.dart b/pkg/compiler/lib/src/helpers/track_map.dart
index 8a24420..957d55c 100644
--- a/pkg/compiler/lib/src/helpers/track_map.dart
+++ b/pkg/compiler/lib/src/helpers/track_map.dart
@@ -12,11 +12,11 @@
/// After finishing the compilaton, the histogram of track map sizes
/// is printed but only when running in verbose mode.
class TrackMap<K, V> implements Map<K, V> {
- final Map<K, V> _map;
+ final Map<K, V> _map = {};
final List _counts;
static final Map<String, List<int>> _countsMap = {};
- TrackMap._internal(this._counts) : _map = Map<K, V>();
+ TrackMap._internal(this._counts);
factory TrackMap(String description) {
List counts = _countsMap.putIfAbsent(description, () => [0]);
diff --git a/pkg/compiler/lib/src/io/code_output.dart b/pkg/compiler/lib/src/io/code_output.dart
index cc5a9b3..43e9fcc 100644
--- a/pkg/compiler/lib/src/io/code_output.dart
+++ b/pkg/compiler/lib/src/io/code_output.dart
@@ -53,9 +53,9 @@
@override
final String name;
final AbstractCodeOutput codeOutput;
- Map<int, List<SourceLocation>> markers = <int, List<SourceLocation>>{};
+ Map<int, List<SourceLocation>> markers = {};
@override
- Map<int, List<FrameEntry>> frameMarkers = <int, List<FrameEntry>>{};
+ Map<int, List<FrameEntry>> frameMarkers = {};
_SourceLocationsImpl(this.name, this.codeOutput);
@@ -63,7 +63,7 @@
void addSourceLocation(int targetOffset, SourceLocation sourceLocation) {
assert(targetOffset <= codeOutput.length);
List<SourceLocation> sourceLocations =
- markers.putIfAbsent(targetOffset, () => <SourceLocation>[]);
+ markers.putIfAbsent(targetOffset, () => []);
sourceLocations.add(sourceLocation);
}
@@ -98,14 +98,13 @@
if (other.markers.length > 0) {
other.markers
.forEach((int targetOffset, List<SourceLocation> sourceLocations) {
- (markers[length + targetOffset] ??= <SourceLocation>[])
- .addAll(sourceLocations);
+ (markers[length + targetOffset] ??= []).addAll(sourceLocations);
});
}
if (other.frameMarkers.length > 0) {
other.frameMarkers.forEach((int targetOffset, List<FrameEntry> frames) {
- (frameMarkers[length + targetOffset] ??= <FrameEntry>[]).addAll(frames);
+ (frameMarkers[length + targetOffset] ??= []).addAll(frames);
});
}
}
diff --git a/pkg/compiler/lib/src/io/location_provider.dart b/pkg/compiler/lib/src/io/location_provider.dart
index c16d811..b980ee7 100644
--- a/pkg/compiler/lib/src/io/location_provider.dart
+++ b/pkg/compiler/lib/src/io/location_provider.dart
@@ -18,7 +18,7 @@
/// [CodeOutputListener] that collects line information.
class LocationCollector extends CodeOutputListener implements LocationProvider {
int length = 0;
- List<int> lineStarts = <int>[0];
+ List<int> lineStarts = [0];
void _collect(String text) {
int index = 0;
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index e26ced0..3bcfbef 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -65,7 +65,7 @@
@override
List<SourceLocation> get sourceLocations {
- List<SourceLocation> list = <SourceLocation>[];
+ List<SourceLocation> list = [];
if (startPosition != null) {
list.add(startPosition);
}
@@ -166,7 +166,7 @@
String get shortText => '';
@override
- List<SourceLocation> get sourceLocations => const <SourceLocation>[];
+ List<SourceLocation> get sourceLocations => const [];
@override
SourceSpan get sourceSpan => SourceSpan(null, null, null);
@@ -1339,12 +1339,12 @@
}
class Coverage {
- Set<js.Node> _nodesWithInfo = Set<js.Node>();
+ Set<js.Node> _nodesWithInfo = {};
int _nodesWithInfoCount = 0;
- Set<js.Node> _nodesWithoutInfo = Set<js.Node>();
+ Set<js.Node> _nodesWithoutInfo = {};
int _nodesWithoutInfoCount = 0;
- Map<Type, int> _nodesWithoutInfoCountByType = <Type, int>{};
- Set<js.Node> _nodesWithoutOffset = Set<js.Node>();
+ Map<Type, int> _nodesWithoutInfoCountByType = {};
+ Set<js.Node> _nodesWithoutOffset = {};
int _nodesWithoutOffsetCount = 0;
void registerNodeWithInfo(js.Node node) {
diff --git a/pkg/compiler/lib/src/io/source_map_builder.dart b/pkg/compiler/lib/src/io/source_map_builder.dart
index aad5b6e..ff0238a 100644
--- a/pkg/compiler/lib/src/io/source_map_builder.dart
+++ b/pkg/compiler/lib/src/io/source_map_builder.dart
@@ -22,7 +22,7 @@
final Uri targetFileUri;
final LocationProvider locationProvider;
- final List<SourceMapEntry> entries = <SourceMapEntry>[];
+ final List<SourceMapEntry> entries = [];
/// Extension used to deobfuscate minified names in error messages.
final Map<String, String> minifiedGlobalNames;
@@ -58,10 +58,8 @@
}
String build() {
- LineColumnMap<SourceMapEntry> lineColumnMap =
- LineColumnMap<SourceMapEntry>();
- Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap =
- <Uri, LineColumnMap<SourceMapEntry>>{};
+ LineColumnMap<SourceMapEntry> lineColumnMap = LineColumnMap();
+ Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap = {};
entries.forEach((SourceMapEntry sourceMapEntry) {
Location kernelLocation =
locationProvider.getLocation(sourceMapEntry.targetOffset);
@@ -364,12 +362,12 @@
/// Map from line/column pairs to lists of [T] elements.
class LineColumnMap<T> {
- Map<int, Map<int, List<T>>> _map = <int, Map<int, List<T>>>{};
+ Map<int, Map<int, List<T>>> _map = {};
/// Returns the list of elements associated with ([line],[column]).
List<T> _getList(int line, int column) {
- Map<int, List<T>> lineMap = _map[line] ??= <int, List<T>>{};
- return lineMap[column] ??= <T>[];
+ Map<int, List<T>> lineMap = _map[line] ??= {};
+ return lineMap[column] ??= [];
}
/// Adds [element] to the end of the list of elements associated with
@@ -438,7 +436,7 @@
/// Map from [T] elements to assigned indices.
class IndexMap<T> {
- Map<T, int> map = <T, int>{};
+ Map<T, int> map = {};
/// Register [element] and returns its index.
int register(T element) {
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index 03f8c93..69a999f 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -28,13 +28,13 @@
abstract class AsyncRewriterBase extends js.NodeVisitor {
// Local variables are hoisted to the top of the function, so they are
// collected here.
- List<js.VariableDeclaration> localVariables = <js.VariableDeclaration>[];
+ List<js.VariableDeclaration> localVariables = [];
- Map<js.Node, int> continueLabels = Map<js.Node, int>();
- Map<js.Node, int> breakLabels = Map<js.Node, int>();
+ Map<js.Node, int> continueLabels = {};
+ Map<js.Node, int> breakLabels = {};
/// The label of a finally part.
- Map<js.Block, int> finallyLabels = Map<js.Block, int>();
+ Map<js.Block, int> finallyLabels = {};
/// The label of the catch handler of a [js.Try] or a [js.Fun] or [js.Catch].
///
@@ -45,7 +45,7 @@
/// - The handler of a [js.Catch] is a synthetic handler that ensures the
/// right finally blocks are run if an error is thrown inside a
/// catch-handler.
- Map<js.Node, int> handlerLabels = Map<js.Node, int>();
+ Map<js.Node, int> handlerLabels = {};
int exitLabel;
int rethrowLabel;
@@ -64,13 +64,13 @@
///
/// When jumping to a target it is necessary to visit all finallies that
/// are on the way to target (i.e. more nested than the jump target).
- List<js.Node> jumpTargets = <js.Node>[];
+ List<js.Node> jumpTargets = [];
- List<int> continueStack = <int>[];
- List<int> breakStack = <int>[];
- List<int> returnStack = <int>[];
+ List<int> continueStack = [];
+ List<int> breakStack = [];
+ List<int> returnStack = [];
- List<Pair<String, String>> variableRenamings = <Pair<String, String>>[];
+ List<Pair<String, String>> variableRenamings = [];
PreTranslationAnalysis analysis;
@@ -160,7 +160,7 @@
String selfName;
/// The rewritten code can take type arguments. These are added if needed.
- List<String> typeArgumentNames = <String>[];
+ List<String> typeArgumentNames = [];
final DiagnosticReporter reporter;
// For error reporting only.
@@ -176,7 +176,7 @@
int currentTempVarIndex = 0;
// The highest temporary variable index ever in use in this function.
int tempVarHighWaterMark = 0;
- Map<int, js.Expression> tempVarNames = Map<int, js.Expression>();
+ Map<int, js.Expression> tempVarNames = {};
bool get isAsync => false;
bool get isSyncStar => false;
@@ -252,7 +252,7 @@
if (types == null) {
String name = freshName('type');
typeArgumentNames.add(name);
- return <js.Expression>[js.VariableUse(name)];
+ return [js.VariableUse(name)];
}
return types;
}
@@ -265,7 +265,7 @@
LinkedHashMap<int, List<js.Statement>>();
/// Description of each label for readability of the non-minified output.
- Map<int, String> labelComments = Map<int, String>();
+ Map<int, String> labelComments = {};
/// True if the function has any try blocks containing await.
bool hasTryBlocks = false;
@@ -303,7 +303,7 @@
/// Each buffer ends up as its own case part in the big state-switch.
void beginLabel(int label) {
assert(!labelledParts.containsKey(label));
- currentStatementBuffer = <js.Statement>[];
+ currentStatementBuffer = [];
labelledParts[label] = currentStatementBuffer;
addStatement(js.Comment(labelComments[label]));
}
@@ -320,7 +320,7 @@
///
/// Also inserts a comment describing the label if available.
js.Block gotoAndBreak(int label, SourceInformation sourceInformation) {
- List<js.Statement> statements = <js.Statement>[];
+ List<js.Statement> statements = [];
if (labelComments.containsKey(label)) {
statements.add(js.Comment("goto ${labelComments[label]}"));
}
@@ -723,7 +723,7 @@
rewrittenBody = js.js
.statement('while (true) {#}', rewrittenBody)
.withSourceInformation(bodySourceInformation);
- List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+ List<js.VariableInitialization> variables = [];
variables.add(
_makeVariableInitializer(goto, js.number(0), bodySourceInformation));
@@ -736,7 +736,7 @@
}
if (analysis.hasFinally || (isAsyncStar && analysis.hasYield)) {
variables.add(_makeVariableInitializer(
- next, js.ArrayInitializer(<js.Expression>[]), bodySourceInformation));
+ next, js.ArrayInitializer([]), bodySourceInformation));
}
if (analysis.hasThis && !isSyncStar) {
// Sync* functions must remember `this` on the level of the outer
@@ -1007,7 +1007,7 @@
// Compute a stack of all the 'finally' nodes that must be visited before
// the jump.
// The bottom of the stack is the label where the jump goes to.
- List<int> jumpStack = <int>[];
+ List<int> jumpStack = [];
for (js.Node node in jumpTargets.reversed) {
if (finallyLabels[node] != null) {
jumpStack.add(finallyLabels[node]);
@@ -1138,7 +1138,7 @@
List<js.Statement> translateToStatementSequence(js.Statement node) {
assert(!shouldTransform(node));
List<js.Statement> oldBuffer = currentStatementBuffer;
- currentStatementBuffer = <js.Statement>[];
+ currentStatementBuffer = [];
List<js.Statement> resultBuffer = currentStatementBuffer;
visitStatement(node);
currentStatementBuffer = oldBuffer;
@@ -1455,7 +1455,7 @@
} else {
bool hasDefault = false;
int i = 0;
- List<js.SwitchClause> clauses = <js.SwitchClause>[];
+ List<js.SwitchClause> clauses = [];
for (js.SwitchClause clause in node.cases) {
if (clause is js.Case) {
labels[i] = newLabel("case");
@@ -1511,7 +1511,7 @@
}
List<int> _finalliesUpToAndEnclosingHandler() {
- List<int> result = <int>[];
+ List<int> result = [];
for (int i = jumpTargets.length - 1; i >= 0; i--) {
js.Node node = jumpTargets[i];
int handlerLabel = handlerLabels[node];
@@ -1845,7 +1845,7 @@
@override
Iterable<js.VariableInitialization> variableInitializations(
SourceInformation sourceInformation) {
- List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+ List<js.VariableInitialization> variables = [];
variables.add(_makeVariableInitializer(
completer,
js.js('#(#)', [
@@ -2009,9 +2009,8 @@
// the parameters.
// TODO(sigurdm): We only need to do this copying for parameters that are
// mutated.
- List<js.VariableInitialization> declarations =
- <js.VariableInitialization>[];
- List<js.Parameter> renamedParameters = <js.Parameter>[];
+ List<js.VariableInitialization> declarations = [];
+ List<js.Parameter> renamedParameters = [];
for (js.Parameter parameter in parameters) {
String name = parameter.name;
String renamedName = freshName(name);
@@ -2118,7 +2117,7 @@
@override
Iterable<js.VariableInitialization> variableInitializations(
SourceInformation sourceInformation) {
- List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+ List<js.VariableInitialization> variables = [];
return variables;
}
@@ -2217,7 +2216,7 @@
// Find all the finally blocks that should be performed if the stream is
// canceled during the yield.
// At the bottom of the stack is the return label.
- List<int> enclosingFinallyLabels = <int>[exitLabel];
+ List<int> enclosingFinallyLabels = [exitLabel];
enclosingFinallyLabels.addAll(jumpTargets
.where((js.Node node) => finallyLabels[node] != null)
.map((js.Node node) => finallyLabels[node]));
@@ -2383,7 +2382,7 @@
@override
Iterable<js.VariableInitialization> variableInitializations(
SourceInformation sourceInformation) {
- List<js.VariableInitialization> variables = <js.VariableInitialization>[];
+ List<js.VariableInitialization> variables = [];
variables.add(_makeVariableInitializer(
controller,
js.js('#(#, #)', [
@@ -2428,12 +2427,12 @@
/// - a set of used names.
/// - if any [This]-expressions are used.
class PreTranslationAnalysis extends js.BaseVisitor<bool> {
- Set<js.Node> hasAwaitOrYield = Set<js.Node>();
+ Set<js.Node> hasAwaitOrYield = {};
- Map<js.Node, js.Node> targets = Map<js.Node, js.Node>();
- List<js.Node> loopsAndSwitches = <js.Node>[];
- List<js.LabeledStatement> labelledStatements = <js.LabeledStatement>[];
- Set<String> usedNames = Set<String>();
+ Map<js.Node, js.Node> targets = {};
+ List<js.Node> loopsAndSwitches = [];
+ List<js.LabeledStatement> labelledStatements = [];
+ Set<String> usedNames = {};
bool hasExplicitReturns = false;
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index e60b4d0..4510755 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -21,6 +21,8 @@
import '../options.dart';
import 'invocation_mirror_constants.dart';
+import 'transformations/clone_mixin_methods_with_super.dart' as transformMixins
+ show transformLibraries;
import 'transformations/lowering.dart' as lowering show transformLibraries;
const Iterable<String> _allowedDartSchemePaths = [
@@ -169,6 +171,8 @@
}
lowering.transformLibraries(libraries, coreTypes, hierarchy, options);
logger?.call("Lowering transformations performed");
+ transformMixins.transformLibraries(libraries);
+ logger?.call("Mixin transformations performed");
}
@override
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 7474592..8b0b096 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -8,8 +8,6 @@
show isRedirectingFactory, isRedirectingFactoryField;
import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/clone.dart';
-import 'package:kernel/type_algebra.dart';
import 'package:kernel/type_environment.dart' as ir;
import 'package:collection/collection.dart' show mergeSort; // a stable sort.
@@ -403,47 +401,9 @@
int mixinMemberCount = 0;
if (cls.mixedInClass != null) {
- Map<ir.Name, ir.Procedure> existingNonSetters;
- Map<ir.Name, ir.Procedure> existingSetters;
-
- void ensureExistingProcedureMaps() {
- if (existingNonSetters == null) {
- existingNonSetters = {};
- existingSetters = {};
- for (ir.Procedure procedure in cls.procedures) {
- if (procedure.kind == ir.ProcedureKind.Setter) {
- existingSetters[procedure.name] = procedure;
- } else {
- existingNonSetters[procedure.name] = procedure;
- }
- }
- }
- }
-
- CloneVisitorWithMembers cloneVisitor;
for (ir.Field field in cls.mixedInClass.mixin.fields) {
if (field.containsSuperCalls) {
_isMixinApplicationWithMembers = true;
- cloneVisitor ??= new MixinApplicationCloner(cls,
- typeSubstitution: getSubstitutionMap(cls.mixedInType));
- // TODO(jensj): Provide a "referenceFrom" if we need to support
- // the incremental compiler.
- ensureExistingProcedureMaps();
- ir.Procedure existingGetter = existingNonSetters[field.name];
- ir.Procedure existingSetter = existingSetters[field.name];
- cls.addField(cloneVisitor.cloneField(
- field, existingGetter?.reference, existingSetter?.reference));
- // TODO(johnniwinther): We need to unbind the canonical names before
- // serializing these references since the canonical names refer to
- // @getters and @setters instead of @fields and @fields=. This will
- // not be needed if stop using @fields/@fields= in favor of
- // @getters/@setters in general.
- if (existingGetter != null) {
- cls.procedures.remove(existingGetter);
- }
- if (existingSetter != null) {
- cls.procedures.remove(existingSetter);
- }
continue;
}
addField(field, includeStatic: false);
@@ -451,20 +411,6 @@
for (ir.Procedure procedure in cls.mixedInClass.mixin.procedures) {
if (procedure.containsSuperCalls) {
_isMixinApplicationWithMembers = true;
- cloneVisitor ??= new MixinApplicationCloner(cls,
- typeSubstitution: getSubstitutionMap(cls.mixedInType));
- // TODO(jensj): Provide a "referenceFrom" if we need to support
- // the incremental compiler.
- ensureExistingProcedureMaps();
- ir.Procedure existingProcedure =
- procedure.kind == ir.ProcedureKind.Setter
- ? existingSetters[procedure.name]
- : existingNonSetters[procedure.name];
- if (existingProcedure != null) {
- cls.procedures.remove(existingProcedure);
- }
- cls.addProcedure(cloneVisitor.cloneProcedure(
- procedure, existingProcedure?.reference));
continue;
}
addProcedure(procedure,
diff --git a/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart b/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
new file mode 100644
index 0000000..dc7ded8
--- /dev/null
+++ b/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
@@ -0,0 +1,93 @@
+// 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.
+
+// @dart=2.12
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/clone.dart';
+import 'package:kernel/type_algebra.dart';
+
+/// Transforms the libraries in [libraries] by cloning any mixed in methods that
+/// use super.
+void transformLibraries(List<Library> libraries) {
+ _CloneMixinMethodsWithSuper.transform(libraries);
+}
+
+class _CloneMixinMethodsWithSuper {
+ /// Transform the given new [libraries]. It is expected that all other
+ /// libraries have already been transformed.
+ static void transform(List<Library> libraries) {
+ // Clone any mixed in methods that uses super.
+ var processedClasses = new Set<Class>();
+ for (var library in libraries) {
+ for (var cls in library.classes) {
+ if (processedClasses.add(cls)) {
+ transformClass(cls);
+ }
+ }
+ }
+ }
+
+ /// Transforms a given class by cloning any mixed in methods that use super.
+ static void transformClass(Class cls) {
+ var mixedInClass = cls.mixedInClass;
+ if (mixedInClass == null) return;
+ var mixedInType = cls.mixedInType!;
+ bool hasProcedureMaps = false;
+ Map<Name, Procedure> existingNonSetters = {};
+ Map<Name, Procedure> existingSetters = {};
+
+ void ensureExistingProcedureMaps() {
+ if (hasProcedureMaps) return;
+ for (Procedure procedure in cls.procedures) {
+ if (procedure.kind == ProcedureKind.Setter) {
+ existingSetters[procedure.name] = procedure;
+ } else {
+ existingNonSetters[procedure.name] = procedure;
+ }
+ }
+ hasProcedureMaps = true;
+ }
+
+ CloneVisitorWithMembers? cloneVisitor;
+ for (var field in mixedInClass.mixin.fields) {
+ if (field.containsSuperCalls) {
+ cloneVisitor ??= MixinApplicationCloner(cls,
+ typeSubstitution: getSubstitutionMap(mixedInType));
+ // TODO(jensj): Provide a "referenceFrom" if we need to support
+ // the incremental compiler.
+ ensureExistingProcedureMaps();
+ Procedure? existingGetter = existingNonSetters[field.name];
+ Procedure? existingSetter = existingSetters[field.name];
+ cls.addField(cloneVisitor.cloneField(
+ field, existingGetter?.reference, existingSetter?.reference));
+ if (existingGetter != null) {
+ cls.procedures.remove(existingGetter);
+ }
+ if (existingSetter != null) {
+ cls.procedures.remove(existingSetter);
+ }
+ continue;
+ }
+ }
+ for (var procedure in mixedInClass.mixin.procedures) {
+ if (procedure.containsSuperCalls) {
+ cloneVisitor ??= MixinApplicationCloner(cls,
+ typeSubstitution: getSubstitutionMap(mixedInType));
+ // TODO(jensj): Provide a "referenceFrom" if we need to support
+ // the incremental compiler.
+ ensureExistingProcedureMaps();
+ Procedure? existingProcedure = procedure.kind == ProcedureKind.Setter
+ ? existingSetters[procedure.name]
+ : existingNonSetters[procedure.name];
+ if (existingProcedure != null) {
+ cls.procedures.remove(existingProcedure);
+ }
+ cls.addProcedure(cloneVisitor.cloneProcedure(
+ procedure, existingProcedure?.reference));
+ continue;
+ }
+ }
+ }
+}
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index b2839cb..e74ad8a 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3307,27 +3307,18 @@
SourceInformation sourceInformation =
_sourceInformationBuilder.buildGet(node);
ir.DartType type = node.type;
- if (type is ir.InterfaceType ||
- type is ir.DynamicType ||
- type is ir.NeverType ||
- type is ir.TypedefType ||
- type is ir.FunctionType ||
- type is ir.FutureOrType) {
+ DartType dartType = _elementMap.getDartType(type);
+ if (!dartType.containsTypeVariables) {
ConstantValue constant =
_elementMap.getConstantValue(_memberContextNode, node);
stack.add(graph.addConstant(constant, closedWorld,
sourceInformation: sourceInformation));
return;
}
- assert(
- type is ir.TypeParameterType,
- failedAt(
- CURRENT_ELEMENT_SPANNABLE, "Unexpected type literal ${node}."));
// For other types (e.g. TypeParameterType, function types from expanded
// typedefs), look-up or construct a reified type representation and convert
// to a RuntimeType.
- DartType dartType = _elementMap.getDartType(type);
dartType = localsHandler.substInContext(dartType);
HInstruction value = _typeBuilder.analyzeTypeArgument(
dartType, sourceElement,
diff --git a/pkg/compiler/lib/src/util/command_line.dart b/pkg/compiler/lib/src/util/command_line.dart
index 8e27fc3..e1da5b8 100644
--- a/pkg/compiler/lib/src/util/command_line.dart
+++ b/pkg/compiler/lib/src/util/command_line.dart
@@ -29,7 +29,7 @@
/// // abc
/// // with " 'spaces
List<String> splitLine(String line, {bool windows = false}) {
- List<String> result = <String>[];
+ List<String> result = [];
bool inQuotes = false;
String? openingQuote;
StringBuffer buffer = StringBuffer();
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
index 9220790..379c5ac 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -47,19 +47,11 @@
///
/// If [explicitExperimentalFlags] is `null` or doesn't contain [flag], the
/// default value from [defaultExperimentalFlags] is returned.
-///
-/// If [flag] is marked as expired in [expiredExperimentalFlags], the value from
-/// [defaultExperimentalFlags] is always returned.
bool isExperimentEnabled(ExperimentalFlag flag,
{Map<ExperimentalFlag, bool>? explicitExperimentalFlags,
Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting}) {
assert(defaultExperimentalFlags.containsKey(flag),
"No default value for $flag.");
- assert(expiredExperimentalFlags.containsKey(flag),
- "No expired value for $flag.");
- if (expiredExperimentalFlags[flag]!) {
- return defaultExperimentalFlags[flag]!;
- }
bool? enabled;
if (explicitExperimentalFlags != null) {
enabled = explicitExperimentalFlags[flag];
@@ -81,9 +73,6 @@
/// If [allowedExperimentalFlags] is `null` [defaultAllowedExperimentalFlags] is
/// used for the per library flag state.
///
-/// If [flag] is marked as expired in [expiredExperimentalFlags], the value from
-/// [defaultExperimentalFlags] is always returned.
-///
/// The canonical uri, also known as the import uri, is the absolute uri that
/// defines the identity of a library, for instance `dart:core`, `package:foo`,
/// or `file:///path/dir/file.dart`.
@@ -93,11 +82,6 @@
AllowedExperimentalFlags? allowedExperimentalFlags}) {
assert(defaultExperimentalFlags.containsKey(flag),
"No default value for $flag.");
- assert(expiredExperimentalFlags.containsKey(flag),
- "No expired value for $flag.");
- if (expiredExperimentalFlags[flag]!) {
- return defaultExperimentalFlags[flag]!;
- }
bool? enabled;
if (explicitExperimentalFlags != null) {
enabled = explicitExperimentalFlags[flag];
@@ -190,11 +174,6 @@
Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting}) {
assert(defaultExperimentalFlags.containsKey(flag),
"No default value for $flag.");
- assert(expiredExperimentalFlags.containsKey(flag),
- "No expired value for $flag.");
- if (expiredExperimentalFlags[flag]!) {
- return defaultExperimentalFlags[flag]!;
- }
bool? enabledByDefault;
if (defaultExperimentFlagsForTesting != null) {
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
index 4d0f32a..e595184 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -271,7 +271,7 @@
library, classBuilder!, this, classBuilder!.scope, fileUri);
bodyBuilder.constantContext = ConstantContext.required;
bodyBuilder.parseInitializers(beginInitializers!);
- bodyBuilder.resolveRedirectingFactoryTargets();
+ bodyBuilder.performBacklogComputations(delayedActionPerformers);
}
beginInitializers = null;
if (isConst && isPatch) {
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 9493fde..e4761c0 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -434,10 +434,7 @@
initializer = wrapper.operand;
}
buildBody(coreTypes, initializer);
- bodyBuilder.resolveRedirectingFactoryTargets();
- if (bodyBuilder.hasDelayedActions) {
- delayedActionPerformers.add(bodyBuilder);
- }
+ bodyBuilder.performBacklogComputations(delayedActionPerformers);
}
_constInitializerToken = null;
}
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index e4fb075..c5917c2 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -225,10 +225,7 @@
bodyBuilder.transformCollections,
library.library);
initializerWasInferred = true;
- bodyBuilder.resolveRedirectingFactoryTargets();
- if (bodyBuilder.hasDelayedActions) {
- delayedActionPerformers.add(bodyBuilder);
- }
+ bodyBuilder.performBacklogComputations(delayedActionPerformers);
}
}
initializerToken = null;
diff --git a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
index c4497b1..80ed54d 100644
--- a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
@@ -41,6 +41,6 @@
bodyBuilder.parseAnnotation(annotationBuilder.beginToken));
}
bodyBuilder.inferAnnotations(parent, parent.annotations);
- bodyBuilder.resolveRedirectingFactoryTargets();
+ bodyBuilder.performBacklogComputations();
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index df886e2..89d2a68 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -708,8 +708,8 @@
if (name?.isNotEmpty ?? false) {
Token period = periodBeforeName ?? beginToken.next!.next!;
Generator generator = expression as Generator;
- expression = generator.buildPropertyAccess(
- new IncompletePropertyAccessGenerator(
+ expression = generator.buildSelectorAccess(
+ new PropertySelector(
this, period.next!, new Name(name!, libraryBuilder.nameOrigin)),
period.next!.offset,
false);
@@ -797,7 +797,6 @@
assert(checkState(beginToken, [ValueKinds.Integer]));
}
- @override
void finishFields() {
debugEvent("finishFields");
assert(checkState(null, [/*field count*/ ValueKinds.Integer]));
@@ -872,11 +871,36 @@
}
pop(); // Annotations.
- resolveRedirectingFactoryTargets();
- finishVariableMetadata();
+ performBacklogComputations();
assert(stack.length == 0);
}
+ /// Perform delayed computations that were put on back log during body
+ /// building.
+ ///
+ /// Back logged computations include resolution of redirecting factory
+ /// invocations and checking of typedef types.
+ void performBacklogComputations(
+ [List<DelayedActionPerformer>? delayedActionPerformers]) {
+ _finishVariableMetadata();
+ _unaliasTypeAliasedConstructorInvocations();
+ _unaliasTypeAliasedFactoryInvocations();
+ _resolveRedirectingFactoryTargets(
+ redirectingFactoryInvocations, delayedRedirectingFactoryInvocations);
+ libraryBuilder.checkUncheckedTypedefTypes(typeEnvironment);
+ if (hasDelayedActions) {
+ assert(
+ delayedActionPerformers != null,
+ "Body builder has delayed actions that cannot be performed: "
+ "$delayedRedirectingFactoryInvocations");
+ delayedActionPerformers?.add(this);
+ }
+ }
+
+ void finishRedirectingFactoryBody() {
+ performBacklogComputations();
+ }
+
@override
void endMember() {
debugEvent("Member");
@@ -1023,7 +1047,6 @@
}
}
- @override
void finishFunction(
FormalParameters? formals, AsyncMarker asyncModifier, Statement? body) {
debugEvent("finishFunction");
@@ -1159,9 +1182,7 @@
}
}
- resolveRedirectingFactoryTargets();
- finishVariableMetadata();
- libraryBuilder.checkUncheckedTypedefTypes(typeEnvironment);
+ performBacklogComputations();
}
void checkAsyncReturnType(AsyncMarker asyncModifier, DartType returnType,
@@ -1257,14 +1278,6 @@
return true;
}
- // TODO(eernst): Rename this method now that it handles more tasks.
- void resolveRedirectingFactoryTargets() {
- _unaliasTypeAliasedConstructorInvocations();
- _unaliasTypeAliasedFactoryInvocations();
- _resolveRedirectingFactoryTargets(
- redirectingFactoryInvocations, delayedRedirectingFactoryInvocations);
- }
-
/// Return an [Expression] resolving the argument invocation.
///
/// The arguments specify the [StaticInvocation] whose `.target` is
@@ -1439,7 +1452,7 @@
return delayedRedirectingFactoryInvocations.isNotEmpty;
}
- void finishVariableMetadata() {
+ void _finishVariableMetadata() {
List<VariableDeclaration>? variablesWithMetadata =
this.variablesWithMetadata;
this.variablesWithMetadata = null;
@@ -1488,8 +1501,7 @@
} else {
temporaryParent = new ListLiteral(expressions);
}
- resolveRedirectingFactoryTargets();
- finishVariableMetadata();
+ performBacklogComputations();
return temporaryParent != null ? temporaryParent.expressions : expressions;
}
@@ -1554,7 +1566,7 @@
"Previously implicit assumption about inferFunctionBody "
"not returning anything different.");
- resolveRedirectingFactoryTargets();
+ performBacklogComputations();
libraryBuilder.loader.transformPostInference(fakeReturn,
transformSetLiterals, transformCollections, libraryBuilder.library);
@@ -1815,9 +1827,9 @@
} else if (receiver is Identifier) {
Name name = new Name(receiver.name, libraryBuilder.nameOrigin);
if (arguments == null) {
- push(new IncompletePropertyAccessGenerator(this, beginToken, name));
+ push(new PropertySelector(this, beginToken, name));
} else {
- push(new SendAccessGenerator(
+ push(new InvocationSelector(
this, beginToken, name, typeArguments, arguments as Arguments,
isTypeArgumentsInForest: isInForest));
}
@@ -1833,7 +1845,8 @@
ValueKinds.Expression,
ValueKinds.Generator,
ValueKinds.Initializer,
- ValueKinds.ProblemBuilder
+ ValueKinds.ProblemBuilder,
+ ValueKinds.Selector,
])
]));
}
@@ -1962,6 +1975,7 @@
ValueKinds.Expression,
ValueKinds.Generator,
ValueKinds.ProblemBuilder,
+ ValueKinds.Selector,
]),
]));
debugEvent("BinaryExpression");
@@ -2102,6 +2116,7 @@
unionOfKinds([
ValueKinds.Expression,
ValueKinds.Generator,
+ ValueKinds.Selector,
]),
unionOfKinds([
ValueKinds.Expression,
@@ -2111,7 +2126,7 @@
]),
]));
Object? send = pop();
- if (send is IncompleteSendGenerator) {
+ if (send is Selector) {
push(send.withReceiver(pop(), token.charOffset, isNullAware: true));
} else {
pop();
@@ -2130,24 +2145,28 @@
void doDotOrCascadeExpression(Token token) {
assert(checkState(token, <ValueKind>[
- unionOfKinds([
+ /* after . or .. */ unionOfKinds([
ValueKinds.Expression,
ValueKinds.Generator,
+ ValueKinds.Selector,
+ ]),
+ /* before . or .. */ unionOfKinds([
+ ValueKinds.Expression,
+ ValueKinds.Generator,
+ ValueKinds.ProblemBuilder,
+ ValueKinds.Initializer,
]),
]));
Object? send = pop();
- if (send is IncompleteSendGenerator) {
- assert(checkState(token, <ValueKind>[
- unionOfKinds([
- ValueKinds.Expression,
- ValueKinds.Generator,
- ValueKinds.ProblemBuilder,
- ValueKinds.Initializer,
- ]),
- ]));
+ if (send is Selector) {
Object? receiver = optional(".", token) ? pop() : popForValue();
push(send.withReceiver(receiver, token.charOffset));
+ } else if (send is IncompleteErrorGenerator) {
+ // Pop the "receiver" and push the error.
+ pop();
+ push(send);
} else {
+ // Pop the "receiver" and push the error.
pop();
token = token.next!;
push(buildProblem(fasta.templateExpectedIdentifier.withArguments(token),
@@ -4420,8 +4439,8 @@
ConstructorReferenceContext.Implicit) {
type = qualifier.qualifiedLookup(qualified.token);
} else {
- type = qualifier.buildPropertyAccess(
- new IncompletePropertyAccessGenerator(this, qualified.token,
+ type = qualifier.buildSelectorAccess(
+ new PropertySelector(this, qualified.token,
new Name(qualified.name, libraryBuilder.nameOrigin)),
qualified.token.charOffset,
false);
@@ -6780,8 +6799,12 @@
allowPotentiallyConstantType: allowPotentiallyConstantType);
if (message == null) return unresolved;
return new UnresolvedType(
- new NamedTypeBuilder(typeParameter.name!, builder.nullabilityBuilder,
- /* arguments = */ null, unresolved.fileUri, unresolved.charOffset)
+ new NamedTypeBuilder(
+ typeParameter.name!,
+ builder.nullabilityBuilder,
+ /* arguments = */ null,
+ unresolved.fileUri,
+ unresolved.charOffset)
..bind(new InvalidTypeDeclarationBuilder(
typeParameter.name!, message)),
unresolved.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index b244b87..629ab65 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -219,9 +219,9 @@
int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
{bool isTypeArgumentsInForest = false});
- /* Expression | Generator */ buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
- if (send is SendAccessGenerator) {
+ /* Expression | Generator */ buildSelectorAccess(
+ Selector send, int operatorOffset, bool isNullAware) {
+ if (send is InvocationSelector) {
return _helper.buildMethodInvocation(buildSimpleRead(), send.name,
send.arguments, offsetForToken(send.token),
isNullAware: isNullAware,
@@ -2611,8 +2611,8 @@
isNullAware: isNullAware);
}
- /* Expression | Generator */ buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ /* Expression | Generator */ buildSelectorAccess(
+ Selector send, int operatorOffset, bool isNullAware) {
if (_helper.constantContext != ConstantContext.none) {
_helper.addProblem(
messageNotAConstantExpression, fileOffset, token.length);
@@ -2846,10 +2846,9 @@
}
@override
- buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
Object propertyAccess =
- suffixGenerator.buildPropertyAccess(send, operatorOffset, isNullAware);
+ suffixGenerator.buildSelectorAccess(send, operatorOffset, isNullAware);
if (propertyAccess is Generator) {
return new DeferredAccessGenerator(
_helper, token, prefixGenerator, propertyAccess);
@@ -2892,8 +2891,12 @@
_uri, charOffset, lengthOfSpan(prefixGenerator.token, token));
}
// TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
- NamedTypeBuilder result = new NamedTypeBuilder(name, nullabilityBuilder,
- /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null);
+ NamedTypeBuilder result = new NamedTypeBuilder(
+ name,
+ nullabilityBuilder,
+ /* arguments = */ null,
+ /* fileUri = */ null,
+ /* charOffset = */ null);
_helper.libraryBuilder.addProblem(
message.messageObject, message.charOffset, message.length, message.uri);
result.bind(result.buildInvalidTypeDeclarationBuilder(message));
@@ -3084,8 +3087,7 @@
}
@override
- buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
int nameOffset = offsetForToken(send.token);
Name name = send.name;
Arguments? arguments = send.arguments;
@@ -3149,7 +3151,7 @@
Generator generator;
if (member == null) {
// If we find a setter, [member] is an [AccessErrorBuilder], not null.
- if (send is IncompletePropertyAccessGenerator) {
+ if (send is PropertySelector) {
assert(
send.typeArguments == null,
"Unexpected non-null typeArguments of "
@@ -3308,7 +3310,7 @@
} else {
// `SomeType?.toString` is the same as `SomeType.toString`, not
// `(SomeType).toString`.
- return super.buildPropertyAccess(send, operatorOffset, isNullAware);
+ return super.buildSelectorAccess(send, operatorOffset, isNullAware);
}
}
@@ -3538,10 +3540,6 @@
@override
String get _plainNameForRead => name.text;
- withReceiver(Object? receiver, int operatorOffset,
- {bool isNullAware: false}) =>
- this;
-
@override
List<Initializer> buildFieldInitializer(Map<String, int>? initializedFields) {
return <Initializer>[
@@ -3560,8 +3558,7 @@
}
@override
- buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
return send.withReceiver(buildSimpleRead(), operatorOffset,
isNullAware: isNullAware);
}
@@ -4011,12 +4008,12 @@
}
@override
- /* Expression | Generator */ buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ /* Expression | Generator */ buildSelectorAccess(
+ Selector send, int operatorOffset, bool isNullAware) {
assert(send.name.text == send.token.lexeme,
"'${send.name.text}' != ${send.token.lexeme}");
Object result = qualifiedLookup(send.token);
- if (send is SendAccessGenerator) {
+ if (send is InvocationSelector) {
result = _helper.finishSend(
result, send.typeArguments, send.arguments, send.fileOffset,
isTypeArgumentsInForest: send.isTypeArgumentsInForest);
@@ -4219,8 +4216,8 @@
return buildProblem();
}
- Expression buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ Expression buildSelectorAccess(
+ Selector send, int operatorOffset, bool isNullAware) {
return buildProblem();
}
@@ -4371,12 +4368,11 @@
}
}
- buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
+ buildSelectorAccess(Selector send, int operatorOffset, bool isNullAware) {
Name name = send.name;
Arguments? arguments = send.arguments;
int offset = offsetForToken(send.token);
- if (isInitializer && send is SendAccessGenerator) {
+ if (isInitializer && send is InvocationSelector) {
if (isNullAware) {
_helper.addProblem(
messageInvalidUseOfNullAwareAccess, operatorOffset, 2);
@@ -4386,7 +4382,7 @@
if (inFieldInitializer && !inLateFieldInitializer && !isInitializer) {
return buildFieldInitializerError(null);
}
- if (send is SendAccessGenerator) {
+ if (send is InvocationSelector) {
// Notice that 'this' or 'super' can't be null. So we can ignore the
// value of [isNullAware].
if (isNullAware) {
@@ -4588,20 +4584,7 @@
}
}
-abstract class IncompleteSendGenerator implements Generator {
- Name get name;
-
- withReceiver(Object? receiver, int operatorOffset, {bool isNullAware: false});
-
- List<UnresolvedType>? get typeArguments => null;
-
- bool get isTypeArgumentsInForest => true;
-
- Arguments? get arguments => null;
-}
-
-class IncompleteErrorGenerator extends ErroneousExpressionGenerator
- with IncompleteSendGenerator {
+class IncompleteErrorGenerator extends ErroneousExpressionGenerator {
final Message message;
IncompleteErrorGenerator(
@@ -4646,171 +4629,6 @@
}
}
-// TODO(ahe): Rename to SendGenerator.
-class SendAccessGenerator extends Generator with IncompleteSendGenerator {
- @override
- final Name name;
-
- @override
- final List<UnresolvedType>? typeArguments;
-
- @override
- final bool isTypeArgumentsInForest;
-
- @override
- final Arguments arguments;
-
- final bool isPotentiallyConstant;
-
- SendAccessGenerator(ExpressionGeneratorHelper helper, Token token, this.name,
- this.typeArguments, this.arguments,
- {this.isPotentiallyConstant = false, this.isTypeArgumentsInForest = true})
- : super(helper, token) {
- // ignore: unnecessary_null_comparison
- assert(arguments != null);
- }
-
- String get _plainNameForRead => name.text;
-
- String get _debugName => "SendAccessGenerator";
-
- Expression buildSimpleRead() {
- return unsupported("buildSimpleRead", fileOffset, _uri);
- }
-
- Expression buildAssignment(Expression value, {bool voidContext: false}) {
- return unsupported("buildAssignment", fileOffset, _uri);
- }
-
- withReceiver(Object? receiver, int operatorOffset,
- {bool isNullAware: false}) {
- if (receiver is Generator) {
- return receiver.buildPropertyAccess(this, operatorOffset, isNullAware);
- }
- return _helper.buildMethodInvocation(
- _helper.toValue(receiver), name, arguments, fileOffset,
- isNullAware: isNullAware);
- }
-
- Expression buildIfNullAssignment(Expression value, DartType type, int offset,
- {bool voidContext: false}) {
- return unsupported("buildNullAwareAssignment", offset, _uri);
- }
-
- Expression buildCompoundAssignment(Name binaryOperator, Expression value,
- {int offset: TreeNode.noOffset,
- bool voidContext: false,
- bool isPreIncDec: false,
- bool isPostIncDec: false}) {
- return unsupported("buildCompoundAssignment", offset, _uri);
- }
-
- Expression buildPrefixIncrement(Name binaryOperator,
- {int offset: TreeNode.noOffset, bool voidContext: false}) {
- return unsupported("buildPrefixIncrement", offset, _uri);
- }
-
- Expression buildPostfixIncrement(Name binaryOperator,
- {int offset: TreeNode.noOffset, bool voidContext: false}) {
- return unsupported("buildPostfixIncrement", offset, _uri);
- }
-
- Expression doInvocation(
- int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
- {bool isTypeArgumentsInForest = false}) {
- return unsupported("doInvocation", offset, _uri);
- }
-
- @override
- Generator buildIndexedAccess(Expression index, Token token,
- {required bool isNullAware}) {
- // ignore: unnecessary_null_comparison
- assert(isNullAware != null);
- return unsupported("buildIndexedAccess", offsetForToken(token), _uri);
- }
-
- @override
- void printOn(StringSink sink) {
- sink.write(", name: ");
- sink.write(name.text);
- sink.write(", arguments: ");
- printNodeOn(arguments, sink);
- }
-}
-
-class IncompletePropertyAccessGenerator extends Generator
- with IncompleteSendGenerator {
- final Name name;
-
- IncompletePropertyAccessGenerator(
- ExpressionGeneratorHelper helper, Token token, this.name)
- : super(helper, token);
-
- String get _plainNameForRead => name.text;
-
- String get _debugName => "IncompletePropertyAccessGenerator";
-
- Expression buildSimpleRead() {
- return unsupported("buildSimpleRead", fileOffset, _uri);
- }
-
- Expression buildAssignment(Expression value, {bool voidContext: false}) {
- return unsupported("buildAssignment", fileOffset, _uri);
- }
-
- withReceiver(Object? receiver, int operatorOffset,
- {bool isNullAware: false}) {
- if (receiver is Generator) {
- return receiver.buildPropertyAccess(this, operatorOffset, isNullAware);
- }
- return PropertyAccessGenerator.make(
- _helper, token, _helper.toValue(receiver), name, isNullAware);
- }
-
- Expression buildIfNullAssignment(Expression value, DartType type, int offset,
- {bool voidContext: false}) {
- return unsupported("buildNullAwareAssignment", offset, _uri);
- }
-
- Expression buildCompoundAssignment(Name binaryOperator, Expression value,
- {int offset: TreeNode.noOffset,
- bool voidContext: false,
- bool isPreIncDec: false,
- bool isPostIncDec: false}) {
- return unsupported("buildCompoundAssignment", offset, _uri);
- }
-
- Expression buildPrefixIncrement(Name binaryOperator,
- {int offset: TreeNode.noOffset, bool voidContext: false}) {
- return unsupported("buildPrefixIncrement", offset, _uri);
- }
-
- Expression buildPostfixIncrement(Name binaryOperator,
- {int offset: TreeNode.noOffset, bool voidContext: false}) {
- return unsupported("buildPostfixIncrement", offset, _uri);
- }
-
- Expression doInvocation(
- int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
- {bool isTypeArgumentsInForest = false}) {
- return unsupported("doInvocation", offset, _uri);
- }
-
- @override
- Generator buildIndexedAccess(Expression index, Token token,
- {required bool isNullAware}) {
- // ignore: unnecessary_null_comparison
- assert(isNullAware != null);
- return unsupported("buildIndexedAccess", offsetForToken(token), _uri);
- }
-
- @override
- void printOn(StringSink sink) {
- sink.write(", name: ");
- sink.write(name.text);
- }
-}
-
/// [ParenthesizedExpressionGenerator] represents the subexpression whose prefix
/// is a parenthesized expression.
///
@@ -4845,9 +4663,9 @@
String get _debugName => "ParenthesizedExpressionGenerator";
- /* Expression | Generator */ buildPropertyAccess(
- IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
- if (send is SendAccessGenerator) {
+ /* Expression | Generator */ buildSelectorAccess(
+ Selector send, int operatorOffset, bool isNullAware) {
+ if (send is InvocationSelector) {
return _helper.buildMethodInvocation(
_createRead(), send.name, send.arguments, offsetForToken(send.token),
isNullAware: isNullAware,
@@ -4873,3 +4691,150 @@
bool isFieldOrGetter(Member? member) {
return member is Field || (member is Procedure && member.isGetter);
}
+
+/// A [Selector] is a part of an object access after `.` or `..` or `?.`,
+/// including arguments, if present.
+///
+/// For instance, an [InvocationSelector] is created for `b()` in
+///
+/// a.b();
+/// a..b();
+/// a?.b();
+///
+/// and a [PropertySelector] is created for `b` in
+///
+/// a.b;
+/// a.b = c;
+/// a..b;
+/// a..b = c;
+/// a?.b;
+/// a?.b = c;
+///
+abstract class Selector {
+ final ExpressionGeneratorHelper _helper;
+ final Token token;
+
+ Selector(this._helper, this.token);
+
+ int get fileOffset => offsetForToken(token);
+
+ Name get name;
+
+ /// Applies this selector to [receiver].
+ /* Expression | Generator */ withReceiver(
+ Object? receiver, int operatorOffset,
+ {bool isNullAware: false});
+
+ List<UnresolvedType>? get typeArguments => null;
+
+ bool get isTypeArgumentsInForest => true;
+
+ Arguments? get arguments => null;
+
+ /// Internal name used for debugging.
+ String get _debugName;
+
+ void printOn(StringSink sink);
+
+ String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.write(_debugName);
+ buffer.write("(offset: ");
+ buffer.write("${fileOffset}");
+ printOn(buffer);
+ buffer.write(")");
+ return "$buffer";
+ }
+}
+
+/// An [InvocationSelector] is the part of an object invocation after `.` or
+/// `..` or `?.` including arguments.
+///
+/// For instance, an [InvocationSelector] is created for `b()` in
+///
+/// a.b();
+/// a..b();
+/// a?.b();
+///
+class InvocationSelector extends Selector {
+ @override
+ final Name name;
+
+ @override
+ final List<UnresolvedType>? typeArguments;
+
+ @override
+ final bool isTypeArgumentsInForest;
+
+ @override
+ final Arguments arguments;
+
+ final bool isPotentiallyConstant;
+
+ InvocationSelector(ExpressionGeneratorHelper helper, Token token, this.name,
+ this.typeArguments, this.arguments,
+ {this.isPotentiallyConstant = false, this.isTypeArgumentsInForest = true})
+ : super(helper, token) {
+ // ignore: unnecessary_null_comparison
+ assert(arguments != null);
+ }
+
+ @override
+ String get _debugName => 'InvocationSelector';
+
+ @override
+ withReceiver(Object? receiver, int operatorOffset,
+ {bool isNullAware: false}) {
+ if (receiver is Generator) {
+ return receiver.buildSelectorAccess(this, operatorOffset, isNullAware);
+ }
+ return _helper.buildMethodInvocation(
+ _helper.toValue(receiver), name, arguments, fileOffset,
+ isNullAware: isNullAware);
+ }
+
+ @override
+ void printOn(StringSink sink) {
+ sink.write(", name: ");
+ sink.write(name.text);
+ sink.write(", arguments: ");
+ printNodeOn(arguments, sink);
+ }
+}
+
+/// A [PropertySelector] is the part of an object access after `.` or `..` or
+/// `?.`.
+///
+/// For instance a [PropertySelector] is created for `b` in
+///
+/// a.b;
+/// a.b = c;
+/// a..b;
+/// a..b = c;
+/// a?.b;
+/// a?.b = c;
+///
+class PropertySelector extends Selector {
+ final Name name;
+
+ PropertySelector(ExpressionGeneratorHelper helper, Token token, this.name)
+ : super(helper, token);
+
+ @override
+ String get _debugName => 'PropertySelector';
+
+ withReceiver(Object? receiver, int operatorOffset,
+ {bool isNullAware: false}) {
+ if (receiver is Generator) {
+ return receiver.buildSelectorAccess(this, operatorOffset, isNullAware);
+ }
+ return PropertyAccessGenerator.make(
+ _helper, token, _helper.toValue(receiver), name, isNullAware);
+ }
+
+ @override
+ void printOn(StringSink sink) {
+ sink.write(", name: ");
+ sink.write(name.text);
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
index f17d67e..a7da5cc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
@@ -33,7 +33,7 @@
if (builder == null) {
// TODO(jensj): Probably a part or something.
loader.addProblem(message.messageObject, message.charOffset,
- message.length, message.uri!,
+ message.length, message.uri,
context: context);
} else {
builder.addProblem(message.messageObject, message.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 248ecdd..37f45ac 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -56,7 +56,7 @@
import '../ignored_parser_errors.dart' show isIgnoredParserError;
-import '../kernel/body_builder.dart' show BodyBuilder;
+import '../kernel/body_builder.dart' show BodyBuilder, FormalParameters;
import '../problems.dart'
show DebugAbort, internalProblem, unexpected, unhandled;
@@ -351,7 +351,7 @@
checkEmpty(beginToken.charOffset);
if (name is ParserRecovery) return;
- final StackListenerImpl listener = createFunctionListener(
+ final BodyBuilder listener = createFunctionListener(
lookupBuilder(beginToken, getOrSet, name as String)
as FunctionBuilderImpl);
buildFunctionBody(listener, bodyToken, metadata, MemberKind.TopLevelMethod);
@@ -726,7 +726,7 @@
: MemberKind.NonStaticMethod);
}
- StackListenerImpl createListener(ModifierBuilder builder, Scope memberScope,
+ BodyBuilder createListener(ModifierBuilder builder, Scope memberScope,
{required bool isDeclarationInstanceMember,
VariableDeclaration? extensionThis,
List<TypeParameter>? extensionTypeParameters,
@@ -754,7 +754,7 @@
constantContext);
}
- StackListenerImpl createListenerInternal(
+ BodyBuilder createListenerInternal(
ModifierBuilder builder,
Scope memberScope,
Scope? formalParameterScope,
@@ -779,7 +779,7 @@
..constantContext = constantContext;
}
- StackListenerImpl createFunctionListener(FunctionBuilderImpl builder) {
+ BodyBuilder createFunctionListener(FunctionBuilderImpl builder) {
final Scope typeParameterScope =
builder.computeTypeParameterScope(memberScope);
final Scope formalParameterScope =
@@ -798,7 +798,7 @@
void buildRedirectingFactoryMethod(Token token, FunctionBuilderImpl builder,
MemberKind kind, Token? metadata) {
- final StackListenerImpl listener = createFunctionListener(builder);
+ final BodyBuilder listener = createFunctionListener(builder);
try {
Parser parser = new Parser(listener,
useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
@@ -810,6 +810,7 @@
token = parser.parseFormalParametersOpt(
parser.syntheticPreviousToken(token), MemberKind.Factory);
listener.pop(); // Pops formal parameters.
+ listener.finishRedirectingFactoryBody();
listener.checkEmpty(token.next!.charOffset);
} on DebugAbort {
rethrow;
@@ -828,7 +829,7 @@
lookupBuilder(token, null, names.first!) as SourceFieldBuilder;
// TODO(paulberry): don't re-parse the field if we've already parsed it
// for type inference.
- parseFields(
+ _parseFields(
createListener(declaration, memberScope,
isDeclarationInstanceMember:
declaration.isDeclarationInstanceMember,
@@ -953,46 +954,24 @@
AsyncMarker? getAsyncMarker(StackListenerImpl listener) =>
listener.pop() as AsyncMarker?;
- /// Invokes the listener's [finishFunction] method.
- ///
- /// This is a separate method so that it may be overridden by a derived class
- /// if more computation must be done before finishing the function.
- void listenerFinishFunction(
- StackListenerImpl listener,
- Token token,
- MemberKind kind,
- dynamic formals,
- AsyncMarker asyncModifier,
- dynamic body) {
- listener.finishFunction(formals, asyncModifier, body);
- }
-
- /// Invokes the listener's [finishFields] method.
- ///
- /// This is a separate method so that it may be overridden by a derived class
- /// if more computation must be done before finishing the function.
- void listenerFinishFields(StackListenerImpl listener, Token startToken,
- Token? metadata, bool isTopLevel) {
- listener.finishFields();
- }
-
- void buildFunctionBody(StackListenerImpl listener, Token startToken,
+ void buildFunctionBody(BodyBuilder bodyBuilder, Token startToken,
Token? metadata, MemberKind kind) {
Token token = startToken;
try {
- Parser parser = new Parser(listener,
+ Parser parser = new Parser(bodyBuilder,
useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
if (metadata != null) {
parser.parseMetadataStar(parser.syntheticPreviousToken(metadata));
- listener.pop(); // Annotations.
+ bodyBuilder.pop(); // Annotations.
}
token = parser.parseFormalParametersOpt(
parser.syntheticPreviousToken(token), kind);
- Object? formals = listener.pop();
- listener.checkEmpty(token.next!.charOffset);
+ FormalParameters? formals = bodyBuilder.pop() as FormalParameters?;
+ bodyBuilder.checkEmpty(token.next!.charOffset);
token = parser.parseInitializersOpt(token);
token = parser.parseAsyncModifierOpt(token);
- AsyncMarker asyncModifier = getAsyncMarker(listener) ?? AsyncMarker.Sync;
+ AsyncMarker asyncModifier =
+ getAsyncMarker(bodyBuilder) ?? AsyncMarker.Sync;
if (kind == MemberKind.Factory && asyncModifier != AsyncMarker.Sync) {
// Factories has to be sync. The parser issued an error.
// Recover to sync.
@@ -1001,10 +980,9 @@
bool isExpression = false;
bool allowAbstract = asyncModifier == AsyncMarker.Sync;
parser.parseFunctionBody(token, isExpression, allowAbstract);
- Object? body = listener.pop();
- listener.checkEmpty(token.charOffset);
- listenerFinishFunction(
- listener, startToken, kind, formals, asyncModifier, body);
+ Statement? body = bodyBuilder.pop() as Statement?;
+ bodyBuilder.checkEmpty(token.charOffset);
+ bodyBuilder.finishFunction(formals, asyncModifier, body);
} on DebugAbort {
rethrow;
} catch (e, s) {
@@ -1012,10 +990,10 @@
}
}
- void parseFields(StackListenerImpl listener, Token startToken,
- Token? metadata, bool isTopLevel) {
+ void _parseFields(BodyBuilder bodyBuilder, Token startToken, Token? metadata,
+ bool isTopLevel) {
Token token = startToken;
- Parser parser = new Parser(listener,
+ Parser parser = new Parser(bodyBuilder,
useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
if (isTopLevel) {
token = parser.parseTopLevelMember(metadata ?? token);
@@ -1023,8 +1001,8 @@
// TODO(danrubel): disambiguate between class/mixin/extension members
token = parser.parseClassMember(metadata ?? token, null).next!;
}
- listenerFinishFields(listener, startToken, metadata, isTopLevel);
- listener.checkEmpty(token.charOffset);
+ bodyBuilder.finishFields();
+ bodyBuilder.checkEmpty(token.charOffset);
}
Builder? lookupBuilder(Token token, Token? getOrSet, String name) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 585b690..b1247dc 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -556,7 +556,7 @@
..parent = parent;
BodyBuilder listener = dietListener.createListener(
builder, dietListener.memberScope,
- isDeclarationInstanceMember: isClassInstanceMember) as BodyBuilder;
+ isDeclarationInstanceMember: isClassInstanceMember);
return listener.parseSingleExpression(
new Parser(listener,
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
index 0544f97..0bf1fdb 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
@@ -47,19 +47,6 @@
// TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
// and ast_builder.dart.
- void finishFunction(
- covariant formals, AsyncMarker asyncModifier, covariant body) {
- problems.unsupported("finishFunction", -1, uri);
- }
-
- // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
- // and ast_builder.dart.
- dynamic finishFields() {
- return problems.unsupported("finishFields", -1, uri);
- }
-
- // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
- // and ast_builder.dart.
List<Expression> finishMetadata(Annotatable? parent) {
return problems.unsupported("finishMetadata", -1, uri);
}
diff --git a/pkg/front_end/lib/src/fasta/source/value_kinds.dart b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
index 3b8edb0..6f24626 100644
--- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
@@ -94,6 +94,8 @@
static const ValueKind QualifiedName =
const SingleValueKind<type.QualifiedName>();
static const ValueKind Scope = const SingleValueKind<type.Scope>();
+ static const ValueKind Selector =
+ const SingleValueKind<type.Selector>();
static const ValueKind SwitchScopeOrNull =
const SingleValueKind<type.Scope>(NullValue.SwitchScope);
static const ValueKind Statement = const SingleValueKind<type.Statement>();
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
index e053cfc..9fea306 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
@@ -8,9 +8,9 @@
{foo());}
^
-parser/error_recovery/bracket_mismatch_03:2:9: Expected ';' after this.
+parser/error_recovery/bracket_mismatch_03:2:8: Expected ';' after this.
{foo());}
- ^
+ ^
parser/error_recovery/bracket_mismatch_03:2:9: Unexpected token ')'.
{foo());}
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
index b4f350e..ffe546c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
@@ -82,7 +82,7 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ reportRecoverableError(), Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
rewriter()
listener: handleExpressionStatement(;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
index d4b6a44..e8d4816 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
@@ -8,9 +8,9 @@
foo(() {bar());});
^
-parser/error_recovery/bracket_mismatch_04:2:16: Expected ';' after this.
+parser/error_recovery/bracket_mismatch_04:2:15: Expected ';' after this.
foo(() {bar());});
- ^
+ ^
parser/error_recovery/bracket_mismatch_04:2:16: Unexpected token ';'.
foo(() {bar());});
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
index 5dee028..b4a6f0d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
@@ -115,7 +115,7 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ reportRecoverableError(), Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
rewriter()
listener: handleExpressionStatement(;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
index 0affd02..1b4fc95 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
@@ -4,17 +4,17 @@
for () {}
^
-parser/error_recovery/empty_for:2:8: Expected ';' after this.
+parser/error_recovery/empty_for:2:7: Expected ';' after this.
for () {}
- ^
+ ^
parser/error_recovery/empty_for:2:8: Expected an identifier, but got ')'.
for () {}
^
-parser/error_recovery/empty_for:2:8: Expected ';' after this.
+parser/error_recovery/empty_for:2:7: Expected ';' after this.
for () {}
- ^
+ ^
beginCompilationUnit(main)
beginMetadataStar(main)
@@ -35,13 +35,13 @@
handleNoArguments())
handleSend(, ))
handleForInitializerExpressionStatement(, false)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
handleIdentifier(, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
handleExpressionStatement(;)
handleForLoopParts(for, (, ;, 0)
beginForStatementBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
index fb9fb95..d816a82 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
@@ -54,8 +54,8 @@
parseForRest(null, , for)
parseForLoopPartsRest(, for, null)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
parseExpressionStatement(;)
parseExpression(;)
@@ -74,8 +74,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: handleExpressionStatement(;)
listener: handleForLoopParts(for, (, ;, 0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
index bf20d7f..0136c1d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
@@ -8,17 +8,17 @@
}
^
-parser/error_recovery/issue_000032:7:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_000032:6:4: Expected ';' after this.
+ C<
+ ^
parser/error_recovery/issue_000032:11:1: Expected an identifier, but got '}'.
}
^
-parser/error_recovery/issue_000032:11:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_000032:10:4: Expected ';' after this.
+ C<
+ ^
beginCompilationUnit(class)
beginMetadataStar(class)
@@ -48,7 +48,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
endClassFields(null, null, null, null, null, null, 1, C, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 1, {, })
@@ -76,7 +76,7 @@
handleNoArguments(})
handleSend(, })
endBinaryExpression(<)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
handleExpressionStatement(;)
endBlockFunctionBody(1, {, })
endTopLevelMethod(main, null, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
index 373d0f43..2733df1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
@@ -55,8 +55,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, C)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, C, ;)
listener: endMember()
@@ -124,8 +124,8 @@
listener: handleSend(, })
listener: endBinaryExpression(<)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
rewriter()
listener: handleExpressionStatement(;)
notEofOrValue(}, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
index 6b960ce..46f6afb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.expect
@@ -10,11 +10,9 @@
WARNING: Reporting at eof --- see below for details.
-parser/error_recovery/issue_39033.crash:1:17: Expected ';' after this.
+parser/error_recovery/issue_39033.crash:1:16: Expected ';' after this.
typedef F<Glib.=
- ^...
-
-WARNING: Reporting at eof --- see below for details.
+ ^
beginCompilationUnit(typedef)
beginMetadataStar(typedef)
@@ -37,8 +35,7 @@
handleIdentifier(, typeReference)
handleNoTypeArguments()
handleType(, null)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
endFunctionTypeAlias(typedef, =, ;)
endTopLevelDeclaration()
endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
index c85f9e8..b2f18b7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
@@ -34,9 +34,8 @@
listener: handleNoTypeArguments()
listener: handleType(, null)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(=, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
rewriter()
listener: endFunctionTypeAlias(typedef, =, ;)
listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
index 43a90df..5bd3f47 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
@@ -26,11 +26,9 @@
WARNING: Reporting at eof --- see below for details.
-parser/error_recovery/issue_39202.crash:1:25: Expected ';' after this.
+parser/error_recovery/issue_39202.crash:1:24: Expected ';' after this.
() async => a b < c $? >
- ^...
-
-WARNING: Reporting at eof --- see below for details.
+ ^
beginCompilationUnit(()
beginMetadataStar(()
@@ -80,8 +78,7 @@
// WARNING: Reporting at eof for .
handleIdentifier(, topLevelVariableDeclaration)
handleNoFieldInitializer()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endTopLevelFields(null, null, null, null, null, 1, b, ;)
endTopLevelDeclaration()
endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
index f2fb1b9..7754b5d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
@@ -98,9 +98,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 1, b, ;)
listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
index c04b45f..1a1a560 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
@@ -16,11 +16,9 @@
WARNING: Reporting at eof --- see below for details.
-parser/error_recovery/issue_42229.crash:1:34: Expected ';' after this.
+parser/error_recovery/issue_42229.crash:1:14: Expected ';' after this.
Stream<List<>> /* nothing here */
- ^...
-
-WARNING: Reporting at eof --- see below for details.
+ ^
beginCompilationUnit(Stream)
beginMetadataStar(Stream)
@@ -45,8 +43,7 @@
// WARNING: Reporting at eof for .
handleIdentifier(, topLevelVariableDeclaration)
handleNoFieldInitializer()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
endTopLevelDeclaration()
endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
index 25548f5..02666ab 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
@@ -41,9 +41,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
index 308e34f..8fca493 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
@@ -10,11 +10,9 @@
Stream<List<> >
^
-parser/error_recovery/issue_42229_prime.crash:1:16: Expected ';' after this.
+parser/error_recovery/issue_42229_prime.crash:1:15: Expected ';' after this.
Stream<List<> >
- ^...
-
-WARNING: Reporting at eof --- see below for details.
+ ^
beginCompilationUnit(Stream)
beginMetadataStar(Stream)
@@ -37,8 +35,7 @@
handleType(Stream, null)
handleIdentifier(, topLevelVariableDeclaration)
handleNoFieldInitializer()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
endTopLevelDeclaration()
endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
index 3aface3..898699b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
@@ -36,9 +36,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
index b9194da..77d9505 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
@@ -12,11 +12,9 @@
WARNING: Reporting at eof --- see below for details.
-parser/error_recovery/issue_42229_prime_3.crash:1:17: Expected ';' after this.
+parser/error_recovery/issue_42229_prime_3.crash:1:15: Expected ';' after this.
Stream<List<x>>
- ^...
-
-WARNING: Reporting at eof --- see below for details.
+ ^
beginCompilationUnit(Stream)
beginMetadataStar(Stream)
@@ -40,8 +38,7 @@
// WARNING: Reporting at eof for .
handleIdentifier(, topLevelVariableDeclaration)
handleNoFieldInitializer()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
endTopLevelDeclaration()
endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
index 69d438c..09c91a7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
@@ -37,9 +37,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
index 2708788..7467b87 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
@@ -8,9 +8,9 @@
}
^
-parser/error_recovery/issue_46505.crash:3:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_46505.crash:2:16: Expected ';' after this.
+ Stream<List<>>
+ ^
parser/error_recovery/issue_46505.crash:6:8: Expected a type, but got '>'.
List<>
@@ -20,9 +20,9 @@
}
^
-parser/error_recovery/issue_46505.crash:7:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_46505.crash:6:8: Expected ';' after this.
+ List<>
+ ^
beginCompilationUnit(class)
beginMetadataStar(class)
@@ -56,7 +56,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endClassFields(null, null, null, null, null, null, 1, Stream, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 1, {, })
@@ -89,7 +89,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endClassFields(null, null, null, null, null, null, 1, List, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
index 6698055..1354d2a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
@@ -60,8 +60,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
listener: endMember()
@@ -122,8 +122,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, B)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, List, ;)
listener: endMember()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
index 53dc7e8..df6d7fe 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
@@ -8,9 +8,9 @@
}
^
-parser/error_recovery/issue_46505_prime_3.crash:3:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_46505_prime_3.crash:2:21: Expected ';' after this.
+ Stream<List<Set<>>>
+ ^
beginCompilationUnit(class)
beginMetadataStar(class)
@@ -48,7 +48,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endClassFields(null, null, null, null, null, null, 1, Stream, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
index c9d687b6..c837519 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
@@ -65,8 +65,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
listener: endMember()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
index f014c6f..1a032d2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
@@ -8,9 +8,9 @@
}
^
-parser/error_recovery/issue_46505_prime_4.crash:3:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_46505_prime_4.crash:2:27: Expected ';' after this.
+ Stream<List<Set<List<>>>>
+ ^
beginCompilationUnit(class)
beginMetadataStar(class)
@@ -52,7 +52,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endClassFields(null, null, null, null, null, null, 1, Stream, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
index 0522558..0f85986 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
@@ -70,8 +70,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
listener: endMember()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
index 6ccea4e..1b7755f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
@@ -8,9 +8,9 @@
}
^
-parser/error_recovery/issue_46505_prime_5.crash:5:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_46505_prime_5.crash:4:48: Expected ';' after this.
+ Stream<List<Set<List</* user curser here*/>>>>
+ ^
parser/error_recovery/issue_46505_prime_5.crash:11:45: Expected a type, but got '>>>'.
Stream<List<Set<List</* user curser here*/>>>>
@@ -20,9 +20,9 @@
}
^
-parser/error_recovery/issue_46505_prime_5.crash:12:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_46505_prime_5.crash:11:48: Expected ';' after this.
+ Stream<List<Set<List</* user curser here*/>>>>
+ ^
parser/error_recovery/issue_46505_prime_5.crash:19:45: Expected a type, but got '>>>'.
Stream<List<Set<List</* user curser here*/>>>>
@@ -72,9 +72,9 @@
Stream<List<Set<List</* user curser here*/>>>>
^^^
-parser/error_recovery/issue_46505_prime_5.crash:33:1: Expected ';' after this.
-
-WARNING: Reporting at eof --- see below for details.
+parser/error_recovery/issue_46505_prime_5.crash:32:46: Expected ';' after this.
+Stream<List<Set<List</* user curser here*/>>>>
+ ^
beginCompilationUnit(class)
beginMetadataStar(class)
@@ -116,7 +116,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endClassFields(null, null, null, null, null, null, 1, Stream, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 1, {, })
@@ -188,7 +188,7 @@
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
handleIdentifier(, fieldDeclaration)
handleNoFieldInitializer(})
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endClassFields(null, null, null, null, null, null, 1, Stream, ;)
endMember()
endClassOrMixinBody(DeclarationKind.Class, 2, {, })
@@ -371,8 +371,7 @@
handleType(Stream, null)
handleIdentifier(, topLevelVariableDeclaration)
handleNoFieldInitializer()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
endTopLevelDeclaration()
endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
index 1888ab1..a5f5174 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
@@ -70,8 +70,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
listener: endMember()
@@ -184,8 +184,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, B)
listener: handleNoFieldInitializer(})
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
listener: endMember()
@@ -500,9 +500,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
listener: endTopLevelDeclaration()
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 39204f7..502bede 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
@@ -16,9 +16,9 @@
return break(x-1) + 1;
^^^^^
-parser/error_recovery/keyword_named_class_methods:29:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:29:5: Expected ';' after this.
return break(x-1) + 1;
- ^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:29:12: A break statement can't be used outside of a loop or switch statement.
return break(x-1) + 1;
@@ -68,9 +68,9 @@
return continue(x-1) + 1;
^^^^^^^^
-parser/error_recovery/keyword_named_class_methods:54:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:54:5: Expected ';' after this.
return continue(x-1) + 1;
- ^^^^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:54:12: A continue statement can't be used outside of a loop or switch statement.
return continue(x-1) + 1;
@@ -96,9 +96,9 @@
return do(x-1) + 1;
^^
-parser/error_recovery/keyword_named_class_methods:74:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:74:5: Expected ';' after this.
return do(x-1) + 1;
- ^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:75:3: Expected 'while' before this.
}
@@ -124,17 +124,17 @@
return else(x-1) + 1;
^^^^
-parser/error_recovery/keyword_named_class_methods:84:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:84:5: Expected ';' after this.
return else(x-1) + 1;
- ^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:84:12: Expected an identifier, but got 'else'.
return else(x-1) + 1;
^^^^
-parser/error_recovery/keyword_named_class_methods:84:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:84:5: Expected ';' after this.
return else(x-1) + 1;
- ^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:84:12: Unexpected token ';'.
return else(x-1) + 1;
@@ -168,17 +168,17 @@
return final(x-1) + 1;
^^^^^
-parser/error_recovery/keyword_named_class_methods:124:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:124:5: Expected ';' after this.
return final(x-1) + 1;
- ^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:124:17: Expected an identifier, but got '('.
return final(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:124:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:124:17: Expected ';' after this.
return final(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:124:20: Expected ';' after this.
return final(x-1) + 1;
@@ -188,9 +188,9 @@
return final(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:124:21: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:124:20: Expected ';' after this.
return final(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:124:21: Unexpected token ';'.
return final(x-1) + 1;
@@ -216,9 +216,9 @@
return for(x-1) + 1;
^^^
-parser/error_recovery/keyword_named_class_methods:134:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:134:5: Expected ';' after this.
return for(x-1) + 1;
- ^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:134:18: Expected ';' after this.
return for(x-1) + 1;
@@ -228,9 +228,9 @@
return for(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:134:19: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:134:18: Expected ';' after this.
return for(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:134:21: '+' is not a prefix operator.
return for(x-1) + 1;
@@ -244,9 +244,9 @@
return if(x-1) + 1;
^^
-parser/error_recovery/keyword_named_class_methods:154:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:154:5: Expected ';' after this.
return if(x-1) + 1;
- ^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:154:20: '+' is not a prefix operator.
return if(x-1) + 1;
@@ -272,9 +272,9 @@
return is(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:184:14: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:184:12: Expected ';' after this.
return is(x-1) + 1;
- ^
+ ^^
parser/error_recovery/keyword_named_class_methods:207:7: 'new' can't be used as an identifier because it's a keyword.
int new(int x) {
@@ -316,9 +316,9 @@
return switch(x-1) + 1;
^^^^^^
-parser/error_recovery/keyword_named_class_methods:289:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:289:5: Expected ';' after this.
return switch(x-1) + 1;
- ^^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:289:22: A switch statement must have a body, even if it is empty.
return switch(x-1) + 1;
@@ -356,9 +356,9 @@
return try(x-1) + 1;
^^^
-parser/error_recovery/keyword_named_class_methods:314:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:314:5: Expected ';' after this.
return try(x-1) + 1;
- ^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:314:12: A try statement must have a body, even if it is empty.
return try(x-1) + 1;
@@ -376,17 +376,17 @@
return var(x-1) + 1;
^^^
-parser/error_recovery/keyword_named_class_methods:324:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:324:5: Expected ';' after this.
return var(x-1) + 1;
- ^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:324:15: Expected an identifier, but got '('.
return var(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:324:16: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:324:15: Expected ';' after this.
return var(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:324:18: Expected ';' after this.
return var(x-1) + 1;
@@ -396,9 +396,9 @@
return var(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:324:19: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:324:18: Expected ';' after this.
return var(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:324:19: Unexpected token ';'.
return var(x-1) + 1;
@@ -416,17 +416,17 @@
return void(x-1) + 1;
^^^^
-parser/error_recovery/keyword_named_class_methods:329:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:329:5: Expected ';' after this.
return void(x-1) + 1;
- ^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:329:16: Expected an identifier, but got '('.
return void(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:329:17: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:329:16: Expected ';' after this.
return void(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:329:19: Expected ';' after this.
return void(x-1) + 1;
@@ -436,9 +436,9 @@
return void(x-1) + 1;
^
-parser/error_recovery/keyword_named_class_methods:329:20: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:329:19: Expected ';' after this.
return void(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_class_methods:329:20: Unexpected token ';'.
return void(x-1) + 1;
@@ -456,9 +456,9 @@
return while(x-1) + 1;
^^^^^
-parser/error_recovery/keyword_named_class_methods:334:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:334:5: Expected ';' after this.
return while(x-1) + 1;
- ^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_class_methods:334:23: '+' is not a prefix operator.
return while(x-1) + 1;
@@ -819,7 +819,7 @@
handleNoTypeArguments(break)
handleNoArguments(break)
handleSend(, break)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
handleRecoverableError(BreakOutsideOfLoop, break, break)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
@@ -1128,7 +1128,7 @@
handleNoTypeArguments(continue)
handleNoArguments(continue)
handleSend(, continue)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
@@ -1369,7 +1369,7 @@
handleNoTypeArguments(do)
handleNoArguments(do)
handleSend(, do)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginDoWhileStatement(do)
beginDoWhileStatementBody(()
@@ -1502,14 +1502,14 @@
handleNoTypeArguments(else)
handleNoArguments(else)
handleSend(, else)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
handleIdentifier(, expression)
handleNoTypeArguments(else)
handleNoArguments(else)
handleSend(, else)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], else, else)
handleIdentifier(x, expression)
@@ -1983,7 +1983,7 @@
handleNoTypeArguments(final)
handleNoArguments(final)
handleSend(, final)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginMetadataStar(final)
endMetadataStar(0)
@@ -1994,7 +1994,7 @@
beginInitializedIdentifier()
handleNoVariableInitializer()
endInitializedIdentifier()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -2010,7 +2010,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -2130,7 +2130,7 @@
handleNoTypeArguments(for)
handleNoArguments(for)
handleSend(, for)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginForStatement(for)
handleIdentifier(x, expression)
@@ -2147,7 +2147,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleForLoopParts(for, (, ;, 0)
beginForStatementBody(+)
@@ -2384,7 +2384,7 @@
handleNoTypeArguments(if)
handleNoArguments(if)
handleSend(, if)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginIfStatement(if)
handleIdentifier(x, expression)
@@ -2754,7 +2754,7 @@
handleType(, null)
endIsOperatorType(is)
handleIsOperator(is, null)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
endReturnStatement(true, return, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -3984,7 +3984,7 @@
handleNoTypeArguments(switch)
handleNoArguments(switch)
handleSend(, switch)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginSwitchStatement(switch)
handleIdentifier(x, expression)
@@ -4299,7 +4299,7 @@
handleNoTypeArguments(try)
handleNoArguments(try)
handleSend(, try)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginTryStatement(try)
handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
@@ -4425,7 +4425,7 @@
handleNoTypeArguments(var)
handleNoArguments(var)
handleSend(, var)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginMetadataStar(var)
endMetadataStar(0)
@@ -4436,7 +4436,7 @@
beginInitializedIdentifier()
handleNoVariableInitializer()
endInitializedIdentifier()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -4452,7 +4452,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4512,7 +4512,7 @@
handleNoTypeArguments(void)
handleNoArguments(void)
handleSend(, void)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginMetadataStar(void)
endMetadataStar(0)
@@ -4523,7 +4523,7 @@
beginInitializedIdentifier()
handleNoVariableInitializer()
endInitializedIdentifier()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -4539,7 +4539,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4599,7 +4599,7 @@
handleNoTypeArguments(while)
handleNoArguments(while)
handleSend(, while)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginWhileStatement(while)
handleIdentifier(x, expression)
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 983ce33..499b444 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
@@ -856,8 +856,8 @@
listener: handleNoArguments(break)
listener: handleSend(, break)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -1628,8 +1628,8 @@
listener: handleNoArguments(continue)
listener: handleSend(, continue)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -2242,8 +2242,8 @@
listener: handleNoArguments(do)
listener: handleSend(, do)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -2325,7 +2325,7 @@
ensureCloseParen(, ()
listener: handleParenthesizedCondition(()
ensureSemicolon())
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
rewriter()
listener: endDoWhileStatement(do, while, ;)
@@ -2589,8 +2589,8 @@
listener: handleNoArguments(else)
listener: handleSend(, else)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -2618,8 +2618,8 @@
listener: handleNoArguments(else)
listener: handleSend(, else)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -3798,8 +3798,8 @@
listener: handleNoArguments(final)
listener: handleSend(, final)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -3824,8 +3824,8 @@
listener: handleNoVariableInitializer()
listener: endInitializedIdentifier()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: endVariablesDeclaration(1, ;)
notEofOrValue(}, x)
@@ -3882,8 +3882,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -4184,8 +4184,8 @@
listener: handleNoArguments(for)
listener: handleSend(, for)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -4242,8 +4242,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
listener: handleForLoopParts(for, (, ;, 0)
@@ -4831,8 +4831,8 @@
listener: handleNoArguments(if)
listener: handleSend(, if)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -5751,8 +5751,8 @@
listener: handleIsOperator(is, null)
skipChainedAsIsOperators()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+ reportRecoverableError(is, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -8807,8 +8807,8 @@
listener: handleNoArguments(switch)
listener: handleSend(, switch)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9593,8 +9593,8 @@
listener: handleNoArguments(try)
listener: handleSend(, try)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9922,8 +9922,8 @@
listener: handleNoArguments(var)
listener: handleSend(, var)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9948,8 +9948,8 @@
listener: handleNoVariableInitializer()
listener: endInitializedIdentifier()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: endVariablesDeclaration(1, ;)
notEofOrValue(}, x)
@@ -10006,8 +10006,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -10161,8 +10161,8 @@
listener: handleNoArguments(void)
listener: handleSend(, void)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -10188,8 +10188,8 @@
listener: handleNoVariableInitializer()
listener: endInitializedIdentifier()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: endVariablesDeclaration(1, ;)
notEofOrValue(}, x)
@@ -10246,8 +10246,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -10401,8 +10401,8 @@
listener: handleNoArguments(while)
listener: handleSend(, while)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
index cca2b0b..076896b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
@@ -16,9 +16,9 @@
return break(x-1) + 1;
^^^^^
-parser/error_recovery/keyword_named_top_level_methods:28:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:28:3: Expected ';' after this.
return break(x-1) + 1;
- ^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:28:10: A break statement can't be used outside of a loop or switch statement.
return break(x-1) + 1;
@@ -68,9 +68,9 @@
return continue(x-1) + 1;
^^^^^^^^
-parser/error_recovery/keyword_named_top_level_methods:53:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:53:3: Expected ';' after this.
return continue(x-1) + 1;
- ^^^^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:53:10: A continue statement can't be used outside of a loop or switch statement.
return continue(x-1) + 1;
@@ -96,9 +96,9 @@
return do(x-1) + 1;
^^
-parser/error_recovery/keyword_named_top_level_methods:73:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:73:3: Expected ';' after this.
return do(x-1) + 1;
- ^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:74:1: Expected 'while' before this.
}
@@ -124,17 +124,17 @@
return else(x-1) + 1;
^^^^
-parser/error_recovery/keyword_named_top_level_methods:83:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:83:3: Expected ';' after this.
return else(x-1) + 1;
- ^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:83:10: Expected an identifier, but got 'else'.
return else(x-1) + 1;
^^^^
-parser/error_recovery/keyword_named_top_level_methods:83:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:83:3: Expected ';' after this.
return else(x-1) + 1;
- ^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:83:10: Unexpected token ';'.
return else(x-1) + 1;
@@ -168,17 +168,17 @@
return final(x-1) + 1;
^^^^^
-parser/error_recovery/keyword_named_top_level_methods:123:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:123:3: Expected ';' after this.
return final(x-1) + 1;
- ^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:123:15: Expected an identifier, but got '('.
return final(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:123:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:123:15: Expected ';' after this.
return final(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:123:18: Expected ';' after this.
return final(x-1) + 1;
@@ -188,9 +188,9 @@
return final(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:123:19: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:123:18: Expected ';' after this.
return final(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:123:19: Unexpected token ';'.
return final(x-1) + 1;
@@ -216,9 +216,9 @@
return for(x-1) + 1;
^^^
-parser/error_recovery/keyword_named_top_level_methods:133:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:133:3: Expected ';' after this.
return for(x-1) + 1;
- ^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:133:16: Expected ';' after this.
return for(x-1) + 1;
@@ -228,9 +228,9 @@
return for(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:133:17: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:133:16: Expected ';' after this.
return for(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:133:19: '+' is not a prefix operator.
return for(x-1) + 1;
@@ -244,9 +244,9 @@
return if(x-1) + 1;
^^
-parser/error_recovery/keyword_named_top_level_methods:153:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:153:3: Expected ';' after this.
return if(x-1) + 1;
- ^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:153:18: '+' is not a prefix operator.
return if(x-1) + 1;
@@ -272,9 +272,9 @@
return is(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:183:12: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:183:10: Expected ';' after this.
return is(x-1) + 1;
- ^
+ ^^
parser/error_recovery/keyword_named_top_level_methods:206:5: 'new' can't be used as an identifier because it's a keyword.
int new(int x) {
@@ -316,9 +316,9 @@
return switch(x-1) + 1;
^^^^^^
-parser/error_recovery/keyword_named_top_level_methods:288:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:288:3: Expected ';' after this.
return switch(x-1) + 1;
- ^^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:288:20: A switch statement must have a body, even if it is empty.
return switch(x-1) + 1;
@@ -348,9 +348,9 @@
return try(x-1) + 1;
^^^
-parser/error_recovery/keyword_named_top_level_methods:313:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:313:3: Expected ';' after this.
return try(x-1) + 1;
- ^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:313:10: A try statement must have a body, even if it is empty.
return try(x-1) + 1;
@@ -368,17 +368,17 @@
return var(x-1) + 1;
^^^
-parser/error_recovery/keyword_named_top_level_methods:323:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:323:3: Expected ';' after this.
return var(x-1) + 1;
- ^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:323:13: Expected an identifier, but got '('.
return var(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:323:14: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:323:13: Expected ';' after this.
return var(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:323:16: Expected ';' after this.
return var(x-1) + 1;
@@ -388,9 +388,9 @@
return var(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:323:17: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:323:16: Expected ';' after this.
return var(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:323:17: Unexpected token ';'.
return var(x-1) + 1;
@@ -408,17 +408,17 @@
return void(x-1) + 1;
^^^^
-parser/error_recovery/keyword_named_top_level_methods:328:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:328:3: Expected ';' after this.
return void(x-1) + 1;
- ^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:328:14: Expected an identifier, but got '('.
return void(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:328:15: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:328:14: Expected ';' after this.
return void(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:328:17: Expected ';' after this.
return void(x-1) + 1;
@@ -428,9 +428,9 @@
return void(x-1) + 1;
^
-parser/error_recovery/keyword_named_top_level_methods:328:18: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:328:17: Expected ';' after this.
return void(x-1) + 1;
- ^
+ ^
parser/error_recovery/keyword_named_top_level_methods:328:18: Unexpected token ';'.
return void(x-1) + 1;
@@ -448,9 +448,9 @@
return while(x-1) + 1;
^^^^^
-parser/error_recovery/keyword_named_top_level_methods:333:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:333:3: Expected ';' after this.
return while(x-1) + 1;
- ^^^^^
+ ^^^^^^
parser/error_recovery/keyword_named_top_level_methods:333:21: '+' is not a prefix operator.
return while(x-1) + 1;
@@ -793,7 +793,7 @@
handleNoTypeArguments(break)
handleNoArguments(break)
handleSend(, break)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
handleRecoverableError(BreakOutsideOfLoop, break, break)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
@@ -1097,7 +1097,7 @@
handleNoTypeArguments(continue)
handleNoArguments(continue)
handleSend(, continue)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
@@ -1334,7 +1334,7 @@
handleNoTypeArguments(do)
handleNoArguments(do)
handleSend(, do)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginDoWhileStatement(do)
beginDoWhileStatementBody(()
@@ -1465,14 +1465,14 @@
handleNoTypeArguments(else)
handleNoArguments(else)
handleSend(, else)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
handleIdentifier(, expression)
handleNoTypeArguments(else)
handleNoArguments(else)
handleSend(, else)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], else, else)
handleIdentifier(x, expression)
@@ -1938,7 +1938,7 @@
handleNoTypeArguments(final)
handleNoArguments(final)
handleSend(, final)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginMetadataStar(final)
endMetadataStar(0)
@@ -1949,7 +1949,7 @@
beginInitializedIdentifier()
handleNoVariableInitializer()
endInitializedIdentifier()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -1965,7 +1965,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -2083,7 +2083,7 @@
handleNoTypeArguments(for)
handleNoArguments(for)
handleSend(, for)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginForStatement(for)
handleIdentifier(x, expression)
@@ -2100,7 +2100,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleForLoopParts(for, (, ;, 0)
beginForStatementBody(+)
@@ -2333,7 +2333,7 @@
handleNoTypeArguments(if)
handleNoArguments(if)
handleSend(, if)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginIfStatement(if)
handleIdentifier(x, expression)
@@ -2697,7 +2697,7 @@
handleType(, null)
endIsOperatorType(is)
handleIsOperator(is, null)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
endReturnStatement(true, return, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -3906,7 +3906,7 @@
handleNoTypeArguments(switch)
handleNoArguments(switch)
handleSend(, switch)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginSwitchStatement(switch)
handleIdentifier(x, expression)
@@ -4205,7 +4205,7 @@
handleNoTypeArguments(try)
handleNoArguments(try)
handleSend(, try)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginTryStatement(try)
handleRecoverableError(Message[ExpectedClassOrMixinBody, A try statement must have a body, even if it is empty., Try adding an empty body., {string: try statement}], try, try)
@@ -4329,7 +4329,7 @@
handleNoTypeArguments(var)
handleNoArguments(var)
handleSend(, var)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginMetadataStar(var)
endMetadataStar(0)
@@ -4340,7 +4340,7 @@
beginInitializedIdentifier()
handleNoVariableInitializer()
endInitializedIdentifier()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -4356,7 +4356,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4415,7 +4415,7 @@
handleNoTypeArguments(void)
handleNoArguments(void)
handleSend(, void)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginMetadataStar(void)
endMetadataStar(0)
@@ -4426,7 +4426,7 @@
beginInitializedIdentifier()
handleNoVariableInitializer()
endInitializedIdentifier()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
endVariablesDeclaration(1, ;)
handleIdentifier(x, expression)
handleNoTypeArguments(-)
@@ -4442,7 +4442,7 @@
handleNoTypeArguments())
handleNoArguments())
handleSend(, ))
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
handleExpressionStatement(;)
handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ), ))
handleRecoverableError(UnsupportedPrefixPlus, +, +)
@@ -4501,7 +4501,7 @@
handleNoTypeArguments(while)
handleNoArguments(while)
handleSend(, while)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
endReturnStatement(true, return, ;)
beginWhileStatement(while)
handleIdentifier(x, expression)
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 4b6c26a..9c70513 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
@@ -808,8 +808,8 @@
listener: handleNoArguments(break)
listener: handleSend(, break)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], break, break)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -1560,8 +1560,8 @@
listener: handleNoArguments(continue)
listener: handleSend(, continue)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], continue, continue)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -2158,8 +2158,8 @@
listener: handleNoArguments(do)
listener: handleSend(, do)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], do, do)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -2241,7 +2241,7 @@
ensureCloseParen(, ()
listener: handleParenthesizedCondition(()
ensureSemicolon())
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
rewriter()
listener: endDoWhileStatement(do, while, ;)
@@ -2497,8 +2497,8 @@
listener: handleNoArguments(else)
listener: handleSend(, else)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -2526,8 +2526,8 @@
listener: handleNoArguments(else)
listener: handleSend(, else)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], else, else)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -3674,8 +3674,8 @@
listener: handleNoArguments(final)
listener: handleSend(, final)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], final, final)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -3700,8 +3700,8 @@
listener: handleNoVariableInitializer()
listener: endInitializedIdentifier()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: endVariablesDeclaration(1, ;)
notEofOrValue(}, x)
@@ -3758,8 +3758,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -4052,8 +4052,8 @@
listener: handleNoArguments(for)
listener: handleSend(, for)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], for, for)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -4110,8 +4110,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
listener: handleForLoopParts(for, (, ;, 0)
@@ -4682,8 +4682,8 @@
listener: handleNoArguments(if)
listener: handleSend(, if)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], if, if)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -5578,8 +5578,8 @@
listener: handleIsOperator(is, null)
skipChainedAsIsOperators()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
+ reportRecoverableError(is, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], is, is)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -8547,8 +8547,8 @@
listener: handleNoArguments(switch)
listener: handleSend(, switch)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], switch, switch)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9288,8 +9288,8 @@
listener: handleNoArguments(try)
listener: handleSend(, try)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], try, try)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9609,8 +9609,8 @@
listener: handleNoArguments(var)
listener: handleSend(, var)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], var, var)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9635,8 +9635,8 @@
listener: handleNoVariableInitializer()
listener: endInitializedIdentifier()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: endVariablesDeclaration(1, ;)
notEofOrValue(}, x)
@@ -9693,8 +9693,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -9844,8 +9844,8 @@
listener: handleNoArguments(void)
listener: handleSend(, void)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
@@ -9871,8 +9871,8 @@
listener: handleNoVariableInitializer()
listener: endInitializedIdentifier()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], x, x)
+ reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], (, ()
rewriter()
listener: endVariablesDeclaration(1, ;)
notEofOrValue(}, x)
@@ -9929,8 +9929,8 @@
listener: handleNoArguments())
listener: handleSend(, ))
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+ reportRecoverableError(1, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], 1, 1)
rewriter()
listener: handleExpressionStatement(;)
reportRecoverableError(;, Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}])
@@ -10080,8 +10080,8 @@
listener: handleNoArguments(while)
listener: handleSend(, while)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], while, while)
+ reportRecoverableError(return, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], return, return)
rewriter()
listener: endReturnStatement(true, return, ;)
inGenerator()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
index 9f72c57..c89447b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
@@ -16,9 +16,9 @@
}
^
-parser/nnbd/issue_40267_method_call_with_type_arguments:6:1: Expected ';' after this.
-}
-^
+parser/nnbd/issue_40267_method_call_with_type_arguments:5:13: Expected ';' after this.
+ a?<Foo>(b);
+ ^
beginCompilationUnit(f)
beginMetadataStar(f)
@@ -101,7 +101,7 @@
handleNoArguments(})
handleSend(, })
endConditionalExpression(?, :)
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
handleExpressionStatement(;)
endBlockFunctionBody(3, {, })
endTopLevelMethod(f, null, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
index 8a09850..e2d78b9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
@@ -191,8 +191,8 @@
listener: handleSend(, })
listener: endConditionalExpression(?, :)
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+ reportRecoverableError(;, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
rewriter()
listener: handleExpressionStatement(;)
notEofOrValue(}, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
index 311b6f8..a765a2f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
@@ -16,11 +16,9 @@
WARNING: Reporting at eof --- see below for details.
-parser/nnbd/issue_44477:1:15: Expected ';' after this.
+parser/nnbd/issue_44477:1:14: Expected ';' after this.
Future<List<>>
- ^...
-
-WARNING: Reporting at eof --- see below for details.
+ ^
beginCompilationUnit(Future)
beginMetadataStar(Future)
@@ -45,8 +43,7 @@
// WARNING: Reporting at eof for .
handleIdentifier(, topLevelVariableDeclaration)
handleNoFieldInitializer()
- handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- // WARNING: Reporting at eof for .
+ handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
endTopLevelFields(null, null, null, null, null, 1, Future, ;)
endTopLevelDeclaration()
endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
index e90884d..43fbe7a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
@@ -41,9 +41,8 @@
parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
listener: handleNoFieldInitializer()
ensureSemicolon()
- reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
- listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
- listener: // WARNING: Reporting at eof for .
+ reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+ listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
rewriter()
listener: endTopLevelFields(null, null, null, null, null, 1, Future, ;)
listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/test/explicit_creation_git_test.dart b/pkg/front_end/test/explicit_creation_git_test.dart
index bd44d6f..7402c6f 100644
--- a/pkg/front_end/test/explicit_creation_git_test.dart
+++ b/pkg/front_end/test/explicit_creation_git_test.dart
@@ -30,7 +30,6 @@
import 'package:front_end/src/fasta/source/diet_listener.dart';
import 'package:front_end/src/fasta/source/source_library_builder.dart';
import 'package:front_end/src/fasta/source/source_loader.dart';
-import 'package:front_end/src/fasta/source/stack_listener_impl.dart';
import 'package:front_end/src/fasta/ticker.dart';
import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
@@ -158,7 +157,7 @@
: super(library, hierarchy, coreTypes, typeInferenceEngine);
@override
- StackListenerImpl createListenerInternal(
+ BodyBuilder createListenerInternal(
ModifierBuilder builder,
Scope memberScope,
Scope formalParameterScope,
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 78de966..1f5559e 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -62,7 +62,7 @@
import 'package:front_end/src/fasta/source/source_library_builder.dart'
show ImplicitLanguageVersion, SourceLibraryBuilder;
-void check(String expected, Generator generator) {
+void check(String expected, Object generator) {
Expect.stringEquals(expected, "$generator");
}
@@ -198,10 +198,10 @@
new ThisAccessGenerator(helper, token, false, false, false));
check("IncompleteErrorGenerator(offset: 4, message: Unspecified)",
new IncompleteErrorGenerator(helper, token, message));
- check("SendAccessGenerator(offset: 4, name: bar, arguments: (\"arg\"))",
- new SendAccessGenerator(helper, token, name, null, arguments));
- check("IncompletePropertyAccessGenerator(offset: 4, name: bar)",
- new IncompletePropertyAccessGenerator(helper, token, name));
+ check("InvocationSelector(offset: 4, name: bar, arguments: (\"arg\"))",
+ new InvocationSelector(helper, token, name, null, arguments));
+ check("PropertySelector(offset: 4, name: bar)",
+ new PropertySelector(helper, token, name));
check(
"DeferredAccessGenerator(offset: 4,"
" prefixGenerator: PrefixUseGenerator("
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index a562b6b9..f2a57ca 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -541,17 +541,13 @@
parseExperimentalArguments([world["experiments"]]);
// Ensure that we run with non-nullable turned off even when the
// flag is on by default.
- // TODO(johnniwinther,jensj): Update tests to explicitly opt out.
- flagsFromOptions['non-nullable'] ??= false;
Map<ExperimentalFlag, bool> explicitExperimentalFlags =
parseExperimentalFlags(flagsFromOptions,
onError: (e) =>
throw "Error on parsing experiments flags: $e");
options.explicitExperimentalFlags = explicitExperimentalFlags;
} else {
- options.explicitExperimentalFlags = {
- ExperimentalFlag.nonNullable: false
- };
+ options.explicitExperimentalFlags = {};
}
// A separate "world" can also change nnbd mode ---
// notice that the platform is not updated though!
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 69aec91..fe6e872 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -90,6 +90,7 @@
b2i
b2m
b2n
+backlog
backping
backstop
badly
@@ -698,6 +699,7 @@
llub
lm
locationd
+logged
logically
lots
lp
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 598e576..398070d 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -851,6 +851,7 @@
shipped
shortest
shot
+sidebar
sigint
signaling
signalled
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart
new file mode 100644
index 0000000..d964c26
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart
@@ -0,0 +1,66 @@
+// 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.
+
+// Test for expression that could be unresolved constructor invocations but
+// are actually valid instantiation expressions.
+
+class ResolvedClass<T> {
+ ResolvedClass.named();
+
+ static unresolvedConstructor() {}
+}
+
+UnresolvedClass<T>() {}
+
+extension Extension on Function {
+ unresolvedConstructor() {}
+}
+
+class unresolved_prefix {
+ static UnresolvedClass<T>() {}
+}
+
+class resolved_prefix {
+ static UnresolvedClass<T>() {}
+}
+
+main() {
+ UnresolvedClass();
+
+ UnresolvedClass.unresolvedConstructor();
+ UnresolvedClass/**/ .unresolvedConstructor();
+
+ unresolved_prefix.UnresolvedClass();
+ unresolved_prefix. /**/ UnresolvedClass();
+
+ unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+ unresolved_prefix/**/ .UnresolvedClass.unresolvedConstructor();
+
+ UnresolvedClass<int>();
+ UnresolvedClass /**/ <int>();
+
+ UnresolvedClass<int>.unresolvedConstructor();
+ UnresolvedClass /**/ <int>.unresolvedConstructor();
+
+ unresolved_prefix.UnresolvedClass<int>();
+ unresolved_prefix/**/ .UnresolvedClass<int>();
+
+ unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+ unresolved_prefix/**/ .UnresolvedClass<int>.unresolvedConstructor();
+
+ ResolvedClass.unresolvedConstructor();
+ ResolvedClass/**/ .unresolvedConstructor();
+
+ resolved_prefix.UnresolvedClass();
+ resolved_prefix. /**/ UnresolvedClass();
+
+ resolved_prefix.UnresolvedClass.unresolvedConstructor();
+ resolved_prefix/**/ .UnresolvedClass.unresolvedConstructor();
+
+ resolved_prefix.UnresolvedClass<int>();
+ resolved_prefix. /**/ UnresolvedClass<int>();
+
+ resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+ resolved_prefix/**/ .UnresolvedClass<int>.unresolvedConstructor();
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
new file mode 100644
index 0000000..ce55163
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+ constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+ : super core::Object::•()
+ ;
+ static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+ synthetic constructor •() → self::unresolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+ synthetic constructor •() → self::resolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+ method unresolvedConstructor = self::Extension|unresolvedConstructor;
+ tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+ return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+ self::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C1);
+ self::Extension|unresolvedConstructor(#C1);
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C2);
+ self::Extension|unresolvedConstructor(#C2);
+ self::UnresolvedClass<core::int>();
+ self::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C3);
+ self::Extension|unresolvedConstructor(#C3);
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C4);
+ self::Extension|unresolvedConstructor(#C4);
+ self::ResolvedClass::unresolvedConstructor();
+ self::ResolvedClass::unresolvedConstructor();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C5);
+ self::Extension|unresolvedConstructor(#C5);
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C6);
+ self::Extension|unresolvedConstructor(#C6);
+}
+
+constants {
+ #C1 = static-tearoff self::UnresolvedClass
+ #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
+ #C3 = instantiation self::UnresolvedClass <core::int>
+ #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int>
+ #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+ #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
new file mode 100644
index 0000000..ce55163
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+ constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+ : super core::Object::•()
+ ;
+ static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+ synthetic constructor •() → self::unresolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+ synthetic constructor •() → self::resolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+ method unresolvedConstructor = self::Extension|unresolvedConstructor;
+ tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+ return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+ self::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C1);
+ self::Extension|unresolvedConstructor(#C1);
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C2);
+ self::Extension|unresolvedConstructor(#C2);
+ self::UnresolvedClass<core::int>();
+ self::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C3);
+ self::Extension|unresolvedConstructor(#C3);
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C4);
+ self::Extension|unresolvedConstructor(#C4);
+ self::ResolvedClass::unresolvedConstructor();
+ self::ResolvedClass::unresolvedConstructor();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C5);
+ self::Extension|unresolvedConstructor(#C5);
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C6);
+ self::Extension|unresolvedConstructor(#C6);
+}
+
+constants {
+ #C1 = static-tearoff self::UnresolvedClass
+ #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
+ #C3 = instantiation self::UnresolvedClass <core::int>
+ #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int>
+ #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+ #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..0b1fe2c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+class ResolvedClass<T> {
+ ResolvedClass.named();
+ static unresolvedConstructor() {}
+}
+
+UnresolvedClass<T>() {}
+
+extension Extension on Function {
+ unresolvedConstructor() {}
+}
+
+class unresolved_prefix {
+ static UnresolvedClass<T>() {}
+}
+
+class resolved_prefix {
+ static UnresolvedClass<T>() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0810247
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+UnresolvedClass<T>() {}
+
+class ResolvedClass<T> {
+ ResolvedClass.named();
+ static unresolvedConstructor() {}
+}
+
+class resolved_prefix {
+ static UnresolvedClass<T>() {}
+}
+
+class unresolved_prefix {
+ static UnresolvedClass<T>() {}
+}
+
+extension Extension on Function {
+ unresolvedConstructor() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
new file mode 100644
index 0000000..07ba725
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+ constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+ : super core::Object::•()
+ ;
+ static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+ synthetic constructor •() → self::unresolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+ synthetic constructor •() → self::resolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+ method unresolvedConstructor = self::Extension|unresolvedConstructor;
+ tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+ return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+ self::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C1);
+ self::Extension|unresolvedConstructor(#C1);
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C2);
+ self::Extension|unresolvedConstructor(#C2);
+ self::UnresolvedClass<core::int>();
+ self::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C3);
+ self::Extension|unresolvedConstructor(#C3);
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C4);
+ self::Extension|unresolvedConstructor(#C4);
+ self::ResolvedClass::unresolvedConstructor();
+ self::ResolvedClass::unresolvedConstructor();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C5);
+ self::Extension|unresolvedConstructor(#C5);
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C6);
+ self::Extension|unresolvedConstructor(#C6);
+}
+
+constants {
+ #C1 = static-tearoff self::UnresolvedClass
+ #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
+ #C3 = instantiation self::UnresolvedClass <core::int*>
+ #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int*>
+ #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+ #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..dc17d8d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.outline.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+ constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+ ;
+ static method unresolvedConstructor() → dynamic
+ ;
+}
+class unresolved_prefix extends core::Object {
+ synthetic constructor •() → self::unresolved_prefix
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic
+ ;
+}
+class resolved_prefix extends core::Object {
+ synthetic constructor •() → self::resolved_prefix
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic
+ ;
+}
+extension Extension on core::Function {
+ method unresolvedConstructor = self::Extension|unresolvedConstructor;
+ tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic
+ ;
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic
+ ;
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+ return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..07ba725
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+ constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+ : super core::Object::•()
+ ;
+ static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+ synthetic constructor •() → self::unresolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+ synthetic constructor •() → self::resolved_prefix
+ : super core::Object::•()
+ ;
+ static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+ method unresolvedConstructor = self::Extension|unresolvedConstructor;
+ tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+ return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+ self::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C1);
+ self::Extension|unresolvedConstructor(#C1);
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::unresolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C2);
+ self::Extension|unresolvedConstructor(#C2);
+ self::UnresolvedClass<core::int>();
+ self::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C3);
+ self::Extension|unresolvedConstructor(#C3);
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::unresolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C4);
+ self::Extension|unresolvedConstructor(#C4);
+ self::ResolvedClass::unresolvedConstructor();
+ self::ResolvedClass::unresolvedConstructor();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::resolved_prefix::UnresolvedClass<dynamic>();
+ self::Extension|unresolvedConstructor(#C5);
+ self::Extension|unresolvedConstructor(#C5);
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::resolved_prefix::UnresolvedClass<core::int>();
+ self::Extension|unresolvedConstructor(#C6);
+ self::Extension|unresolvedConstructor(#C6);
+}
+
+constants {
+ #C1 = static-tearoff self::UnresolvedClass
+ #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
+ #C3 = instantiation self::UnresolvedClass <core::int*>
+ #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int*>
+ #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+ #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+}
diff --git a/pkg/front_end/testcases/extensions/folder.options b/pkg/front_end/testcases/extensions/folder.options
deleted file mode 100644
index 85bbbb6..0000000
--- a/pkg/front_end/testcases/extensions/folder.options
+++ /dev/null
@@ -1 +0,0 @@
---enable-experiment=extension-methods
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart b/pkg/front_end/testcases/general/duplicated_declarations.dart
index 489b1ab..9862e6f 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart
@@ -34,6 +34,8 @@
main();
print(field);
C.s();
+ C.this();
+ C.();
}
class C {
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index ce50dfd..e32bbfb 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -45,84 +45,84 @@
// main() {
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
// C(a, b);
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
// C(a);
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
// var field = "2nd";
// ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
// var field = "1st";
// ^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
// m() {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
// m() {
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
// static s() {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
// static s() {
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
// class C {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
// class C {
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:75:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
// Enum,
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
// a,
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
// a,
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
// ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:74:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
// enum Enum {
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:91:3: Error: '_name' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
// _name,
// ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of '_name' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:92:3: Error: 'index' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
// index,
// ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'index' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
// toString,
// ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
// values,
// ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
@@ -157,14 +157,14 @@
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
// class C {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
// class C {
// ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
// ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
// enum Enum {
// ^^^^
//
@@ -299,10 +299,10 @@
// typedef Typedef = Object Function();
// ^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
// class Sub extends C {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
// class Sub extends C {
// ^
//
@@ -318,32 +318,46 @@
// C.s();
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:62:17: Error: Can't use 's' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+// C.this();
+// ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:6: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+// C.();
+// ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+// C.();
+// ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
// static f() => s;
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:66:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
// Sub() : super(null);
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:16: Error: Superclass has no method named 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:16: Error: Superclass has no method named 'm'.
// m() => super.m();
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:102:38: Error: Can't use '_name' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:104:38: Error: Can't use '_name' because it is declared more than once.
// "AnotherEnum._name": AnotherEnum._name,
// ^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:103:38: Error: Can't use 'index' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:105:38: Error: Can't use 'index' because it is declared more than once.
// "AnotherEnum.index": AnotherEnum.index,
// ^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:104:41: Error: Can't use 'toString' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
// "AnotherEnum.toString": AnotherEnum.toString,
// ^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:105:39: Error: Can't use 'values' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
// "AnotherEnum.values": AnotherEnum.values,
// ^^^^^^
//
@@ -447,7 +461,7 @@
"1st";
}
static method f() → dynamic
- return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:62:17: Error: Can't use 's' because it is declared more than once.
+ return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
static f() => s;
^";
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -463,7 +477,7 @@
}
class Sub extends core::Object {
constructor •() → self::Sub*
- : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:66:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
Try removing the extra positional arguments.
Sub() : super(null);
^"
@@ -625,15 +639,22 @@
invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
C.s();
^"{dynamic}.s();
+ invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+ C.this();
+ ^^^^";
+ invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+ C.();
+ ^";
}
static method useAnotherEnum() → dynamic {
- <core::String*, core::Object*>{"AnotherEnum.a": #C27, "AnotherEnum.b": #C29, "AnotherEnum.c": #C31, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:102:38: Error: Can't use '_name' because it is declared more than once.
+ <core::String*, core::Object*>{"AnotherEnum.a": #C27, "AnotherEnum.b": #C29, "AnotherEnum.c": #C31, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:104:38: Error: Can't use '_name' because it is declared more than once.
\"AnotherEnum._name\": AnotherEnum._name,
- ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:103:38: Error: Can't use 'index' because it is declared more than once.
+ ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:105:38: Error: Can't use 'index' because it is declared more than once.
\"AnotherEnum.index\": AnotherEnum.index,
- ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:104:41: Error: Can't use 'toString' because it is declared more than once.
+ ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
\"AnotherEnum.toString\": AnotherEnum.toString,
- ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:105:39: Error: Can't use 'values' because it is declared more than once.
+ ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
\"AnotherEnum.values\": AnotherEnum.values,
^^^^^^"};
}
@@ -680,7 +701,7 @@
Constructor coverage from constants:
org-dartlang-testcase:///duplicated_declarations.dart:
-- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:81:6)
+- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:74:6)
-- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:87:6)
+- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
+- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index 1113a3a..287add3 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -45,84 +45,84 @@
// main() {
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
// C(a, b);
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
// C(a);
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
// var field = "2nd";
// ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
// var field = "1st";
// ^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
// m() {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
// m() {
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
// static s() {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
// static s() {
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
// class C {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
// class C {
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:75:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
// Enum,
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
// a,
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
// a,
// ^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
// ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:74:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
// enum Enum {
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:91:3: Error: '_name' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
// _name,
// ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of '_name' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:92:3: Error: 'index' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
// index,
// ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'index' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
// toString,
// ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
// values,
// ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:87:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
// enum AnotherEnum {
// ^^^^^^^^^^^
//
@@ -157,14 +157,14 @@
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
// class C {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:70:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
// class C {
// ^
//
// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
// enum Enum {
// ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:81:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
// enum Enum {
// ^^^^
//
@@ -299,10 +299,10 @@
// typedef Typedef = Object Function();
// ^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
// class Sub extends C {
// ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
// class Sub extends C {
// ^
//
@@ -573,16 +573,16 @@
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:74:3 -> InstanceConstant(const Enum#2{Enum#2.index: 0, Enum#2._name: "Enum.Enum"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:75:3 -> InstanceConstant(const Enum#2{Enum#2.index: 1, Enum#2._name: "Enum.a"})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:77:3 -> InstanceConstant(const Enum#2{Enum#2.index: 2, Enum#2._name: "Enum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:81:6 -> ListConstant(const <Enum#1*>[const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"}, const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"}, const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:82:3 -> InstanceConstant(const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:83:3 -> InstanceConstant(const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:74:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.Enum"}, const Enum{Enum.index: 1, Enum._name: "Enum.a"}, const Enum{Enum.index: 2, Enum._name: "Enum.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:75:3 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.Enum"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:76:3 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{Enum.index: 2, Enum._name: "Enum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:87:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"}, const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"}, const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:88:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:89:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:83:6 -> ListConstant(const <Enum#1*>[const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"}, const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"}, const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:85:3 -> InstanceConstant(const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:86:3 -> InstanceConstant(const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:76:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.Enum"}, const Enum{Enum.index: 1, Enum._name: "Enum.a"}, const Enum{Enum.index: 2, Enum._name: "Enum.b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:77:3 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:80:3 -> InstanceConstant(const Enum{Enum.index: 2, Enum._name: "Enum.b"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:89:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"}, const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"}, const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:91:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:92:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"})
Extra constant evaluation: evaluated: 46, effectively constant: 22
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
index 41b9444..35aa6ca 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
@@ -7,9 +7,9 @@
// for () {}
// ^
//
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
// for () {}
-// ^
+// ^
//
import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
index 41b9444..35aa6ca 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
@@ -7,9 +7,9 @@
// for () {}
// ^
//
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
// for () {}
-// ^
+// ^
//
import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect
index 3e48c20..0292288 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.expect
@@ -10,9 +10,9 @@
// typedef F<Glib.=
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
// typedef F<Glib.=
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
// typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect
index 3e48c20..0292288 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.outline.expect
@@ -10,9 +10,9 @@
// typedef F<Glib.=
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
// typedef F<Glib.=
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
// typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect
index 3e48c20..0292288 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.transformed.expect
@@ -10,9 +10,9 @@
// typedef F<Glib.=
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
// typedef F<Glib.=
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
// typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect
index 6d27355..776ec91 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.expect
@@ -10,9 +10,9 @@
// typedef F<Glib.=
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
// typedef F<Glib.=
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-function type.
// typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect
index 6d27355..776ec91 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.outline.expect
@@ -10,9 +10,9 @@
// typedef F<Glib.=
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
// typedef F<Glib.=
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-function type.
// typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect
index 6d27355..776ec91 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.transformed.expect
@@ -10,9 +10,9 @@
// typedef F<Glib.=
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
// typedef F<Glib.=
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-function type.
// typedef F<Glib.=
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
index c1350db..e1e7c23 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
@@ -24,9 +24,9 @@
// () async => a b < c $? >
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
// () async => a b < c $? >
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
// () async => a b < c $? >
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
index df89136..468caf0 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
@@ -24,9 +24,9 @@
// () async => a b < c $? >
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
// () async => a b < c $? >
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
// () async => a b < c $? >
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
index c1350db..e1e7c23 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
@@ -24,9 +24,9 @@
// () async => a b < c $? >
// ^...
//
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
// () async => a b < c $? >
-// ^...
+// ^
//
// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
// () async => a b < c $? >
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
index 2b9a704..8e7c300 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
@@ -27,10 +27,6 @@
// for (PropertyState<Object, Object>> state in _states) ;
// ^
//
-// pkg/front_end/testcases/general/issue42997.dart:12:30: Error: Expected ';' after this.
-// for (PropertyState<Object, Object>> state in _states) ;
-// ^
-//
// pkg/front_end/testcases/general/issue42997.dart:12:47: Error: Unexpected token 'in'.
// for (PropertyState<Object, Object>> state in _states) ;
// ^^
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
index 2b9a704..8e7c300 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
@@ -27,10 +27,6 @@
// for (PropertyState<Object, Object>> state in _states) ;
// ^
//
-// pkg/front_end/testcases/general/issue42997.dart:12:30: Error: Expected ';' after this.
-// for (PropertyState<Object, Object>> state in _states) ;
-// ^
-//
// pkg/front_end/testcases/general/issue42997.dart:12:47: Error: Unexpected token 'in'.
// for (PropertyState<Object, Object>> state in _states) ;
// ^^
diff --git a/pkg/front_end/testcases/general/issue47036.dart b/pkg/front_end/testcases/general/issue47036.dart
new file mode 100644
index 0000000..392b72d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart
@@ -0,0 +1,39 @@
+// 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 Default {
+ const Default(this.defaultValue);
+
+ final Object? defaultValue;
+}
+
+class Settings {
+ const factory Settings({
+ @Default(Sidebar()) Sidebar sidebar,
+ }) = _SSettings;
+}
+
+class Sidebar {
+ const factory Sidebar() = _SSidebar;
+}
+
+abstract class _SSettings implements Settings {
+ const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
+}
+
+class _$_SSettings implements _SSettings {
+ const _$_SSettings({this.sidebar = const Sidebar()});
+
+ final Sidebar sidebar;
+}
+
+abstract class _SSidebar implements Sidebar {
+ const factory _SSidebar() = _$_SSidebar;
+}
+
+class _$_SSidebar implements _SSidebar {
+ const _$_SSidebar();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47036.dart.textual_outline.expect
new file mode 100644
index 0000000..7f1cc2a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.textual_outline.expect
@@ -0,0 +1,33 @@
+class Default {
+ const Default(this.defaultValue);
+ final Object? defaultValue;
+}
+
+class Settings {
+ const factory Settings({
+ @Default(Sidebar()) Sidebar sidebar,
+ }) = _SSettings;
+}
+
+class Sidebar {
+ const factory Sidebar() = _SSidebar;
+}
+
+abstract class _SSettings implements Settings {
+ const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
+}
+
+class _$_SSettings implements _SSettings {
+ const _$_SSettings({this.sidebar = const Sidebar()});
+ final Sidebar sidebar;
+}
+
+abstract class _SSidebar implements Sidebar {
+ const factory _SSidebar() = _$_SSidebar;
+}
+
+class _$_SSidebar implements _SSidebar {
+ const _$_SSidebar();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47036.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0554393
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.textual_outline_modelled.expect
@@ -0,0 +1,33 @@
+abstract class _SSettings implements Settings {
+ const factory _SSettings({Sidebar sidebar}) = _$_SSettings;
+}
+
+abstract class _SSidebar implements Sidebar {
+ const factory _SSidebar() = _$_SSidebar;
+}
+
+class Default {
+ const Default(this.defaultValue);
+ final Object? defaultValue;
+}
+
+class Settings {
+ const factory Settings({
+ @Default(Sidebar()) Sidebar sidebar,
+ }) = _SSettings;
+}
+
+class Sidebar {
+ const factory Sidebar() = _SSidebar;
+}
+
+class _$_SSettings implements _SSettings {
+ const _$_SSettings({this.sidebar = const Sidebar()});
+ final Sidebar sidebar;
+}
+
+class _$_SSidebar implements _SSidebar {
+ const _$_SSidebar();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
new file mode 100644
index 0000000..e755d5a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/ {
+ final field core::Object? defaultValue;
+ const constructor •(core::Object? defaultValue) → self::Default
+ : self::Default::defaultValue = defaultValue, super core::Object::•()
+ ;
+}
+class Settings extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
+ static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+ return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+ static factory •() → self::Sidebar
+ return self::_SSidebar::•();
+}
+abstract class _SSettings extends core::Object implements self::Settings {
+ static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar = #C3}) → self::_SSettings
+ return new self::_$_SSettings::•(sidebar: sidebar);
+}
+class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/ {
+ final field self::Sidebar sidebar;
+ const constructor •({self::Sidebar sidebar = #C1}) → self::_$_SSettings
+ : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
+ ;
+}
+abstract class _SSidebar extends core::Object implements self::Sidebar {
+ static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+ static factory •() → self::_SSidebar
+ return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/ {
+ const constructor •() → self::_$_SSidebar
+ : super core::Object::•()
+ ;
+}
+static method main() → void {}
+
+constants {
+ #C1 = self::_$_SSidebar {}
+ #C2 = self::Default {defaultValue:#C1}
+ #C3 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47036.dart:
+- _$_SSidebar. (from org-dartlang-testcase:///issue47036.dart:36:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Default. (from org-dartlang-testcase:///issue47036.dart:6:9)
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
new file mode 100644
index 0000000..ebe57b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/ {
+ final field core::Object? defaultValue;
+ const constructor •(core::Object? defaultValue) → self::Default
+ : self::Default::defaultValue = defaultValue, super core::Object::•()
+ ;
+}
+class Settings extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar}) → self::Settings
+ return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+ static factory •() → self::Sidebar
+ return self::_SSidebar::•();
+}
+abstract class _SSettings extends core::Object implements self::Settings {
+ static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar}) → self::_SSettings
+ return new self::_$_SSettings::•(sidebar: sidebar);
+}
+class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/ {
+ final field self::Sidebar sidebar;
+ const constructor •({self::Sidebar sidebar = const self::_$_SSidebar::•()}) → self::_$_SSettings
+ : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
+ ;
+}
+abstract class _SSidebar extends core::Object implements self::Sidebar {
+ static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+ static factory •() → self::_SSidebar
+ return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/ {
+ const constructor •() → self::_$_SSidebar
+ : super core::Object::•()
+ ;
+}
+static method main() → void
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:26:44 -> InstanceConstant(const _$_SSidebar{})
+Extra constant evaluation: evaluated: 17, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
new file mode 100644
index 0000000..e755d5a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/ {
+ final field core::Object? defaultValue;
+ const constructor •(core::Object? defaultValue) → self::Default
+ : self::Default::defaultValue = defaultValue, super core::Object::•()
+ ;
+}
+class Settings extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
+ static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+ return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+ static factory •() → self::Sidebar
+ return self::_SSidebar::•();
+}
+abstract class _SSettings extends core::Object implements self::Settings {
+ static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
+ static factory •({self::Sidebar sidebar = #C3}) → self::_SSettings
+ return new self::_$_SSettings::•(sidebar: sidebar);
+}
+class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/ {
+ final field self::Sidebar sidebar;
+ const constructor •({self::Sidebar sidebar = #C1}) → self::_$_SSettings
+ : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
+ ;
+}
+abstract class _SSidebar extends core::Object implements self::Sidebar {
+ static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+ static factory •() → self::_SSidebar
+ return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/ {
+ const constructor •() → self::_$_SSidebar
+ : super core::Object::•()
+ ;
+}
+static method main() → void {}
+
+constants {
+ #C1 = self::_$_SSidebar {}
+ #C2 = self::Default {defaultValue:#C1}
+ #C3 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47036.dart:
+- _$_SSidebar. (from org-dartlang-testcase:///issue47036.dart:36:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Default. (from org-dartlang-testcase:///issue47036.dart:6:9)
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart
new file mode 100644
index 0000000..a51dd5e
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart
@@ -0,0 +1,114 @@
+// 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.
+
+@Const()
+library name;
+
+@Const()
+import 'redirecting_factory_invocation_metadata.dart' as self;
+
+@Const()
+export 'redirecting_factory_invocation_metadata.dart';
+
+@Const()
+part 'redirecting_factory_invocation_metadata_lib.dart';
+
+@Const()
+class Const {
+ const Const.internal();
+ const factory Const() = Const.internal;
+}
+
+@Const()
+var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+};
+
+@Const()
+method1<@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+}
+
+@Const()
+method2<@Const() T>(@Const() var o1, {@Const() var o2}) {
+ <@Const() T>(@Const() var o1, {@Const() var o2}) {};
+}
+
+class Class<@Const() T> {
+ @Const()
+ var field = <@Const() T>(@Const() var o1, {@Const() var o2}) {
+ @Const()
+ var l1;
+
+ @Const()
+ l2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+ };
+
+ @Const()
+ Class();
+
+ @Const()
+ method1<@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ }
+
+ @Const()
+ method2<@Const() T>(@Const() var o1, {@Const() var o2}) {
+ <@Const() T>(@Const() var o1, {@Const() var o2}) {};
+ }
+}
+
+@Const()
+typedef Typedef1<@Const() T> = Function<@Const() T>(@Const() Class,
+ [@Const() Class]);
+
+@Const()
+typedef Typedef2<@Const() T> = Function<@Const() T>(@Const() Class,
+ {@Const() Class o2});
+
+@Const()
+typedef void Typedef3<@Const() T>(@Const() var o1, [@Const() var o2]);
+
+@Const()
+typedef void Typedef4<@Const() T>(@Const() var o1, {@Const() var o2});
+
+@Const()
+extension Extension<@Const() T> on Class<T> {
+ @Const()
+ static var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ };
+
+ @Const()
+ method1<@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ }
+
+ @Const()
+ method2<@Const() T>(@Const() var o1, {@Const() var o2}) {
+ <@Const() T>(@Const() var o1, {@Const() var o2}) {};
+ }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline.expect
new file mode 100644
index 0000000..269a7f2
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline.expect
@@ -0,0 +1,71 @@
+@Const()
+library name;
+
+@Const()
+import 'redirecting_factory_invocation_metadata.dart' as self;
+@Const()
+export 'redirecting_factory_invocation_metadata.dart';
+@Const()
+part 'redirecting_factory_invocation_metadata_lib.dart';
+
+@Const()
+class Const {
+ const Const.internal();
+ const factory Const() = Const.internal;
+}
+
+@Const()
+var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+};
+@Const()
+method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+@Const()
+method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+
+class Class<@Const() T> {
+ @Const()
+ var field = <@Const() T>(@Const() var o1, {@Const() var o2}) {
+ @Const()
+ var l1;
+ @Const()
+ l2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+ };
+ @Const()
+ Class();
+ @Const()
+ method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ @Const()
+ method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+}
+
+@Const()
+typedef Typedef1<@Const() T> = Function<@Const() T>(@Const() Class,
+ [@Const() Class]);
+@Const()
+typedef Typedef2<@Const() T> = Function<@Const() T>(@Const() Class,
+ {@Const() Class o2});
+@Const()
+typedef void Typedef3<@Const() T>(@Const() var o1, [@Const() var o2]);
+@Const()
+typedef void Typedef4<@Const() T>(@Const() var o1, {@Const() var o2});
+
+@Const()
+extension Extension<@Const() T> on Class<T> {
+ @Const()
+ static var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ };
+ @Const()
+ method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ @Const()
+ method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4fd86e8
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.textual_outline_modelled.expect
@@ -0,0 +1,69 @@
+@Const()
+library name;
+
+@Const()
+export 'redirecting_factory_invocation_metadata.dart';
+@Const()
+import 'redirecting_factory_invocation_metadata.dart' as self;
+@Const()
+part 'redirecting_factory_invocation_metadata_lib.dart';
+
+class Class<@Const() T> {
+ @Const()
+ Class();
+ @Const()
+ method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ @Const()
+ method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+ @Const()
+ var field = <@Const() T>(@Const() var o1, {@Const() var o2}) {
+ @Const()
+ var l1;
+ @Const()
+ l2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+ };
+}
+
+@Const()
+class Const {
+ const Const.internal();
+ const factory Const() = Const.internal;
+}
+
+@Const()
+extension Extension<@Const() T> on Class<T> {
+ @Const()
+ method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ @Const()
+ method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+ @Const()
+ static var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+ };
+}
+
+main() {}
+@Const()
+method1<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+@Const()
+method2<@Const() T>(@Const() var o1, {@Const() var o2}) {}
+@Const()
+typedef Typedef1<@Const() T> = Function<@Const() T>(@Const() Class,
+ [@Const() Class]);
+@Const()
+typedef Typedef2<@Const() T> = Function<@Const() T>(@Const() Class,
+ {@Const() Class o2});
+@Const()
+typedef void Typedef3<@Const() T>(@Const() var o1, [@Const() var o2]);
+@Const()
+typedef void Typedef4<@Const() T>(@Const() var o1, {@Const() var o2});
+@Const()
+var field = <@Const() T>(@Const() var o1, [@Const() var o2]) {
+ @Const()
+ var l1;
+ @Const()
+ l2<@Const() T>(@Const() var o1, [@Const() var o2]) {}
+};
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
new file mode 100644
index 0000000..39405c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
@@ -0,0 +1,105 @@
+@#C1
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+@#C1
+part redirecting_factory_invocation_metadata_lib.dart;
+@#C1
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+@#C1
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+@#C1
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+@#C1
+typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
+@#C1
+class Const extends core::Object /*hasConstConstructor*/ {
+ static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+ const constructor internal() → self::Const
+ : super core::Object::•()
+ ;
+ static factory •() → self::Const
+ return new self::Const::internal();
+}
+class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
+ @#C1
+ field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {}
+ };
+ @#C1
+ constructor •() → self::Class<self::Class::T%>
+ : super core::Object::•()
+ ;
+ @#C1
+ method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+ }
+ @#C1
+ method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
+ <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+ }
+}
+@#C1
+extension Extension<@#C1 T extends core::Object? = dynamic> on self::Class<T%> {
+ static field field = self::Extension|field;
+ method method1 = self::Extension|method1;
+ tearoff method1 = self::Extension|get#method1;
+ method method2 = self::Extension|method2;
+ tearoff method2 = self::Extension|get#method2;
+}
+@#C1
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+};
+@#C1
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+};
+@#C1
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+}
+@#C1
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
+ <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+}
+@#C1
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+}
+static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
+ return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+@#C1
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
+ <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+}
+static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
+ return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+static method main() → dynamic {}
+
+constants {
+ #C1 = self::Const {}
+ #C2 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:
+- Const.internal (from org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:19:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
new file mode 100644
index 0000000..777c550
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
@@ -0,0 +1,101 @@
+@name::Const::internal()
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+part redirecting_factory_invocation_metadata_lib.dart;
+@self::Const::internal()
+typedef Typedef1<@self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
+@self::Const::internal()
+typedef Typedef2<@self::Const::internal() unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
+@self::Const::internal()
+typedef Typedef3<@self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
+@self::Const::internal()
+typedef Typedef4<@self::Const::internal() unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
+@self::Const::internal()
+class Const extends core::Object /*hasConstConstructor*/ {
+ static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+ const constructor internal() → self::Const
+ : super core::Object::•()
+ ;
+ static factory •() → self::Const
+ return new self::Const::internal();
+}
+class Class<@self::Const::internal() T extends core::Object? = dynamic> extends core::Object {
+ @self::Const::internal()
+ field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field;
+ @self::Const::internal()
+ constructor •() → self::Class<self::Class::T%>
+ ;
+ @self::Const::internal()
+ method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+ ;
+ @self::Const::internal()
+ method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+ ;
+}
+@self::Const::internal()
+extension Extension<@self::Const::internal() T extends core::Object? = dynamic> on self::Class<T%> {
+ static field field = self::Extension|field;
+ method method1 = self::Extension|method1;
+ tearoff method1 = self::Extension|get#method1;
+ method method2 = self::Extension|method2;
+ tearoff method2 = self::Extension|get#method2;
+}
+@self::Const::internal()
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field;
+@self::Const::internal()
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field;
+@self::Const::internal()
+static method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+ ;
+@self::Const::internal()
+static method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+ ;
+@self::Const::internal()
+static method Extension|method1<#T extends core::Object? = dynamic, @self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, dynamic o1, [dynamic o2]) → dynamic
+ ;
+static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
+ return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+@self::Const::internal()
+static method Extension|method2<#T extends core::Object? = dynamic, @self::Const::internal() T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, dynamic o1, {dynamic o2}) → dynamic
+ ;
+static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
+ return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+static method main() → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:5:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:74:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:75:19 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:78:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:79:19 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:82:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:83:24 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:85:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:86:24 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:17:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:46:14 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:56:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:59:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:60:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:68:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:69:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:47:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:89:22 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:32:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:33:10 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:41:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:42:10 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:99:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:100:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:108:4 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:109:12 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:23:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:90:4 -> InstanceConstant(const Const{})
+Extra constant evaluation: evaluated: 41, effectively constant: 28
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
new file mode 100644
index 0000000..39405c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
@@ -0,0 +1,105 @@
+@#C1
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+@#C1
+part redirecting_factory_invocation_metadata_lib.dart;
+@#C1
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+@#C1
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+@#C1
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+@#C1
+typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
+@#C1
+class Const extends core::Object /*hasConstConstructor*/ {
+ static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+ const constructor internal() → self::Const
+ : super core::Object::•()
+ ;
+ static factory •() → self::Const
+ return new self::Const::internal();
+}
+class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
+ @#C1
+ field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {}
+ };
+ @#C1
+ constructor •() → self::Class<self::Class::T%>
+ : super core::Object::•()
+ ;
+ @#C1
+ method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+ }
+ @#C1
+ method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
+ <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+ }
+}
+@#C1
+extension Extension<@#C1 T extends core::Object? = dynamic> on self::Class<T%> {
+ static field field = self::Extension|field;
+ method method1 = self::Extension|method1;
+ tearoff method1 = self::Extension|get#method1;
+ method method2 = self::Extension|method2;
+ tearoff method2 = self::Extension|get#method2;
+}
+@#C1
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+};
+@#C1
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+};
+@#C1
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+}
+@#C1
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
+ <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+}
+@#C1
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+ @#C1 dynamic l1;
+ @#C1
+ function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+}
+static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
+ return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+@#C1
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
+ <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+}
+static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
+ return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+static method main() → dynamic {}
+
+constants {
+ #C1 = self::Const {}
+ #C2 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:
+- Const.internal (from org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:19:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata_lib.dart b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata_lib.dart
new file mode 100644
index 0000000..62e121c
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata_lib.dart
@@ -0,0 +1,6 @@
+// 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.
+
+@Const()
+part of 'redirecting_factory_invocation_metadata.dart';
diff --git a/pkg/front_end/testcases/incremental.status b/pkg/front_end/testcases/incremental.status
index afed71c..1c24c9e 100644
--- a/pkg/front_end/testcases/incremental.status
+++ b/pkg/front_end/testcases/incremental.status
@@ -5,4 +5,4 @@
# Status file for the test suite ../test/incremental_suite.dart.
# http://dartbug.com/41812#issuecomment-684825703
-strongmode_mixins_2: Crash
+#strongmode_mixins_2: Crash
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml b/pkg/front_end/testcases/incremental/await_in_non_async.yaml
index 6e1730d..06c5f68 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml
@@ -10,6 +10,7 @@
warnings: false
sources:
main.dart: |
+ // @dart=2.9
main() {
foo();
}
@@ -25,6 +26,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
await foo();
}
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
index 0e7c789..1e5883c 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
@@ -3,13 +3,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+// org-dartlang-test:///main.dart:3:3: Error: 'await' can only be used in 'async' or 'async*' methods.
// await foo();
// ^^^^^
//
static method main() → dynamic {
- invalid-expression "org-dartlang-test:///main.dart:2:3: Error: 'await' can only be used in 'async' or 'async*' methods.\n await foo();\n ^^^^^";
+ invalid-expression "org-dartlang-test:///main.dart:3:3: Error: 'await' can only be used in 'async' or 'async*' methods.\n await foo();\n ^^^^^";
}
static method foo() → dynamic {}
}
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
index 2e729f2..f6870cd 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml
@@ -9,9 +9,11 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class A extends B {}
lib.dart: |
+ // @dart=2.9
class B {
void bMethod() {}
}
@@ -23,9 +25,11 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class A extends B {}
lib.dart: |
+ // @dart=2.9
class B {
void bMethod() {}
}
@@ -49,9 +53,11 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class A extends B {}
lib.dart: |
+ // @dart=2.9
class B {
void bMethod() {}
}
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
index 7ecccb5..69312e6 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
@@ -6,6 +6,7 @@
: super #lib1::Object::•()
;
method bMethod() → void {}
+ abstract member-signature operator ==(dynamic dynamic) → #lib1::bool*; -> #lib1::Object::==
}
}
library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml b/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
index f884677..a414ca1 100644
--- a/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
+++ b/pkg/front_end/testcases/incremental/calculated_bounds_no_strongmode.yaml
@@ -11,10 +11,12 @@
- a.dart
sources:
a.dart: |
+ // @dart=2.9
import 'b.dart';
class A {
void foo(B cls) {}
}
b.dart: |
+ // @dart=2.9
abstract class B<T extends String> {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml b/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml
index b877600..852223a 100644
--- a/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml
+++ b/pkg/front_end/testcases/incremental/can_get_rid_of_nnbd_issue_error.yaml
@@ -9,7 +9,6 @@
nnbdMode: strong
worlds:
- entry: package:baz/main.dart
- experiments: non-nullable
errors: true
sources:
.dart_tool/package_config.json: |
@@ -53,7 +52,6 @@
# Update "nothing" so we still want the error.
- entry: package:baz/main.dart
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
errors: true
@@ -74,7 +72,6 @@
# Update ONE package to be strong.
- entry: package:baz/main.dart
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
errors: true
@@ -111,7 +108,6 @@
# Update the last package to be strong.
- entry: package:baz/main.dart
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
errors: false
diff --git a/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml b/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
index a1cc178..6c6a9bd 100644
--- a/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental/change_between_no_nnbd_and_nnbd.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
libMethod();
@@ -20,7 +21,6 @@
expectedLibraryCount: 2
- entry: main.dart
- experiments: non-nullable
nnbdMode: strong
expectInitializeFromDill: false # loading the dill should fail because of mismatching NNBD settings
checkInvalidatedFiles: false
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
index 4141487..a4648e6 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
@@ -18,6 +19,7 @@
print(c);
}
lib.dart: |
+ // @dart=2.9
class A {
const A();
}
@@ -39,5 +41,6 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/changing_modules.yaml b/pkg/front_end/testcases/incremental/changing_modules.yaml
index 47752b2..534a0f4 100644
--- a/pkg/front_end/testcases/incremental/changing_modules.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules.yaml
@@ -9,6 +9,7 @@
modules:
example_0.1.0:
example_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -16,6 +17,7 @@
print("Hello from v0.1.0");
}
example_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
@@ -24,6 +26,7 @@
example:.
example_0.1.1:
example_0.1.1/b.dart: |
+ // @dart=2.9
b() {
print("Hello from v0.1.1");
}
@@ -32,6 +35,7 @@
example:.
foo_1:
foo_1/foo.dart: |
+ // @dart=2.9
import "package:example/b.dart";
foo() {
print("Hello from foo");
@@ -43,6 +47,7 @@
example:../example_0.1.0
foo_2:
foo_2/foo.dart: |
+ // @dart=2.9
import "package:example/b.dart";
import "bar.dart";
import "baz.dart";
@@ -54,10 +59,12 @@
}
bool foo2 = true;
foo_2/bar.dart: |
+ // @dart=2.9
bar() {
print("hello from bar");
}
foo_2/baz.dart: |
+ // @dart=2.9
baz() {
print("hello from baz");
}
@@ -69,6 +76,7 @@
fromComponent: true
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
@@ -94,6 +102,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
import "package:foo/foo.dart";
main() {
print("hello");
@@ -124,6 +133,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
import "package:foo/foo.dart";
main() {
print("hello");
diff --git a/pkg/front_end/testcases/incremental/changing_modules_10.yaml b/pkg/front_end/testcases/incremental/changing_modules_10.yaml
index c500317..1cdaafd 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_10.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_10.yaml
@@ -10,11 +10,13 @@
modules:
module:
module/a.dart: |
+ // @dart=2.9
import 'package:module/b.dart';
class A extends A2<B> { }
class A2<T> { }
module/b.dart: |
+ // @dart=2.9
class B { }
module/.packages: |
module:.
@@ -23,6 +25,7 @@
fromComponent: true
sources:
main.dart: |
+ // @dart=2.9
import 'package:module/a.dart';
class Foo extends A {}
.packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_11.yaml b/pkg/front_end/testcases/incremental/changing_modules_11.yaml
index e6d89f4..aedd5d0 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_11.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_11.yaml
@@ -10,11 +10,13 @@
modules:
module:
module/a.dart: |
+ // @dart=2.9
import 'package:module/b.dart';
class A implements A2<B> { }
class A2<T> { }
module/b.dart: |
+ // @dart=2.9
class B { }
module/.packages: |
module:.
@@ -23,6 +25,7 @@
fromComponent: true
sources:
main.dart: |
+ // @dart=2.9
import 'package:module/a.dart';
class Foo extends A {}
.packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_12.yaml b/pkg/front_end/testcases/incremental/changing_modules_12.yaml
index 21b9ec1..c8f1cae 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_12.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_12.yaml
@@ -9,15 +9,19 @@
modules:
module:
module/a.dart: |
+ // @dart=2.9
import 'package:module/b.dart';
class A { }
module/b.dart: |
+ // @dart=2.9
export 'package:module/a.dart';
class B { }
module/c.dart: |
+ // @dart=2.9
export 'package:module/d.dart';
class C { }
module/d.dart: |
+ // @dart=2.9
import 'package:module/c.dart';
class D { }
module/.packages: |
@@ -27,6 +31,7 @@
fromComponent: true
sources:
main.dart: |
+ // @dart=2.9
class Foo {}
.packages: |
module:module
diff --git a/pkg/front_end/testcases/incremental/changing_modules_13.yaml b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
index bd3bc06..5d042e9 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_13.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
@@ -9,6 +9,7 @@
modules:
module:
module/a.dart: |
+ // @dart=2.9
class A { }
class B { }
class C { }
@@ -20,6 +21,7 @@
fromComponent: true
sources:
main.dart: |
+ // @dart=2.9
import "package:module/a.dart";
class ABC = AB with C;
.packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_2.yaml b/pkg/front_end/testcases/incremental/changing_modules_2.yaml
index 201d9c0..b8db340 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_2.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_2.yaml
@@ -9,12 +9,14 @@
modules:
example_1:
example_1/a.dart: |
+ // @dart=2.9
a() {}
var example = true;
example_1/.packages: |
example:.
example_2:
example_2/a.dart: |
+ // @dart=2.9
a() {}
var example = true;
example_2/.packages: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_3.yaml b/pkg/front_end/testcases/incremental/changing_modules_3.yaml
index 16093f7..fdfb2a6 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_3.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_3.yaml
@@ -9,11 +9,13 @@
modules:
foo:
foo/foo.dart: |
+ // @dart=2.9
var foo = true;
foo/.packages: |
foo:.
foo2:
foo2/foo.dart: |
+ // @dart=2.9
var foo2 = true;
foo2/.packages: |
foo:.
@@ -23,6 +25,7 @@
simulateTransformer: true
sources:
main.dart: |
+ // @dart=2.9
import "package:foo/foo.dart";
main() {
print(foo);
@@ -47,6 +50,7 @@
simulateTransformer: true
sources:
main.dart: |
+ // @dart=2.9
import "package:foo/foo.dart";
main() {
print(foo2);
diff --git a/pkg/front_end/testcases/incremental/changing_modules_4.yaml b/pkg/front_end/testcases/incremental/changing_modules_4.yaml
index d19784b..98ba2fa 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_4.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_4.yaml
@@ -10,6 +10,7 @@
modules:
moduleB:
moduleB/b.dart: |
+ // @dart=2.9
import 'package:moduleC/c.dart';
export 'package:moduleC/c.dart' show baz;
@@ -24,6 +25,7 @@
moduleD:../moduleD
moduleC:
moduleC/c.dart: |
+ // @dart=2.9
import 'package:moduleD/d.dart';
String baz = "42";
@@ -37,6 +39,7 @@
moduleD:../moduleD
moduleD:
moduleD/d.dart: |
+ // @dart=2.9
String baz3 = "baz3";
moduleD/.packages: |
moduleD:.
@@ -45,6 +48,7 @@
fromComponent: true
sources:
a.dart: |
+ // @dart=2.9
import "package:moduleB/b.dart";
String foo = baz;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_5.yaml b/pkg/front_end/testcases/incremental/changing_modules_5.yaml
index 02e89d3..b044f03 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_5.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_5.yaml
@@ -10,6 +10,7 @@
modules:
moduleB:
moduleB/b.dart: |
+ // @dart=2.9
import 'package:moduleC/c.dart';
var bVar = 42;
@@ -25,6 +26,7 @@
moduleD:../moduleD
moduleC:
moduleC/c.dart: |
+ // @dart=2.9
import 'package:moduleD/d.dart';
String baz = "42";
@@ -38,6 +40,7 @@
moduleD:../moduleD
moduleD:
moduleD/d.dart: |
+ // @dart=2.9
String baz3 = "baz3";
moduleD/.packages: |
moduleD:.
@@ -46,6 +49,7 @@
fromComponent: true
sources:
a.dart: |
+ // @dart=2.9
import "package:moduleB/b.dart";
var foo = bVar;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_6.yaml b/pkg/front_end/testcases/incremental/changing_modules_6.yaml
index 84cb4d7..c66ca3b 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_6.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_6.yaml
@@ -10,6 +10,7 @@
modules:
moduleB:
moduleB/b.dart: |
+ // @dart=2.9
import 'package:moduleC/c.dart';
var bVar = 42;
@@ -25,6 +26,7 @@
moduleD:../moduleD
moduleC:
moduleC/c.dart: |
+ // @dart=2.9
import 'package:moduleD/d.dart';
String baz = "42";
@@ -38,6 +40,7 @@
moduleD:../moduleD
moduleD:
moduleD/d.dart: |
+ // @dart=2.9
String baz3 = "baz3";
moduleD/.packages: |
moduleD:.
@@ -46,6 +49,7 @@
fromComponent: true
sources:
a.dart: |
+ // @dart=2.9
import "package:moduleB/b.dart";
var foo = bVar;
diff --git a/pkg/front_end/testcases/incremental/changing_modules_7.yaml b/pkg/front_end/testcases/incremental/changing_modules_7.yaml
index ed58e9d..f718f14 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_7.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_7.yaml
@@ -10,12 +10,14 @@
modules:
module:
module/lib1.dart: |
+ // @dart=2.9
import 'lib3.dart';
class Class1 {
Class3a get c3a {}
}
module/lib2.dart: |
+ // @dart=2.9
import 'lib4.dart';
class Class2 {
@@ -25,6 +27,7 @@
}
}
module/lib3.dart: |
+ // @dart=2.9
class Class3a {
Class3b get c3b {}
}
@@ -41,6 +44,7 @@
fromComponent: true
sources:
compileme.dart: |
+ // @dart=2.9
import 'package:module/lib1.dart';
import 'package:module/lib2.dart';
@@ -85,6 +89,7 @@
skipOutlineBodyCheck: true
sources:
compileme.dart: |
+ // @dart=2.9
import 'package:module/lib1.dart';
import 'package:module/lib2.dart';
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml b/pkg/front_end/testcases/incremental/changing_modules_8.yaml
index 2e2d653..42de9b4 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml
@@ -10,12 +10,14 @@
modules:
module:
module/lib1.dart: |
+ // @dart=2.9
import 'lib2.dart';
abstract class XSet {
factory XSet.identity() = XLinkedHashSet.identity;
}
module/lib2.dart: |
+ // @dart=2.9
import 'lib1.dart';
import 'lib3.dart';
@@ -23,6 +25,7 @@
factory XLinkedHashSet.identity() = XIdentityHashSet;
}
module/lib3.dart: |
+ // @dart=2.9
import 'lib2.dart';
class XIdentityHashSet implements XLinkedHashSet {
@@ -35,6 +38,7 @@
fromComponent: true
sources:
compileme.dart: |
+ // @dart=2.9
import 'package:module/lib1.dart';
main() {
diff --git a/pkg/front_end/testcases/incremental/changing_modules_9.yaml b/pkg/front_end/testcases/incremental/changing_modules_9.yaml
index c810617..85ef80a 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_9.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_9.yaml
@@ -10,6 +10,7 @@
modules:
moduleA:
moduleA/a.dart: |
+ // @dart=2.9
export 'package:moduleB/b.dart';
class A { }
@@ -18,6 +19,7 @@
moduleB:../moduleB
moduleB:
moduleB/b.dart: |
+ // @dart=2.9
class B {
int foo = 42;
}
@@ -28,6 +30,7 @@
fromComponent: true
sources:
main.dart: |
+ // @dart=2.9
import "package:moduleA/a.dart";
main() {
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
index e8a3d25..57c1a4c 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_part.yaml
@@ -11,14 +11,17 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() { b(); }
b.dart: |
+ // @dart=2.9
part 'c.dart';
b() {
c();
}
c.dart: |
+ // @dart=2.9
part of 'b.dart';
c() {}
expectedLibraryCount: 2
@@ -29,6 +32,7 @@
expectInitializeFromDill: false
sources:
b.dart: |
+ // @dart=2.9
b() {}
expectedLibraryCount: 2
uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
index 7d5d86d..ba49b68 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_non_package_unreferenced_libraries.yaml
@@ -11,14 +11,17 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() { b(); }
b.dart: |
+ // @dart=2.9
part 'c.dart';
b() {
c();
}
c.dart: |
+ // @dart=2.9
part of 'b.dart';
c() {}
expectedLibraryCount: 2
@@ -29,6 +32,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
main() {}
expectedLibraryCount: 1
uriToSourcesDoesntInclude:
@@ -41,6 +45,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
main() {}
expectedLibraryCount: 1
uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml b/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
index adee8ad..4e07d25 100644
--- a/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
+++ b/pkg/front_end/testcases/incremental/cleans_up_uritosource_unreferenced_package_library.yaml
@@ -13,9 +13,11 @@
sources:
.packages: example:pkg/example
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() { b(); }
pkg/example/b.dart: |
+ // @dart=2.9
b() {}
expectedLibraryCount: 2
- entry: main.dart
@@ -27,6 +29,7 @@
sources:
.packages:
main.dart: |
+ // @dart=2.9
main() {}
expectedLibraryCount: 1
uriToSourcesDoesntInclude:
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
index ae08c58..fe79e16 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml
@@ -11,16 +11,19 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
export "lib1.dart" show x;
export "lib2.dart" show x;
main() {
print("exports");
}
lib1.dart: |
+ // @dart=2.9
x() {
print("lib1.x!");
}
lib2.dart: |
+ // @dart=2.9
x() {
print("lib2.x!");
}
@@ -32,16 +35,19 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
export "lib1.dart" show x;
export "lib2.dart" show x;
main() {
print("exports!");
}
lib1.dart: |
+ // @dart=2.9
x() {
print("lib1.x!");
}
lib2.dart: |
+ // @dart=2.9
x() {
print("lib2.x!");
}
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
index 1e025c7..d263cde3 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.1.expect
@@ -15,7 +15,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
// export "lib2.dart" show x;
// ^
//
diff --git a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
index 79292ff..f84cb36 100644
--- a/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/constant_exports_hash.yaml.world.2.expect
@@ -15,7 +15,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
// export "lib2.dart" show x;
// ^
//
diff --git a/pkg/front_end/testcases/incremental/constant_set_literal.yaml b/pkg/front_end/testcases/incremental/constant_set_literal.yaml
index d8ddd8d..b58f969 100644
--- a/pkg/front_end/testcases/incremental/constant_set_literal.yaml
+++ b/pkg/front_end/testcases/incremental/constant_set_literal.yaml
@@ -9,6 +9,7 @@
- entry: "main.dart"
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
const Set<String> foo = {};
@@ -17,6 +18,7 @@
print(bar);
}
lib.dart: |
+ // @dart=2.9
const Set<String> bar = {"hello", "world"};
expectedLibraryCount: 2
- entry: "main.dart"
@@ -26,5 +28,6 @@
- lib.dart
sources:
lib.dart: |
+ // @dart=2.9
const Set<int> bar = {42};
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/crash_01.yaml b/pkg/front_end/testcases/incremental/crash_01.yaml
index d8c9c08..9663d9a 100644
--- a/pkg/front_end/testcases/incremental/crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/crash_01.yaml
@@ -22,6 +22,7 @@
]
}
app/main.dart: |
+ // @dart=2.9
import "package:flutter/src/cupertino/interface_level.dart";
flutter/src/widgets/framework.dart: |
abstract class Widget {}
diff --git a/pkg/front_end/testcases/incremental/crash_02.yaml b/pkg/front_end/testcases/incremental/crash_02.yaml
index 7a10c94..38115cb 100644
--- a/pkg/front_end/testcases/incremental/crash_02.yaml
+++ b/pkg/front_end/testcases/incremental/crash_02.yaml
@@ -22,6 +22,7 @@
]
}
app/main.dart: |
+ // @dart=2.9
import "package:flutter/src/widgets/framework.dart";
flutter/src/widgets/framework.dart: |
import "package:flutter/src/widgets/widget_inspector.dart";
diff --git a/pkg/front_end/testcases/incremental/crash_03.yaml b/pkg/front_end/testcases/incremental/crash_03.yaml
index 4d1be72..7e1e066 100644
--- a/pkg/front_end/testcases/incremental/crash_03.yaml
+++ b/pkg/front_end/testcases/incremental/crash_03.yaml
@@ -22,6 +22,7 @@
]
}
app/main.dart: |
+ // @dart=2.9
import "package:flutter/src/widgets/framework.dart";
flutter/src/widgets/framework.dart: |
abstract class Widget {}
diff --git a/pkg/front_end/testcases/incremental/crash_05.yaml b/pkg/front_end/testcases/incremental/crash_05.yaml
index 58d324b..2af2d9b 100644
--- a/pkg/front_end/testcases/incremental/crash_05.yaml
+++ b/pkg/front_end/testcases/incremental/crash_05.yaml
@@ -7,7 +7,6 @@
type: newworld
worlds:
- entry: main.dart
- experiments: non-nullable
sources:
main.dart: |
import 'dart:ffi';
@@ -24,7 +23,6 @@
expectedLibraryCount: 2
- entry: main.dart
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/crash_06.yaml b/pkg/front_end/testcases/incremental/crash_06.yaml
index 1c46cb0..fa5751e 100644
--- a/pkg/front_end/testcases/incremental/crash_06.yaml
+++ b/pkg/front_end/testcases/incremental/crash_06.yaml
@@ -8,7 +8,6 @@
worlds:
- entry: structs.dart
errors: true
- experiments: non-nullable
sources:
structs.dart: |
import 'dart:ffi';
@@ -22,7 +21,6 @@
- entry: structs.dart
errors: true
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/crash_07.yaml b/pkg/front_end/testcases/incremental/crash_07.yaml
index ed141b7..cfb8245 100644
--- a/pkg/front_end/testcases/incremental/crash_07.yaml
+++ b/pkg/front_end/testcases/incremental/crash_07.yaml
@@ -10,10 +10,12 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
import 'nonexistingfile.dart';
class A implements B {}
lib.dart: |
+ // @dart=2.9
class B implements C<NonExistingClass> {}
class C<E> {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
index 9464e91..299f150 100644
--- a/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_07.yaml.world.1.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:1:22: Error: Type 'NonExistingClass' not found.
+// org-dartlang-test:///lib.dart:2:22: Error: Type 'NonExistingClass' not found.
// class B implements C<NonExistingClass> {}
// ^^^^^^^^^^^^^^^^
//
@@ -64,7 +64,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexistingfile.dart': File org-dartlang-test:///nonexistingfile.dart does not exist.
+// org-dartlang-test:///main.dart:3:8: Error: Error when reading 'org-dartlang-test:///nonexistingfile.dart': File org-dartlang-test:///nonexistingfile.dart does not exist.
// import 'nonexistingfile.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml b/pkg/front_end/testcases/incremental/crash_test_1.yaml
index 1b66228..5a7785c 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml
@@ -9,11 +9,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
void main() {
var c = new C.e4();
}
lib.dart: |
+ // @dart=2.9
class C {
C();
factory C.e4() async = C;
@@ -25,12 +27,14 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
void main() {
var c = new C.e4();
print(c);
}
lib.dart: |
+ // @dart=2.9
class C {
C();
factory C.e4() async = C;
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
index 71134e0..938df3f 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:3:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
+// org-dartlang-test:///lib.dart:4:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
// factory C.e4() async = C;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
index 9a40608..991ad94 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:3:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
+// org-dartlang-test:///lib.dart:4:18: Error: Factory bodies can't use 'async', 'async*', or 'sync*'.
// factory C.e4() async = C;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml b/pkg/front_end/testcases/incremental/dart2js_late.yaml
index d7d761c..c596da3 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml
@@ -9,7 +9,6 @@
target: dart2js
worlds:
- entry: late_statics.dart
- experiments: non-nullable
sources:
late_statics.dart: |
import 'late_statics_lib.dart' as lib;
@@ -25,7 +24,6 @@
- entry: late_statics.dart
worldType: updated
errors: true # (currently?) dart2js changes the interface and doesn't have the setter anymore. dartbug.com/45854
- experiments: non-nullable
expectInitializeFromDill: false
invalidate:
- late_statics.dart
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml b/pkg/front_end/testcases/incremental/deleting_file.yaml
index dea1937..bafc4b3 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml
@@ -11,12 +11,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("Hello no. 0");
b();
}
b.dart: |
+ // @dart=2.9
b() {
print("b");
}
@@ -27,6 +29,7 @@
- b.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("Hello no. 0");
@@ -41,6 +44,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("Hello no. 1");
@@ -55,6 +59,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("Hello no. 1");
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
index 65c08c4c..a1988d3 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.2.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
// import "b.dart";
// ^
//
@@ -13,7 +13,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
// b();
// ^
//
@@ -22,6 +22,6 @@
static method main() → dynamic {
dart.core::print("Hello no. 0");
- invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n b();\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n b();\n ^";
}
}
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
index 2fff4ef..8e795d4 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.3.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
// import "b.dart";
// ^
//
@@ -13,7 +13,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
// b();
// ^
//
@@ -22,6 +22,6 @@
static method main() → dynamic {
dart.core::print("Hello no. 1");
- invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n b();\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n b();\n ^";
}
}
diff --git a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
index 2fff4ef..8e795d4 100644
--- a/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/deleting_file.yaml.world.4.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
+// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///b.dart': File org-dartlang-test:///b.dart does not exist.
// import "b.dart";
// ^
//
@@ -13,7 +13,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
// b();
// ^
//
@@ -22,6 +22,6 @@
static method main() → dynamic {
dart.core::print("Hello no. 1");
- invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n b();\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n b();\n ^";
}
}
diff --git a/pkg/front_end/testcases/incremental/disappearing_library.yaml b/pkg/front_end/testcases/incremental/disappearing_library.yaml
index 75a951b..c04715d 100644
--- a/pkg/front_end/testcases/incremental/disappearing_library.yaml
+++ b/pkg/front_end/testcases/incremental/disappearing_library.yaml
@@ -12,6 +12,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
library mainLibrary;
import "b.dart" as b;
@@ -19,6 +20,7 @@
b.foo();
}
b.dart: |
+ // @dart=2.9
library bLibrary;
foo() {
@@ -31,6 +33,7 @@
- b.dart
sources:
b.dart: |
+ // @dart=2.9
library bLibrary;
main() {
diff --git a/pkg/front_end/testcases/incremental/disappearing_package.yaml b/pkg/front_end/testcases/incremental/disappearing_package.yaml
index 4790a02..fe8d157 100644
--- a/pkg/front_end/testcases/incremental/disappearing_package.yaml
+++ b/pkg/front_end/testcases/incremental/disappearing_package.yaml
@@ -12,12 +12,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
b() {
print("b");
}
@@ -31,6 +33,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
main() {
print("hello");
}
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
index f5ac43a..7fd5bb5 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
}
.packages: untitled:/
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
index 828f103..230ec11 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
asdf;
}
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
index c3623d7..055bb06 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_main_with_errors.yaml.world.1.expect
@@ -8,12 +8,12 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:3: Error: Undefined name 'asdf'.
+// org-dartlang-test:///main.dart:3:3: Error: Undefined name 'asdf'.
// asdf;
// ^^^^
//
static method main() → dynamic {
- invalid-expression "org-dartlang-test:///main.dart:2:3: Error: Undefined name 'asdf'.\n asdf;\n ^^^^";
+ invalid-expression "org-dartlang-test:///main.dart:3:3: Error: Undefined name 'asdf'.\n asdf;\n ^^^^";
}
}
diff --git a/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml b/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
index fd5d0d5..e6e0487 100644
--- a/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
+++ b/pkg/front_end/testcases/incremental/entry_not_package_url_no_main.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
notMain() {}
.packages: untitled:/
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
index d97a711..6557fc6 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
@@ -19,6 +19,7 @@
]
}
main.dart: |
+ // @dart=2.9
import 'package:flutter/object.dart';
import 'lib.dart';
@@ -31,6 +32,7 @@
}
}
lib.dart: |
+ // @dart=2.9
import 'package:flutter/object.dart';
mixin LibMixin on RenderObject {}
flutter/object.dart: |
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
index 87f87b1..6e0e5c8 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
@@ -19,6 +19,7 @@
]
}
main.dart: |
+ // @dart=2.9
import 'package:flutter/object.dart';
import 'lib1.dart';
@@ -29,10 +30,12 @@
}
}
lib1.dart: |
+ // @dart=2.9
import 'package:flutter/object.dart';
import 'lib2.dart';
abstract class Adaptor extends RenderFoo with LibMixin {}
lib2.dart: |
+ // @dart=2.9
import 'package:flutter/object.dart';
mixin LibMixin on RenderObject {}
flutter/object.dart: |
diff --git a/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml b/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml
index 7b083ef..df964e7 100644
--- a/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml
+++ b/pkg/front_end/testcases/incremental/experiments_enabled_1.yaml
@@ -8,7 +8,7 @@
type: newworld
worlds:
- entry: main.dart
- experiments: triple-shift,non-nullable
+ experiments: triple-shift
sources:
main.dart: |
main() {
diff --git a/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml b/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
index 51073a5..9576219 100644
--- a/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
+++ b/pkg/front_end/testcases/incremental/expression_calculation_with_error.yaml
@@ -13,6 +13,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("hello");
}
diff --git a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
index 13a6a2e..0ecdf8e 100644
--- a/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
+++ b/pkg/front_end/testcases/incremental/extension_expression_compilation_usage.yaml
@@ -9,6 +9,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
extension NumberParsing on String {
int parseInt() {
return int.parse(this);
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
index 21d2963..62cacea 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml
@@ -14,6 +14,7 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart" as p;
main() {
@@ -21,10 +22,12 @@
o.onObject;
}
lib1.dart: |
+ // @dart=2.9
extension OnObject on Object {
String get onObject => "object #1";
}
lib2.dart: |
+ // @dart=2.9
extension AlsoOnObject on Object {
String get onObject => "object #2";
}
@@ -37,6 +40,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib1.dart" as p;
main() {
@@ -53,6 +57,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart" as p;
main() {
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
index ecab5fd..d04e859 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.1.expect
@@ -19,15 +19,15 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
+// org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
// - 'Object' is from 'dart:core'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
// o.onObject;
// ^^^^^^^^
-// org-dartlang-test:///lib1.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib1.dart:3:14: Context: This is one of the extension members.
// String get onObject => "object #1";
// ^^^^^^^^
-// org-dartlang-test:///lib2.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib2.dart:3:14: Context: This is one of the extension members.
// String get onObject => "object #2";
// ^^^^^^^^
//
@@ -37,6 +37,6 @@
static method main() → dynamic {
dart.core::Object* o = 1;
- invalid-expression "org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n o.onObject;\n ^^^^^^^^" in o{<unresolved>}.onObject;
+ invalid-expression "org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n o.onObject;\n ^^^^^^^^" in o{<unresolved>}.onObject;
}
}
diff --git a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
index ecab5fd..d04e859 100644
--- a/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/extension_prefix_double_import_then_conflict.yaml.world.3.expect
@@ -19,15 +19,15 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
+// org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
// - 'Object' is from 'dart:core'.
// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
// o.onObject;
// ^^^^^^^^
-// org-dartlang-test:///lib1.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib1.dart:3:14: Context: This is one of the extension members.
// String get onObject => "object #1";
// ^^^^^^^^
-// org-dartlang-test:///lib2.dart:2:14: Context: This is one of the extension members.
+// org-dartlang-test:///lib2.dart:3:14: Context: This is one of the extension members.
// String get onObject => "object #2";
// ^^^^^^^^
//
@@ -37,6 +37,6 @@
static method main() → dynamic {
dart.core::Object* o = 1;
- invalid-expression "org-dartlang-test:///main.dart:5:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n o.onObject;\n ^^^^^^^^" in o{<unresolved>}.onObject;
+ invalid-expression "org-dartlang-test:///main.dart:6:5: Error: The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.\n - 'Object' is from 'dart:core'.\nTry using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.\n o.onObject;\n ^^^^^^^^" in o{<unresolved>}.onObject;
}
}
diff --git a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
index fb17878..78a3218 100644
--- a/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
+++ b/pkg/front_end/testcases/incremental/extension_usage_from_dill.yaml
@@ -9,6 +9,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart";
import "lib3.dart";
@@ -18,18 +19,21 @@
"42".fooMe2();
}
lib1.dart: |
+ // @dart=2.9
extension NumberParsing on String {
int parseInt() {
return int.parse(this);
}
}
lib2.dart: |
+ // @dart=2.9
extension DuplicateName on String {
String fooMe1() {
return "Foo1";
}
}
lib3.dart: |
+ // @dart=2.9
extension DuplicateName on String {
String fooMe2() {
return "Foo2";
@@ -54,6 +58,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart";
import "lib3.dart";
@@ -63,18 +68,21 @@
"42".fooMe2();
}
lib1.dart: |
+ // @dart=2.9
extension NumberParsing on String {
int parseInt() {
return int.parse(this);
}
}
lib2.dart: |
+ // @dart=2.9
extension DuplicateName on String {
String fooMe1() {
return "Foo1";
}
}
lib3.dart: |
+ // @dart=2.9
extension DuplicateName on String {
String fooMe2() {
return "Foo2";
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml b/pkg/front_end/testcases/incremental/ffi_01.yaml
index 601d153..2c40646 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml
@@ -9,6 +9,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
@@ -18,6 +19,7 @@
print(coordinate.next);
}
lib.dart: |
+ // @dart=2.9
import 'dart:ffi';
class Coordinate extends Struct {
@@ -41,6 +43,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml b/pkg/front_end/testcases/incremental/ffi_02.yaml
index be678ed..19d30a0 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml
@@ -10,6 +10,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
Coordinate coordinate;
@@ -21,6 +22,7 @@
print(coordinate.next);
}
lib.dart: |
+ // @dart=2.9
import 'dart:ffi';
class Coordinate extends Struct {
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
index 60fdac4..6df844e 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
@@ -13,6 +13,7 @@
skipClassHierarchyTest: true
sources:
main.dart: |
+ // @dart=2.9
import 'package:flutter/framework.dart';
import 'after_layout.dart';
class _HotReloadIssueState extends State<HotReloadIssue>
@@ -22,7 +23,8 @@
}
class HotReloadIssue extends StatefulWidget {}
- after_layout.dart:
+ after_layout.dart: |
+ // @dart=2.9
import 'package:flutter/framework.dart';
mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {}
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
index 1e22f39..3ee21e2 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml
@@ -9,6 +9,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class Test extends Test2 {
@@ -19,6 +20,7 @@
Baz world();
}
lib.dart: |
+ // @dart=2.9
class FooEntry {}
class BarEntry extends FooEntry {}
@@ -46,6 +48,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class Test extends Test2 {
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
index 3e3b988..0072fcb 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
@@ -9,15 +9,18 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/widget_inspector.dart';
class Foo extends Widget {}
flutter/lib/src/widgets/framework.dart: |
+ // @dart=2.9
abstract class Bar {}
abstract class Widget extends Bar {}
flutter/lib/src/widgets/widget_inspector.dart: |
+ // @dart=2.9
abstract class _HasCreationLocation {
_Location get _location;
}
@@ -58,6 +61,7 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/widget_inspector.dart';
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
index a583a95..95b124a 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
@@ -7,7 +7,6 @@
trackWidgetCreation: true
worlds:
- entry: main.dart
- experiments: non-nullable
sources:
main.dart: |
import 'foo.dart';
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
index ccf7702..6bb2b2b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
@@ -7,7 +7,6 @@
trackWidgetCreation: true
worlds:
- entry: main.dart
- experiments: non-nullable
sources:
main.dart: |
import 'foo.dart';
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
index 0813f0a..1853f91 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
@@ -7,7 +7,6 @@
trackWidgetCreation: true
worlds:
- entry: main.dart
- experiments: non-nullable
sources:
main.dart: |
// @dart=2.8
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
index 4f4309f..0c8de3b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
@@ -7,7 +7,6 @@
trackWidgetCreation: true
worlds:
- entry: main.dart
- experiments: non-nullable
sources:
main.dart: |
import 'foo.dart';
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
index 6c859f5..fa1166f 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_1.yaml
@@ -10,6 +10,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "dart:core";
import "package:package2/lib2.dart";
import "package:package2/lib3.dart";
@@ -17,15 +18,18 @@
lib2();
lib3();
}
- package1/lib1.dart:
+ package1/lib1.dart: |
+ // @dart=2.9
lib1() {
return 42;
}
- package2/lib2.dart:
+ package2/lib2.dart: |
+ // @dart=2.9
lib2() {
return 42;
}
- package2/lib3.dart:
+ package2/lib3.dart: |
+ // @dart=2.9
import "package:package1/lib1.dart";
lib3() {
return lib1();
@@ -42,6 +46,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:package1/lib1.dart";
main() {
lib1();
@@ -59,6 +64,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:package2/lib2.dart";
main() {
lib2();
@@ -74,11 +80,13 @@
- package:package1/lib1.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:package2/lib2.dart";
main() {
lib2();
}
- package1/lib1.dart:
+ package1/lib1.dart: |
+ // @dart=2.9
lib1_1() {
return 42;
}
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
index 9a0feaf..997b737 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_2.yaml
@@ -10,7 +10,8 @@
worlds:
- entry: main.dart
sources:
- main.dart:
+ main.dart: |
+ // @dart=2.9
import "package:package1/lib1.dart";
import "package:package1/lib2.dart";
import "package:package1/lib3.dart";
@@ -19,15 +20,18 @@
lib2();
lib3();
}
- package1/lib1.dart:
+ package1/lib1.dart: |
+ // @dart=2.9
lib1() {
return 42;
}
- package1/lib2.dart:
+ package1/lib2.dart: |
+ // @dart=2.9
lib2() {
return 42;
}
- package1/lib3.dart:
+ package1/lib3.dart: |
+ // @dart=2.9
import "package:package1/lib1.dart";
lib3() {
return lib1();
@@ -42,7 +46,8 @@
invalidate:
- package:package1/lib3.dart
sources:
- package1/lib3.dart:
+ package1/lib3.dart: |
+ // @dart=2.9
import "package:package1/lib1.dart";
lib3() {
return lib3_1();
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
index 7801796..775b322 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_3.yaml
@@ -13,18 +13,21 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "dart:core";
import "package:package1/lib1_a.dart";
main() {
lib1();
}
- package1/lib1_a.dart:
+ package1/lib1_a.dart: |
+ // @dart=2.9
import "package:package3/lib3.dart" as lib3;
export "lib1_b.dart";
lib1a() {
lib3.lib3();
}
- package1/lib1_b.dart:
+ package1/lib1_b.dart: |
+ // @dart=2.9
import "package:package2/lib2.dart" as lib2;
lib1() {
return la(null);
@@ -32,12 +35,14 @@
la(lib2.Foo f) {
return 42;
}
- package2/lib2.dart:
+ package2/lib2.dart: |
+ // @dart=2.9
int f = 42;
class Foo {
static int y = 42;
}
- package3/lib3.dart:
+ package3/lib3.dart: |
+ // @dart=2.9
lib3() {
print("lib3");
}
@@ -51,18 +56,21 @@
expectInitializeFromDill: true
sources:
main.dart: |
+ // @dart=2.9
import "dart:core";
import "package:package1/lib1_a.dart";
main() {
lib1();
}
- package1/lib1_a.dart:
+ package1/lib1_a.dart: |
+ // @dart=2.9
import "package:package3/lib3.dart" as lib3;
export "lib1_b.dart";
lib1a() {
lib3.lib3();
}
- package1/lib1_b.dart:
+ package1/lib1_b.dart: |
+ // @dart=2.9
import "package:package2/lib2.dart" as lib2;
lib1() {
return la(null);
@@ -70,12 +78,14 @@
la(lib2.Foo f) {
return 42;
}
- package2/lib2.dart:
+ package2/lib2.dart: |
+ // @dart=2.9
int f = 42;
class Foo {
static int y = 42;
}
- package3/lib3.dart:
+ package3/lib3.dart: |
+ // @dart=2.9
lib3() {
print("lib3");
}
diff --git a/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml b/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
index 5f87a50..a9c75d5 100644
--- a/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
+++ b/pkg/front_end/testcases/incremental/incremental_serialization_4.yaml
@@ -13,13 +13,15 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:package1/p1.dart";
import "package:package2/p2.dart";
main() {
p1();
p2();
}
- package1/p1.dart:
+ package1/p1.dart: |
+ // @dart=2.9
p1() {
print("Package 1");
p1_v1_Only();
@@ -27,7 +29,8 @@
p1_v1_Only() {
print("Package 1 v1 only!");
}
- package1v2/p1.dart:
+ package1v2/p1.dart: |
+ // @dart=2.9
p1() {
print("Package 1 v2");
p1_v2_Only();
@@ -35,7 +38,8 @@
p1_v2_Only() {
print("Package 1 v2 only!");
}
- package2/p2.dart:
+ package2/p2.dart: |
+ // @dart=2.9
import "package:package1/p1.dart";
p2() {
p1();
@@ -50,13 +54,15 @@
expectInitializeFromDill: false # .packages changed
sources:
main.dart: |
+ // @dart=2.9
import "package:package1/p1.dart";
import "package:package2/p2.dart";
main() {
p1();
p2();
}
- package1/p1.dart:
+ package1/p1.dart: |
+ // @dart=2.9
p1() {
print("Package 1");
p1_v1_Only();
@@ -64,7 +70,8 @@
p1_v1_Only() {
print("Package 1 v1 only!");
}
- package1v2/p1.dart:
+ package1v2/p1.dart: |
+ // @dart=2.9
p1() {
print("Package 1 v2");
p1_v2_Only();
@@ -72,7 +79,8 @@
p1_v2_Only() {
print("Package 1 v2 only!");
}
- package2/p2.dart:
+ package2/p2.dart: |
+ // @dart=2.9
import "package:package1/p1.dart";
p2() {
p1();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
index 2efee99..f2414e8 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
+++ b/pkg/front_end/testcases/incremental/initialize_with_file_then_use_type.yaml
@@ -13,12 +13,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "foo.dart";
main() {
Foo foo = new Foo();
foo.foo();
}
foo.dart: |
+ // @dart=2.9
class Foo {
foo() {
print("Foo!");
@@ -30,10 +32,12 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("hello from main");
}
foo.dart: |
+ // @dart=2.9
class Foo {
foo() {
print("Foo!");
@@ -47,6 +51,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "foo.dart";
main() {
Foo foo = new Foo();
diff --git a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
index e34eff2..6460d79 100644
--- a/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
+++ b/pkg/front_end/testcases/incremental/initialize_with_unused_package_then_use_type.yaml
@@ -14,12 +14,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:mypackage/foo.dart";
main() {
Foo foo = new Foo();
foo.foo();
}
mypackage/foo.dart: |
+ // @dart=2.9
class Foo {
foo() {
print("Foo!");
@@ -32,10 +34,12 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("hello from main");
}
mypackage/foo.dart: |
+ // @dart=2.9
class Foo {
foo() {
print("Foo!");
@@ -50,6 +54,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:mypackage/foo.dart";
main() {
Foo foo = new Foo();
diff --git a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
index 2620942c..fd9154f 100644
--- a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
+++ b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml
@@ -9,6 +9,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
// The space makes the scheme invalid -- this causes Uri.parse to throw.
part ' package:foo/bar.dart';
expectedLibraryCount: 1
@@ -21,6 +22,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {}
expectInitializeFromDill: false
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
index 8763205..2b1004b 100644
--- a/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/invalid_part_uri_01.yaml.world.1.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:3:6: Error: Expected a URI.
// part ' package:foo/bar.dart';
// ^
//
@@ -13,7 +13,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:7: Error: Couldn't parse URI ' package:foo/bar.dart':
+// org-dartlang-test:///main.dart:3:7: Error: Couldn't parse URI ' package:foo/bar.dart':
// Scheme not starting with alphabetic character.
// part ' package:foo/bar.dart';
// ^
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
index a77a588..0ee68fc 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml
@@ -8,6 +8,7 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
part '$foo';
main() {}
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
index 144eef3..1184909 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.1.expect
@@ -1,9 +1,9 @@
main = main::main;
-library from "org-dartlang-malformed-uri:bad5" as bad5 {
+library from "org-dartlang-malformed-uri:bad18" as bad {
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
// part '$foo';
// ^
//
@@ -13,11 +13,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:7: Error: Can't use string interpolation in a URI.
+// org-dartlang-test:///main.dart:2:7: Error: Can't use string interpolation in a URI.
// part '$foo';
// ^
//
- part org-dartlang-malformed-uri:bad5;
+ part org-dartlang-malformed-uri:bad18;
static method main() → dynamic {}
}
diff --git a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
index 144eef3..1184909 100644
--- a/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/invalid_uri_as_part.yaml.world.2.expect
@@ -1,9 +1,9 @@
main = main::main;
-library from "org-dartlang-malformed-uri:bad5" as bad5 {
+library from "org-dartlang-malformed-uri:bad18" as bad {
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Expected a URI.
+// org-dartlang-test:///main.dart:2:6: Error: Expected a URI.
// part '$foo';
// ^
//
@@ -13,11 +13,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:7: Error: Can't use string interpolation in a URI.
+// org-dartlang-test:///main.dart:2:7: Error: Can't use string interpolation in a URI.
// part '$foo';
// ^
//
- part org-dartlang-malformed-uri:bad5;
+ part org-dartlang-malformed-uri:bad18;
static method main() → dynamic {}
}
diff --git a/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml b/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
index 768fd3c..eee5b6c 100644
--- a/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_export_of_main.yaml
@@ -10,6 +10,8 @@
- a.dart
sources:
a.dart: |
+ // @dart=2.9
export 'b.dart';
b.dart: |
+ // @dart=2.9
main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
index da20971..7fee6d0 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part.yaml
@@ -10,12 +10,14 @@
- entry: "package:example/main.dart"
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b1");
@@ -29,12 +31,14 @@
- "package:example/b.dart"
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b2");
@@ -48,12 +52,14 @@
- "package:example/b.dart"
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b3");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
index 47a379d..2e63311 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_2.yaml
@@ -9,12 +9,14 @@
- entry: "package:example/main.dart"
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b1");
@@ -30,6 +32,7 @@
- "package:example/b.dart"
sources:
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b2");
@@ -45,6 +48,7 @@
- "package:example/b.dart"
sources:
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b3");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
index 60327f4..4e2cd4d 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_as_file.yaml
@@ -10,12 +10,14 @@
- pkg/example/b.dart
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
index ccbe383..68e2d37 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_as_package.yaml
@@ -10,12 +10,14 @@
- "package:example/b.dart"
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "main.dart";
b() {
print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
index 15d82ee..ee36914 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_file.yaml
@@ -11,12 +11,14 @@
- pkg/example/b.dart
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "package:example/b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "package:example/main.dart";
b() {
print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
index 2bb9c88..5af601b 100644
--- a/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/invalidate_package_part_from_package_url_as_package.yaml
@@ -11,12 +11,14 @@
- "package:example/b.dart"
sources:
pkg/example/main.dart: |
+ // @dart=2.9
part "package:example/b.dart";
main() {
print("hello");
b();
}
pkg/example/b.dart: |
+ // @dart=2.9
part of "package:example/main.dart";
b() {
print("b1");
diff --git a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
index 2313785..ec752c6 100644
--- a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
+++ b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml
@@ -15,16 +15,19 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("hello");
b();
}
b.dart: |
+ // @dart=2.9
b() {
print("hello from b");
}
c.dart: |
+ // @dart=2.9
c() {
print("hello from c");
}
@@ -38,6 +41,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
import "nonexisting.dart";
main() {
@@ -45,6 +49,7 @@
b();
}
b.dart: |
+ // @dart=2.9
import "c.dart";
b() {
print("hello from b");
@@ -60,6 +65,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("hello");
diff --git a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
index 8f72034..00a49d0 100644
--- a/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/invalidation_across_compile_time_error.yaml.world.2.expect
@@ -28,7 +28,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///main.dart:3:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml b/pkg/front_end/testcases/incremental/issue_32366.yaml
index c049a7d..595813f 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml
@@ -8,6 +8,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
abstract class AIterator extends Iterator {
}
class Foo {
@@ -25,6 +26,7 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
abstract class BIterator extends Iterator {
}
class Foo {
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
index e82a2d4..65cc6dc 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
@@ -3,29 +3,29 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:4:11: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:5:11: Error: Expected ';' after this.
// final a kjsdf ksjdf ;
// ^^^^^
//
-// org-dartlang-test:///main.dart:4:11: Error: Final field 'kjsdf' is not initialized.
+// org-dartlang-test:///main.dart:5:11: Error: Final field 'kjsdf' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
// final a kjsdf ksjdf ;
// ^^^^^
//
-// org-dartlang-test:///main.dart:4:17: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///main.dart:5:17: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// final a kjsdf ksjdf ;
// ^^^^^
//
-// org-dartlang-test:///main.dart:4:9: Error: 'a' isn't a type.
+// org-dartlang-test:///main.dart:5:9: Error: 'a' isn't a type.
// final a kjsdf ksjdf ;
// ^
//
-// org-dartlang-test:///main.dart:4:9: Error: Type 'a' not found.
+// org-dartlang-test:///main.dart:5:9: Error: Type 'a' not found.
// final a kjsdf ksjdf ;
// ^
//
-// org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.
+// org-dartlang-test:///main.dart:6:12: Error: 'a' isn't an instance field of this class.
// Foo(this.a);
// ^
//
@@ -50,7 +50,7 @@
final field invalid-type kjsdf = null;
field dynamic ksjdf = null;
constructor •(dynamic a) → main::Foo*
- : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.\n Foo(this.a);\n ^"
+ : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:6:12: Error: 'a' isn't an instance field of this class.\n Foo(this.a);\n ^"
;
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml b/pkg/front_end/testcases/incremental/issue_41976.yaml
index d8e31e8..ed856be 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml
@@ -9,6 +9,7 @@
- entry: foo.dart
sources:
foo.dart: |
+ // @dart=2.9
abstract class Key {
const factory Key(String value) = ValueKey;
const Key.empty();
diff --git a/pkg/front_end/testcases/incremental/issue_42323.yaml b/pkg/front_end/testcases/incremental/issue_42323.yaml
index 747acd6..e731873 100644
--- a/pkg/front_end/testcases/incremental/issue_42323.yaml
+++ b/pkg/front_end/testcases/incremental/issue_42323.yaml
@@ -12,7 +12,6 @@
nnbdMode: strong
worlds:
- entry: bin/runMe.dart
- experiments: non-nullable
enableStringReplacement: true
sources:
.dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/issue_42323_prime.yaml b/pkg/front_end/testcases/incremental/issue_42323_prime.yaml
index 97d90ab..ce29481 100644
--- a/pkg/front_end/testcases/incremental/issue_42323_prime.yaml
+++ b/pkg/front_end/testcases/incremental/issue_42323_prime.yaml
@@ -12,7 +12,6 @@
nnbdMode: strong
worlds:
- entry: bin/runMe.dart
- experiments: non-nullable
errors: true
sources:
.dart_tool/package_config.json: |
diff --git a/pkg/front_end/testcases/incremental/issue_44523.yaml b/pkg/front_end/testcases/incremental/issue_44523.yaml
index 63f5ae4..d7d4906 100644
--- a/pkg/front_end/testcases/incremental/issue_44523.yaml
+++ b/pkg/front_end/testcases/incremental/issue_44523.yaml
@@ -21,6 +21,7 @@
]
}
app/main.dart: |
+ // @dart=2.9
import "package:flutter/lib1.dart";
class _Bar extends RestorableProperty {}
flutter/lib1.dart: |
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml b/pkg/front_end/testcases/incremental/issue_46666.yaml
index 0ac3970..794df0d 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml
@@ -7,7 +7,6 @@
type: newworld
worlds:
- entry: b.dart
- experiments: non-nullable
sources:
a.dart: |
import 'dart:ffi';
@@ -45,7 +44,6 @@
expectedLibraryCount: 2
- entry: b.dart
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
index 6b88d9a..c2c104f 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml
@@ -17,12 +17,14 @@
warnings: false
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
useString("hello");
}
b.dart: |
+ // @dart=2.9
import "dart:core";
void useString(String s) {
@@ -39,12 +41,14 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
useString("hello");
}
b.dart: |
+ // @dart=2.9
import "dart:core";
void useString(String s) {
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
index 81b1aa1..ac99df2 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
@@ -9,6 +9,7 @@
experiments: alternative-invalidation-strategy
sources:
main_lib1.dart: |
+ // @dart=2.9
class SuperClass {
void method(covariant int i) {}
}
@@ -19,12 +20,14 @@
class Class extends SuperClass with Mixin {}
main_lib2.dart: |
+ // @dart=2.9
import 'main_lib1.dart';
class SubClass extends Class {}
method() => new SubClass().method(0);
main.dart: |
+ // @dart=2.9
import 'main_lib2.dart';
main() {
@@ -39,6 +42,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'main_lib2.dart';
main() {
@@ -55,6 +59,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'main_lib2.dart';
main() {
diff --git a/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml b/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
index 51be325..3e68b28 100644
--- a/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_from_sdk.yaml
@@ -12,6 +12,7 @@
- a.dart
sources:
a.dart: |
+ // @dart=2.9
import 'dart:collection';
class Foo extends Object with ListMixin<int> {
diff --git a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
index e760b10..c830e1c 100644
--- a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml
@@ -10,6 +10,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
abstract class A<T> {}
mixin M<T> on A<T> {}
class C extends Object with M {}
diff --git a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
index 09119c7..3ff776a 100644
--- a/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/mixin_inferrer_error.yaml.world.1.expect
@@ -3,14 +3,14 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:7: Error: 'Object' doesn't implement 'A<dynamic>' so it can't be used with 'M<dynamic>'.
+// org-dartlang-test:///main.dart:4:7: Error: 'Object' doesn't implement 'A<dynamic>' so it can't be used with 'M<dynamic>'.
// - 'Object' is from 'dart:core'.
// - 'A' is from 'org-dartlang-test:///main.dart'.
// - 'M' is from 'org-dartlang-test:///main.dart'.
// class C extends Object with M {}
// ^
//
-// org-dartlang-test:///main.dart:3:7: Error: Type parameters couldn't be inferred for the mixin 'M' because 'Object' does not implement the mixin's supertype constraint 'A<T>'.
+// org-dartlang-test:///main.dart:4:7: Error: Type parameters couldn't be inferred for the mixin 'M' because 'Object' does not implement the mixin's supertype constraint 'A<T>'.
// - 'A' is from 'org-dartlang-test:///main.dart'.
// class C extends Object with M {}
// ^
diff --git a/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml b/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
index 0577118..6f4c9d8 100644
--- a/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
+++ b/pkg/front_end/testcases/incremental/multiple_entriepoints.yaml
@@ -12,14 +12,17 @@
- b.dart
sources:
a.dart: |
+ // @dart=2.9
a() {
print("hello a");
}
b.dart: |
+ // @dart=2.9
b() {
print("hello b");
}
c.dart: |
+ // @dart=2.9
b() {
print("hello c (I'm not included!)");
}
diff --git a/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml b/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
index 5f3ac3c..5172413 100644
--- a/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental/no_invalidate_on_export_of_main.yaml
@@ -10,6 +10,8 @@
invalidate:
sources:
a.dart: |
+ // @dart=2.9
export 'b.dart';
b.dart: |
+ // @dart=2.9
main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
index 563d16c..378608c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_1.yaml
@@ -10,11 +10,13 @@
experiments: alternative-invalidation-strategy
sources:
actualMain.dart: |
+ // @dart=2.9
import 'main.dart' as m;
main() {
m.main();
}
main.dart: |
+ // @dart=2.9
import 'libA.dart';
main() {
@@ -22,6 +24,7 @@
}
mainHello() {}
libA.dart: |
+ // @dart=2.9
import 'main.dart';
import 'libB.dart';
class Foo {}
@@ -30,6 +33,7 @@
mainHello();
}
libB.dart: |
+ // @dart=2.9
import 'libA.dart';
class Bar {
Foo foo;
@@ -44,6 +48,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
index 10f6a6e..97dacaf 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_10.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart";
import "lib3.dart";
@@ -20,12 +21,14 @@
lib3Method(foo);
}
lib1.dart: |
+ // @dart=2.9
class Foo {
void fooMethod() {
// Not filled out.
}
}
lib2.dart: |
+ // @dart=2.9
import "lib1.dart";
class Bar extends Foo {
void barMethod() {
@@ -33,6 +36,7 @@
}
}
lib3.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart";
void lib3Method(Foo foo) {
@@ -49,6 +53,7 @@
- lib1.dart
sources:
lib1.dart: |
+ // @dart=2.9
class Foo {
void fooMethod() {
print("fooMethod");
@@ -64,6 +69,7 @@
- lib3.dart
sources:
lib3.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib2.dart";
void lib3Method(Foo foo) {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
index e06e7d3..8d38adc 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml
@@ -11,11 +11,13 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
main() {
libMethod();
}
lib1.dart: |
+ // @dart=2.9
import "lib2.dart";
class Foo {
factory Foo() = Bar;
@@ -25,6 +27,7 @@
Bar bar = new Bar();
}
lib2.dart: |
+ // @dart=2.9
import "lib1.dart";
class Bar implements Foo {
Bar();
@@ -38,6 +41,7 @@
- lib1.dart
sources:
lib1.dart: |
+ // @dart=2.9
import "lib2.dart";
class Foo {
factory Foo() = Bar;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
index 24ee095..7249224 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_12.yaml
@@ -11,12 +11,14 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib2.dart" show Bar;
import "lib1.dart" show Bar;
main() {
Bar bar = new Bar();
}
lib1.dart: |
+ // @dart=2.9
export "lib2.dart";
class Foo {
Foo() {
@@ -24,6 +26,7 @@
}
}
lib2.dart: |
+ // @dart=2.9
class Bar {
Bar() {
@@ -38,6 +41,7 @@
- lib1.dart
sources:
lib1.dart: |
+ // @dart=2.9
export "lib2.dart";
class Foo {
Foo() {
@@ -54,6 +58,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
class Bar {
Bar() {
print("Bar!");
@@ -69,6 +74,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib2.dart" show Bar;
import "lib1.dart" show Bar;
main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
index 10b1083..bcdc011 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml
@@ -12,14 +12,17 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart" as prefix;
main() {
print(prefix.Foo.BAR);
}
lib1.dart: |
+ // @dart=2.9
export "lib2.dart" show Foo;
import "main.dart";
lib2.dart: |
+ // @dart=2.9
class Foo {
static const Foo BAR = const Foo("BAR");
const Foo(String x);
@@ -33,6 +36,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart" as prefix;
main() {
print(prefix.Foo.BAR);
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
index a33699a..cbce88b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_14.yaml
@@ -11,16 +11,19 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
abstract class Foo implements Bar {
@override
Foo get x;
}
lib1.dart: |
+ // @dart=2.9
import "lib2.dart";
abstract class Bar implements Baz {
}
lib2.dart: |
+ // @dart=2.9
abstract class Baz {
Baz get x;
}
@@ -33,6 +36,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
abstract class Baz {
Baz get x;
}
@@ -46,6 +50,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
abstract class Foo implements Bar {
@override
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
index 1ec3e65..fb7b2f9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml
@@ -11,12 +11,14 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
abstract class C extends B implements A<int> {}
main() {
print("#1");
}
lib1.dart: |
+ // @dart=2.9
class A<T> {
foo(T t) {
print("foo T $t");
@@ -37,6 +39,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
abstract class C extends B implements A<int> {}
main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
index 856ce6a..202a3e0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_16.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
class Foo1 extends Bar {
noSuchMethod(Invocation msg) {
@@ -23,6 +24,7 @@
}
}
lib1.dart: |
+ // @dart=2.9
abstract class Bar {
void method();
bool get getter;
@@ -38,6 +40,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
class Foo1 extends Bar {
noSuchMethod(Invocation msg) {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
index c2fe2c1..1648959 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_17.yaml
@@ -11,12 +11,14 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart" deferred as foo;
main() {
var f = foo.loadLibrary;
f();
}
lib.dart: |
+ // @dart=2.9
foo() {
print("foo!");
}
@@ -29,6 +31,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart" deferred as foo;
main() {
var f = foo.loadLibrary;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
index dd099b7..ace7dba 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml
@@ -12,16 +12,19 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
export "lib1.dart" show x;
export "lib2.dart" show x;
main() {
print("exports")
}
lib1.dart: |
+ // @dart=2.9
x() {
print("lib1.x!");
}
lib2.dart: |
+ // @dart=2.9
x() {
print("lib2.x!");
}
@@ -35,6 +38,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
export "lib1.dart" show x;
export "lib2.dart" show x;
main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
index bc3a9bc..92cbad1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.1.expect
@@ -15,11 +15,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
// export "lib2.dart" show x;
// ^
//
-// org-dartlang-test:///main.dart:4:18: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:5:18: Error: Expected ';' after this.
// print("exports")
// ^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
index 2387ec3..458ee49 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_18.yaml.world.2.expect
@@ -15,11 +15,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
+// org-dartlang-test:///main.dart:3:1: Error: 'x' is exported from both 'org-dartlang-test:///lib1.dart' and 'org-dartlang-test:///lib2.dart'.
// export "lib2.dart" show x;
// ^
//
-// org-dartlang-test:///main.dart:4:19: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:5:19: Error: Expected ';' after this.
// print("exports!")
// ^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
index f9251d2..8fd792f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_19.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class A1 {}
extension A2 on A1 {
@@ -36,6 +37,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class A1 {}
extension A2 on A1 {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
index 861576b..13340c8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml
@@ -10,6 +10,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
@@ -28,6 +29,7 @@
enum CompilationStrategy { direct, toKernel, toData, fromData }
libA.dart: |
+ // @dart=2.9
import 'main.dart';
whatever(Foo foo) {
print(foo);
@@ -41,6 +43,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
index f92ccb9..f94ccd0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_20.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class A1 {}
extension on A1 {
@@ -34,6 +35,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class A1 {}
extension on A1 {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
index 23a30cf..e6f6805 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml
@@ -13,6 +13,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class A1 {
A1.foo1(){}
A1.foo1(){}
@@ -31,6 +32,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class A1 {
A1.foo1(){}
A1.foo1(){}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
index 9ba9d65..ae0225e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.1.expect
@@ -3,24 +3,24 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo1' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo1' is already declared in this scope.
// A1.foo1(){}
// ^^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo1'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo1'.
// A1.foo1(){}
// ^^^^^^^
//
-// org-dartlang-test:///main.dart:5:7: Error: 'A1' is already declared in this scope.
+// org-dartlang-test:///main.dart:6:7: Error: 'A1' is already declared in this scope.
// class A1 {
// ^^
-// org-dartlang-test:///main.dart:1:7: Context: Previous declaration of 'A1'.
+// org-dartlang-test:///main.dart:2:7: Context: Previous declaration of 'A1'.
// class A1 {
// ^^
//
-// org-dartlang-test:///main.dart:7:3: Error: 'A1.foo2' is already declared in this scope.
+// org-dartlang-test:///main.dart:8:3: Error: 'A1.foo2' is already declared in this scope.
// A1.foo2(){}
// ^^^^^^^
-// org-dartlang-test:///main.dart:6:3: Context: Previous declaration of 'A1.foo2'.
+// org-dartlang-test:///main.dart:7:3: Context: Previous declaration of 'A1.foo2'.
// A1.foo2(){}
// ^^^^^^^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
index 9ba9d65..ae0225e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_21.yaml.world.2.expect
@@ -3,24 +3,24 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo1' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo1' is already declared in this scope.
// A1.foo1(){}
// ^^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo1'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo1'.
// A1.foo1(){}
// ^^^^^^^
//
-// org-dartlang-test:///main.dart:5:7: Error: 'A1' is already declared in this scope.
+// org-dartlang-test:///main.dart:6:7: Error: 'A1' is already declared in this scope.
// class A1 {
// ^^
-// org-dartlang-test:///main.dart:1:7: Context: Previous declaration of 'A1'.
+// org-dartlang-test:///main.dart:2:7: Context: Previous declaration of 'A1'.
// class A1 {
// ^^
//
-// org-dartlang-test:///main.dart:7:3: Error: 'A1.foo2' is already declared in this scope.
+// org-dartlang-test:///main.dart:8:3: Error: 'A1.foo2' is already declared in this scope.
// A1.foo2(){}
// ^^^^^^^
-// org-dartlang-test:///main.dart:6:3: Context: Previous declaration of 'A1.foo2'.
+// org-dartlang-test:///main.dart:7:3: Context: Previous declaration of 'A1.foo2'.
// A1.foo2(){}
// ^^^^^^^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
index 244a23c..ff2b2b8 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'dart:collection' show ListMixin;
class WithListMixin extends Object with ListMixin<int> {
int length = 2;
@@ -26,6 +27,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'dart:collection' show ListMixin;
class WithListMixin extends Object with ListMixin<int> {
int length = 2;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
index 30b121e..17f8538 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_23.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class A extends Object with B {
foo() {}
}
@@ -26,6 +27,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class A extends Object with B {
foo() {}
}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
index a68ba95..3ddee3f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml
@@ -13,6 +13,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
void foo() {}
void foo() {}
expectedLibraryCount: 1
@@ -25,6 +26,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
void foo() {}
void foo() {}
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
index c62e3af..69cda08 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.1.expect
@@ -3,10 +3,10 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:6: Error: 'foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:6: Error: 'foo' is already declared in this scope.
// void foo() {}
// ^^^
-// org-dartlang-test:///main.dart:1:6: Context: Previous declaration of 'foo'.
+// org-dartlang-test:///main.dart:2:6: Context: Previous declaration of 'foo'.
// void foo() {}
// ^^^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
index c62e3af..69cda08 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_24.yaml.world.2.expect
@@ -3,10 +3,10 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:2:6: Error: 'foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:3:6: Error: 'foo' is already declared in this scope.
// void foo() {}
// ^^^
-// org-dartlang-test:///main.dart:1:6: Context: Previous declaration of 'foo'.
+// org-dartlang-test:///main.dart:2:6: Context: Previous declaration of 'foo'.
// void foo() {}
// ^^^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
index e364005..8db1940 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml
@@ -15,6 +15,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class Foo {
void bar() {
print("bar 1");
@@ -36,6 +37,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class Foo {
void bar() {
print("bar 1");
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
index 7e300e4..3d25246 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.1.expect
@@ -3,17 +3,17 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:5:8: Error: 'bar' is already declared in this scope.
-// void bar() {
-// ^^^
-// org-dartlang-test:///main.dart:2:8: Context: Previous declaration of 'bar'.
-// void bar() {
-// ^^^
-//
-// org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.
+// org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.
// bar();
// ^
//
+// org-dartlang-test:///main.dart:6:8: Error: 'bar' is already declared in this scope.
+// void bar() {
+// ^^^
+// org-dartlang-test:///main.dart:3:8: Context: Previous declaration of 'bar'.
+// void bar() {
+// ^^^
+//
class Foo extends dart.core::Object {
synthetic constructor •() → main::Foo*
@@ -23,7 +23,7 @@
dart.core::print("bar 1");
}
method callBar() → void {
- invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n bar();\n ^"{dynamic}.call();
+ invalid-expression "org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.\n bar();\n ^"{dynamic}.call();
}
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
index 7e300e4..3d25246 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_25.yaml.world.2.expect
@@ -3,17 +3,17 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:5:8: Error: 'bar' is already declared in this scope.
-// void bar() {
-// ^^^
-// org-dartlang-test:///main.dart:2:8: Context: Previous declaration of 'bar'.
-// void bar() {
-// ^^^
-//
-// org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.
+// org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.
// bar();
// ^
//
+// org-dartlang-test:///main.dart:6:8: Error: 'bar' is already declared in this scope.
+// void bar() {
+// ^^^
+// org-dartlang-test:///main.dart:3:8: Context: Previous declaration of 'bar'.
+// void bar() {
+// ^^^
+//
class Foo extends dart.core::Object {
synthetic constructor •() → main::Foo*
@@ -23,7 +23,7 @@
dart.core::print("bar 1");
}
method callBar() → void {
- invalid-expression "org-dartlang-test:///main.dart:9:5: Error: Can't use 'bar' because it is declared more than once.\n bar();\n ^"{dynamic}.call();
+ invalid-expression "org-dartlang-test:///main.dart:10:5: Error: Can't use 'bar' because it is declared more than once.\n bar();\n ^"{dynamic}.call();
}
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
index 6fe95fa..cbfff15 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml
@@ -15,6 +15,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class A1 {
A1.foo(){}
A1.foo(){}
@@ -32,6 +33,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class A1 {
A1.foo(){}
A1.foo(){}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
index 22db75d..df38521 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.1.expect
@@ -3,14 +3,14 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo' is already declared in this scope.
// A1.foo(){}
// ^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo'.
// A1.foo(){}
// ^^^^^^
//
-// org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.
+// org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.
// new A1.foo();
// ^
//
@@ -30,6 +30,6 @@
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
}
static method main() → dynamic {
- invalid-expression "org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.\n new A1.foo();\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.\n new A1.foo();\n ^";
}
}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
index 22db75d..df38521 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_26.yaml.world.2.expect
@@ -3,14 +3,14 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:3: Error: 'A1.foo' is already declared in this scope.
+// org-dartlang-test:///main.dart:4:3: Error: 'A1.foo' is already declared in this scope.
// A1.foo(){}
// ^^^^^^
-// org-dartlang-test:///main.dart:2:3: Context: Previous declaration of 'A1.foo'.
+// org-dartlang-test:///main.dart:3:3: Context: Previous declaration of 'A1.foo'.
// A1.foo(){}
// ^^^^^^
//
-// org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.
+// org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.
// new A1.foo();
// ^
//
@@ -30,6 +30,6 @@
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
}
static method main() → dynamic {
- invalid-expression "org-dartlang-test:///main.dart:6:7: Error: Can't use 'foo' because it is declared more than once.\n new A1.foo();\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:7:7: Error: Can't use 'foo' because it is declared more than once.\n new A1.foo();\n ^";
}
}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_27.yaml b/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
index 933c328..ca31b68 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_27.yaml
@@ -12,11 +12,13 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
libMethod();
}
lib.dart: |
+ // @dart=2.9
libMethod() {
print("Hello from lib!");
}
@@ -32,6 +34,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
libMethod();
@@ -48,6 +51,7 @@
- lib.dart
sources:
lib.dart: |
+ // @dart=2.9
libMethod() {
print("Hello from lib!!");
}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
index 091f7c5..ead8930 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_28.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
abstract class A {
a() {
print("Class A method a");
@@ -52,6 +53,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
abstract class A {
a() {
print("Class A method a!");
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml
index 937e2cf..ba86755 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_29.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_29.yaml
@@ -9,7 +9,7 @@
forceLateLoweringForTesting: true
worlds:
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
late int? field1 = 42;
@@ -32,7 +32,7 @@
}
expectedLibraryCount: 1
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
index 278e445..7e1bfa9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml
@@ -10,6 +10,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
@@ -23,6 +24,7 @@
print(const Foo());
}
libA.dart: |
+ // @dart=2.9
whatever() async {
await null;
return "hello";
@@ -36,6 +38,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_30.yaml b/pkg/front_end/testcases/incremental/no_outline_change_30.yaml
index 8927356..93f336e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_30.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_30.yaml
@@ -9,7 +9,7 @@
forceLateLoweringForTesting: false
worlds:
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
late int? field1 = 42;
@@ -32,7 +32,7 @@
}
expectedLibraryCount: 1
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_31.yaml b/pkg/front_end/testcases/incremental/no_outline_change_31.yaml
index 3405708..0d0e7ab 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_31.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_31.yaml
@@ -9,7 +9,7 @@
forceLateLoweringForTesting: true
worlds:
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
late int? field1 = 42;
@@ -29,7 +29,7 @@
}
expectedLibraryCount: 1
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_32.yaml b/pkg/front_end/testcases/incremental/no_outline_change_32.yaml
index a863872..f4bbb81 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_32.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_32.yaml
@@ -9,7 +9,7 @@
forceLateLoweringForTesting: false
worlds:
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
late int? field1 = 42;
@@ -29,7 +29,7 @@
}
expectedLibraryCount: 1
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
index c8fa4c6..1f532f7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_33.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib2.dart" show getter, setter, method, Bar;
import "lib1.dart" show getter, setter, method, Bar;
main() {
@@ -20,6 +21,7 @@
setter = 42;
}
lib1.dart: |
+ // @dart=2.9
export "lib2.dart";
class Foo {
Foo() {
@@ -27,6 +29,7 @@
}
}
lib2.dart: |
+ // @dart=2.9
String get getter => "hello";
void set setter(int i) {}
void method() {}
@@ -44,6 +47,7 @@
- lib1.dart
sources:
lib1.dart: |
+ // @dart=2.9
export "lib2.dart";
class Foo {
Foo() {
@@ -60,6 +64,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
String get getter => "hello";
void set setter(int i) {}
void method() {}
@@ -78,6 +83,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib2.dart" show getter, setter, method, Bar;
import "lib1.dart" show getter, setter, method, Bar;
main() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
index 2f11a3e..7bca389 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_34.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib1.dart" as l1;
import "lib2.dart";
@@ -26,6 +27,7 @@
lib1();
}
lib1.dart: |
+ // @dart=2.9
export "main.dart";
import "main.dart";
import "main.dart" as m;
@@ -38,6 +40,7 @@
a.method2();
}
lib2.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib1.dart" as l1;
extension Extension3 on Class {
@@ -57,6 +60,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib1.dart" as l1;
import "lib2.dart";
@@ -82,6 +86,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
import "lib1.dart";
import "lib1.dart" as l1;
extension Extension3 on Class {
@@ -103,6 +108,7 @@
- lib1.dart
sources:
lib1.dart: |
+ // @dart=2.9
export "main.dart";
import "main.dart";
import "main.dart" as m;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
index e422ff5..41c5896 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml
@@ -12,6 +12,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
@@ -21,6 +22,7 @@
print(coordinate.next);
}
lib.dart: |
+ // @dart=2.9
import 'dart:ffi';
class Coordinate extends Struct {
@Double()
@@ -44,6 +46,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
@@ -63,6 +66,7 @@
- lib.dart
sources:
lib.dart: |
+ // @dart=2.9
import 'dart:ffi';
class Coordinate extends Struct {
@Double()
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
index 9022597..3b6cb72 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_36.yaml
@@ -10,16 +10,19 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'file1.dart';
class Class1 extends Class2 {}
file1.dart: |
+ // @dart=2.9
import 'file2.dart';
class Class2 extends Class3 {
Class3 foo;
}
file2.dart: |
+ // @dart=2.9
abstract class Class3 {
Class3 foo;
}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
index a52319c..359626d 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_37.yaml
@@ -10,13 +10,16 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'file2.dart';
class A extends B implements C {}
file1.dart: |
+ // @dart=2.9
class D {
D parent;
}
file2.dart: |
+ // @dart=2.9
import 'file1.dart';
abstract class C implements D {}
class B extends D {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
index 90f929f..4c85485 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_38.yaml
@@ -10,12 +10,14 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class X {}
int foo(X x) {
return x is Y ? x.foo : null;
}
lib.dart: |
+ // @dart=2.9
import 'main.dart';
class Y implements X {
int get foo => 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
index 0a99343..ebaefa2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_39.yaml
@@ -10,6 +10,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class A {
int a() {
@@ -20,6 +21,7 @@
}
}
lib.dart: |
+ // @dart=2.9
class B {
int a() {
return 42;
@@ -46,6 +48,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class A {
int b() {
@@ -66,6 +69,7 @@
- lib.dart
sources:
lib.dart: |
+ // @dart=2.9
class C {
int b() {
return 1;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
index fbab308..5aaff13 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_4.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
@@ -19,6 +20,7 @@
}
}
libA.dart: |
+ // @dart=2.9
import 'main.dart';
class Bar extends Object with Foo {
@@ -35,6 +37,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
index 3d630a8..6033b0e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_40.yaml
@@ -11,11 +11,13 @@
experiments: alternative-invalidation-strategy
sources:
lib1.dart: |
+ // @dart=2.9
import 'main.dart';
extension Extension1 on A {
baz() => 42;
}
lib2.dart: |
+ // @dart=2.9
import 'main.dart';
import 'lib1.dart';
export 'main.dart';
@@ -25,6 +27,7 @@
a.boz();
}
main.dart: |
+ // @dart=2.9
import 'lib1.dart';
import 'lib2.dart';
class A {
@@ -45,6 +48,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
import 'main.dart';
import 'lib1.dart';
export 'main.dart';
@@ -64,6 +68,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib1.dart';
import 'lib2.dart';
class A {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_41.yaml b/pkg/front_end/testcases/incremental/no_outline_change_41.yaml
index 48225c0..2b10dac 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_41.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_41.yaml
@@ -9,7 +9,7 @@
forceLateLoweringForTesting: true
worlds:
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
sources:
lib1.dart: |
late int field;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_42.yaml b/pkg/front_end/testcases/incremental/no_outline_change_42.yaml
index cd88790..9f8d58e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_42.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_42.yaml
@@ -9,7 +9,7 @@
forceLateLoweringForTesting: true
worlds:
- entry: main.dart
- experiments: non-nullable,alternative-invalidation-strategy
+ experiments: alternative-invalidation-strategy
sources:
lib1.dart: |
void set property(int value) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
index 8fb3d4f..a8ddc64 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_43.yaml
@@ -14,15 +14,18 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'libExporter.dart';
void foo() {
int value = libField;
libField = value+1;
}
libExporter.dart: |
+ // @dart=2.9
export "lib.dart";
String fromLibExporter = "hello";
lib.dart: |
+ // @dart=2.9
import "libExporter.dart";
int libField = 42;
void requireStuffFromLibExporter() {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
index 7ce01e9f..d1aab0e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
@@ -12,6 +12,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class Foo {
factory Foo.bar() {
return null;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
index 8b31333..6569ace 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
@@ -12,6 +12,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class Foo {
Foo();
factory Foo.bar() = Baz;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_46.yaml b/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
index 6f8b85b..0a162fe 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
@@ -8,7 +8,7 @@
target: VM
worlds:
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
class Foo {
@@ -17,7 +17,7 @@
expectedLibraryCount: 1
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_47.yaml b/pkg/front_end/testcases/incremental/no_outline_change_47.yaml
index 03f5018..acf60e7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_47.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_47.yaml
@@ -7,7 +7,7 @@
type: newworld
worlds:
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
late final int x = 42;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml
index 03f9511a..1004210 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml
@@ -8,7 +8,7 @@
type: newworld
worlds:
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
import "dart:ffi";
@@ -32,7 +32,7 @@
expectedLibraryCount: 2
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml
index 7f7cdad..d9cd713 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml
@@ -9,7 +9,7 @@
type: newworld
worlds:
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
import "dart:ffi";
@@ -33,7 +33,7 @@
expectedLibraryCount: 2
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
expectInitializeFromDill: true
invalidate:
- lib.dart
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
index d7d7a6a..b75e11c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
part 'myPart.dart';
class Foo {
@@ -24,6 +25,7 @@
print(const Foo());
}
myPart.dart: |
+ // @dart=2.9
part of 'main.dart';
whatever() async {
await null;
@@ -38,6 +40,7 @@
- myPart.dart
sources:
myPart.dart: |
+ // @dart=2.9
part of 'main.dart';
whatever() async {
await null;
@@ -53,6 +56,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
part 'myPart.dart';
class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml
index 025fb00..53a1505 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml
@@ -8,7 +8,7 @@
type: newworld
worlds:
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
sources:
main.dart: |
import "dart:ffi";
@@ -36,7 +36,7 @@
expectedLibraryCount: 4
- entry: main.dart
- experiments: alternative-invalidation-strategy,non-nullable
+ experiments: alternative-invalidation-strategy
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
index 4e74fed..b6497de 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml
@@ -11,6 +11,7 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
@@ -29,6 +30,7 @@
enum CompilationStrategy { direct, toKernel, toData, fromData }
libA.dart: |
+ // @dart=2.9
import 'main.dart';
whatever(Foo foo) {
print(foo);
@@ -43,6 +45,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
@@ -70,6 +73,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
class Foo {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
index 46a055a..ec42b23 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
@@ -11,7 +11,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:7:32: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:8:32: Error: Expected ';' after this.
// toString() { return '$message' } // missing ;
// ^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
index f17b4d8..4b4156c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
@@ -11,7 +11,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:7:32: Error: Expected ';' after this.
+// org-dartlang-test:///main.dart:8:32: Error: Expected ';' after this.
// toString() { return '$message!!!' } // missing ; still
// ^^^^
//
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
index 3dd8187..91c67e4 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml
@@ -10,6 +10,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
const String useMeAsAnnotation = "hello";
@@ -43,6 +44,7 @@
@useMeAsAnnotation
enum CompilationStrategy { @useMeAsAnnotation direct, @useMeAsAnnotation toKernel, @useMeAsAnnotation toData, @useMeAsAnnotation fromData }
libA.dart: |
+ // @dart=2.9
import 'main.dart';
@useMeAsAnnotation
whatever(Foo foo) {
@@ -57,6 +59,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'libA.dart';
const String useMeAsAnnotation = "hello";
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
index 5cbb862..fc35f07 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_8.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
class Foo {
String get x { return "x #1"; }
void set x(String x) {}
@@ -30,6 +31,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
class Foo {
String get x { return "x #2"; }
void set x(String x) {}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_9.yaml b/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
index 7310cd4..37edf3e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_9.yaml
@@ -11,6 +11,7 @@
experiments: alternative-invalidation-strategy
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
@@ -18,12 +19,14 @@
libPartMethod();
}
lib.dart: |
+ // @dart=2.9
part "libpart.dart";
libMethod() {
print("libMethod");
}
libpart.dart: |
+ // @dart=2.9
part of "lib.dart";
libPartMethod() {
@@ -38,6 +41,7 @@
- lib.dart
sources:
lib.dart: |
+ // @dart=2.9
part "libpart.dart";
libMethod() {
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
index 8d884a3..ad799bd 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_1.yaml
@@ -10,6 +10,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("Hello world");
}
@@ -20,6 +21,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("Hello world!");
}
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
index 071eacd..88e85bd 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_2.yaml
@@ -10,6 +10,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("Hello world");
}
@@ -20,6 +21,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("Hello world!");
}
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
index 2a6583b..c0f25a0 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml
@@ -12,6 +12,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("Hello world");
}
@@ -25,11 +26,13 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
print(lib());
}
lib.dart: |
+ // @dart=2.9
lib() {
return "hello";
}
@@ -43,6 +46,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
print(lib() + "!");
@@ -57,6 +61,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
print(lib());
@@ -70,11 +75,13 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
main() {
print(lib() + "!!");
}
lib.dart: |
+ // @dart=2.9
lib() {
return "hello";
}
diff --git a/pkg/front_end/testcases/incremental/outline_only.yaml b/pkg/front_end/testcases/incremental/outline_only.yaml
index 59a9e45..bb3d5af 100644
--- a/pkg/front_end/testcases/incremental/outline_only.yaml
+++ b/pkg/front_end/testcases/incremental/outline_only.yaml
@@ -9,6 +9,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("hello");
b();
diff --git a/pkg/front_end/testcases/incremental/outline_only_2.yaml b/pkg/front_end/testcases/incremental/outline_only_2.yaml
index 94b1a83..2ec0997 100644
--- a/pkg/front_end/testcases/incremental/outline_only_2.yaml
+++ b/pkg/front_end/testcases/incremental/outline_only_2.yaml
@@ -10,6 +10,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
abstract class Foo {
int get foo;
}
diff --git a/pkg/front_end/testcases/incremental/part_as_entry.yaml b/pkg/front_end/testcases/incremental/part_as_entry.yaml
index aba97dff..266e687 100644
--- a/pkg/front_end/testcases/incremental/part_as_entry.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_entry.yaml
@@ -8,9 +8,11 @@
checkEntries: false
sources:
main.dart: |
+ // @dart=2.9
part of 'lib.dart';
partMethod() {}
lib.dart: |
+ // @dart=2.9
part 'main.dart';
main() {}
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_as_package_entry.yaml b/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
index e599398..9aed0c2 100644
--- a/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_package_entry.yaml
@@ -10,9 +10,11 @@
.packages: |
foo:.
main.dart: |
+ // @dart=2.9
part of 'lib.dart';
partMethod() {}
lib.dart: |
+ // @dart=2.9
part 'main.dart';
main() {}
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml b/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
index 3d91b09..ce316cc 100644
--- a/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
+++ b/pkg/front_end/testcases/incremental/part_as_package_entry_2.yaml
@@ -11,9 +11,11 @@
.packages: |
foo:.
main.dart: |
+ // @dart=2.9
part of 'lib.dart';
partMethod() {}
lib.dart: |
+ // @dart=2.9
part 'main.dart';
main() {}
expectedLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml b/pkg/front_end/testcases/incremental/part_not_part_of.yaml
index 4343977..83a3567 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml
@@ -8,9 +8,11 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
part 'lib.dart';
main() {}
lib.dart: |
+ // @dart=2.9
methodFromLib() {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.1.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.2.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of.yaml.world.3.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
index eacf043..9110606 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml
@@ -10,9 +10,11 @@
.packages: |
foo:.
main.dart: |
+ // @dart=2.9
part 'lib.dart';
main() {}
lib.dart: |
+ // @dart=2.9
methodFromLib() {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
index fc6881c..5d581c7 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.1.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
index fc6881c..5d581c7 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.2.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
index fc6881c..5d581c7 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_as_package.yaml.world.3.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
index a5edd21..0a6eab0 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml
@@ -9,9 +9,11 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
part 'lib.dart';
main() {}
lib.dart: |
+ // @dart=2.9
methodFromLib() {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.1.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.2.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_experimental_invalidation.yaml.world.3.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
index e9c5703..e0d7502 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml
@@ -8,9 +8,11 @@
errors: true
sources:
main.dart: |
+ // @dart=2.9
part 'lib.dart';
main() {}
lib.dart: |
+ // @dart=2.9
methodFromLib() {}
expectedLibraryCount: 2
@@ -20,9 +22,11 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
part 'lib.dart';
main() {}
lib.dart: |
+ // @dart=2.9
methodFromLib() {}
expectedLibraryCount: 2
@@ -32,8 +36,10 @@
- lib.dart
sources:
main.dart: |
+ // @dart=2.9
part 'lib.dart';
main() {}
lib.dart: |
+ // @dart=2.9
methodFromLib() {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.1.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.2.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
index bf0e799..63f6134 100644
--- a/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/part_not_part_of_initialized_from_dill.yaml.world.3.expect
@@ -7,7 +7,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-test:///lib.dart' as a part, because it has no 'part of' declaration.
// part 'lib.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml b/pkg/front_end/testcases/incremental/regress_35215.yaml
index b906cba..05e0f1a 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml
@@ -11,11 +11,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
b(42);
}
b.dart: |
+ // @dart=2.9
b({int named}) {
print("b");
}
@@ -27,11 +29,13 @@
- b.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
b(42);
}
b.dart: |
+ // @dart=2.9
// lots of comments
// forcing offsets down
// and also adding more lines
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
index a4a6372..8e1d7f3 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.1.expect
@@ -9,11 +9,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
// b(42);
// ^
-// org-dartlang-test:///b.dart:1:1: Context: Found this candidate, but the arguments don't match.
+// org-dartlang-test:///b.dart:2:1: Context: Found this candidate, but the arguments don't match.
// b({int named}) {
// ^
//
@@ -21,7 +21,7 @@
import "org-dartlang-test:///b.dart";
static method main() → dynamic {
- invalid-expression "org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n b(42);\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n b(42);\n ^";
}
}
constants {
diff --git a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
index 355f0aa..21bd097 100644
--- a/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/regress_35215.yaml.world.2.expect
@@ -9,11 +9,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
// b(42);
// ^
-// org-dartlang-test:///b.dart:5:1: Context: Found this candidate, but the arguments don't match.
+// org-dartlang-test:///b.dart:6:1: Context: Found this candidate, but the arguments don't match.
// b({int named}) {
// ^
//
@@ -21,7 +21,7 @@
import "org-dartlang-test:///b.dart";
static method main() → dynamic {
- invalid-expression "org-dartlang-test:///main.dart:3:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n b(42);\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:4:4: Error: Too many positional arguments: 0 allowed, but 1 found.\nTry removing the extra positional arguments.\n b(42);\n ^";
}
}
constants {
diff --git a/pkg/front_end/testcases/incremental/regress_46004.yaml b/pkg/front_end/testcases/incremental/regress_46004.yaml
index 115477f..da390ae3 100644
--- a/pkg/front_end/testcases/incremental/regress_46004.yaml
+++ b/pkg/front_end/testcases/incremental/regress_46004.yaml
@@ -5,7 +5,6 @@
type: newworld
worlds:
- entry: main.dart
- experiments: non-nullable
sources:
main.dart: |
import 'dart:ffi';
@@ -26,7 +25,6 @@
expectedLibraryCount: 2
- entry: main.dart
- experiments: non-nullable
worldType: updated
expectInitializeFromDill: false
invalidate:
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
index fb57969..0ab8b96 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml
@@ -11,8 +11,10 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
b.dart: |
+ // @dart=2.9
asdf
expectedLibraryCount: 2
errors: true
@@ -24,8 +26,10 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
b.dart: |
+ // @dart=2.9
asdf
expectedLibraryCount: 2
errors: true
@@ -42,6 +46,7 @@
- b.dart
sources:
b.dart: |
+ // @dart=2.9
asdf;
expectedLibraryCount: 2
- entry: main.dart
@@ -51,5 +56,6 @@
- b.dart
sources:
b.dart: |
+ // @dart=2.9
asdf() {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.1.expect
@@ -3,11 +3,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
// asdf
// ^^^^
//
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// asdf
// ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.2.expect
@@ -3,11 +3,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
// asdf
// ^^^^
//
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// asdf
// ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.3.expect
@@ -3,11 +3,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
// asdf
// ^^^^
//
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// asdf
// ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
index 0c74f50..089797b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.4.expect
@@ -3,11 +3,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:1: Error: Expected ';' after this.
+// org-dartlang-test:///b.dart:2:1: Error: Expected ';' after this.
// asdf
// ^^^^
//
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// asdf
// ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
index a44b5dc..1771593 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_1.yaml.world.5.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// org-dartlang-test:///b.dart:2:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
// Try adding the name of the type of the variable or the keyword 'var'.
// asdf;
// ^^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
index 3a869c5..7230d12 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml
@@ -14,11 +14,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
}
lib.dart: |
+ // @dart=2.9
class Foo {
const Foo(int i) : assert(i > 0);
}
@@ -34,6 +36,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
import 'lib2.dart';
import 'lib3.dart';
@@ -42,9 +45,11 @@
print(fooField2);
}
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField = const Foo(0);
lib3.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField2 = const Foo(0);
expectInitializeFromDill: false
@@ -56,6 +61,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField = const Foo(1);
expectInitializeFromDill: false
@@ -68,9 +74,11 @@
- lib3.dart
sources:
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField = const Foo(0);
lib3.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField2 = const Foo(1);
expectInitializeFromDill: false
@@ -83,9 +91,11 @@
- lib3.dart
sources:
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField = const Foo(1);
lib3.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField2 = const Foo(1);
expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
index b7a31e0..dfaa047 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
@@ -24,13 +24,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
// const fooField = const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
-// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
// const fooField = const Foo(0);
// ^
//
@@ -43,13 +43,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib3.dart:2:25: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:3:25: Error: Constant evaluation error:
// const fooField2 = const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
-// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
// const fooField2 = const Foo(0);
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
index 63b9159..cde8746 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
@@ -30,13 +30,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib3.dart:2:25: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:3:25: Error: Constant evaluation error:
// const fooField2 = const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
-// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
// const fooField2 = const Foo(0);
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
index a127102..d0d6582 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
@@ -24,13 +24,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
// const fooField = const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
-// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
// const fooField = const Foo(0);
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
index 76e71de..e481eaa 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml
@@ -12,11 +12,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
}
lib.dart: |
+ // @dart=2.9
class Foo {
const Foo(int i) : assert(i > 0);
}
@@ -32,6 +34,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
import 'lib2.dart';
main() {
@@ -39,6 +42,7 @@
bar();
}
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
class Bar {
final Foo x;
@@ -54,6 +58,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
class Bar {
final Foo x;
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
index e13f758..3cac950 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
@@ -24,10 +24,10 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib2.dart:4:27: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:5:27: Error: Constant evaluation error:
// const Bar() : x = const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
index 91ce7a3..b3e673f 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml
@@ -11,10 +11,12 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
class A extends B {}
b.dart: |
+ // @dart=2.9
import "nonexisting.dart";
class B extends A {}
@@ -28,10 +30,12 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
class A extends B {}
b.dart: |
+ // @dart=2.9
import "nonexisting.dart";
class B extends A {}
@@ -50,6 +54,7 @@
- b.dart
sources:
b.dart: |
+ // @dart=2.9
import "main.dart";
class B extends A {}
@@ -61,5 +66,6 @@
- b.dart
sources:
b.dart: |
+ // @dart=2.9
class B extends Object {}
expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.1.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
// class B extends A {}
// ^
//
@@ -40,7 +40,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.2.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
// class B extends A {}
// ^
//
@@ -40,7 +40,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.3.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
// class B extends A {}
// ^
//
@@ -40,7 +40,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
index 9fca3c1..9137423 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.4.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:3:17: Error: Type 'A' not found.
+// org-dartlang-test:///b.dart:4:17: Error: Type 'A' not found.
// class B extends A {}
// ^
//
@@ -40,7 +40,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
index 149ccb1..0b8a54d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_2.yaml.world.5.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:3:7: Error: 'B' is a supertype of itself.
+// org-dartlang-test:///b.dart:4:7: Error: 'B' is a supertype of itself.
// class B extends A {}
// ^
//
@@ -30,7 +30,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:3:7: Error: 'A' is a supertype of itself.
+// org-dartlang-test:///main.dart:4:7: Error: 'A' is a supertype of itself.
// class A extends B {}
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
index 1c74c07..b93e15d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml
@@ -12,13 +12,16 @@
sources:
.packages: mypackage:mypackage
main.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
mypackage/a.dart: |
+ // @dart=2.9
import "package:mypackage/b.dart";
class Foo<T> {}
class Bar<T> extends Foo<T> {}
mypackage/b.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
class Baz extends Bar<int> implements Foo<String> {}
@@ -33,13 +36,16 @@
sources:
.packages: mypackage:mypackage
main.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
mypackage/a.dart: |
+ // @dart=2.9
import "package:mypackage/b.dart";
class Foo<T> {}
class Bar<T> extends Foo<T> {}
mypackage/b.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
class Baz extends Bar<int> implements Foo<String> {}
@@ -58,6 +64,7 @@
- mypackage/b.dart
sources:
mypackage/b.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
class Baz extends Bar<int> {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.1.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.2.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.3.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
index cc82408..4c3a08d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_3.yaml.world.4.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/b.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/b.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
index 8342cbd..47f9788 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml
@@ -12,16 +12,20 @@
sources:
.packages: mypackage:mypackage
main.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
mypackage/a.dart: |
+ // @dart=2.9
import "package:mypackage/b.dart";
class Foo<T> {}
class Bar<T> extends Foo<T> {}
mypackage/b.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
part "package:mypackage/c.dart";
mypackage/c.dart: |
+ // @dart=2.9
part of "package:mypackage/b.dart";
class Baz extends Bar<int> implements Foo<String> {}
@@ -36,16 +40,20 @@
sources:
.packages: mypackage:mypackage
main.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
mypackage/a.dart: |
+ // @dart=2.9
import "package:mypackage/b.dart";
class Foo<T> {}
class Bar<T> extends Foo<T> {}
mypackage/b.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
part "package:mypackage/c.dart";
mypackage/c.dart: |
+ // @dart=2.9
part of "package:mypackage/b.dart";
class Baz extends Bar<int> implements Foo<String> {}
@@ -64,9 +72,11 @@
- mypackage/c.dart
sources:
mypackage/b.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart";
part "package:mypackage/c.dart";
mypackage/c.dart: |
+ // @dart=2.9
part of "package:mypackage/b.dart";
class Baz extends Bar<int> {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.1.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.2.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.3.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
index dcdc78a..5a7c122 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_4.yaml.world.4.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///mypackage/c.dart:3:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
+// org-dartlang-test:///mypackage/c.dart:4:7: Error: 'Baz' can't implement both 'Foo<int>' and 'Foo<String>'
// - 'Foo' is from 'package:mypackage/a.dart' ('org-dartlang-test:///mypackage/a.dart').
// class Baz extends Bar<int> implements Foo<String> {}
// ^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
index 65f2282..36e8361 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml
@@ -12,18 +12,21 @@
sources:
.packages: mypackage:mypackage
main.dart: |
+ // @dart=2.9
import "package:mypackage/a.dart" as a;
main() {
a.main();
}
mypackage/a.dart: |
+ // @dart=2.9
import "package:mypackage/b.dart";
main() {
foo();
}
mypackage/b.dart: |
+ // @dart=2.9
foo() {
bar();
}
@@ -41,6 +44,7 @@
- package:mypackage/a.dart
sources:
mypackage/a.dart: |
+ // @dart=2.9
import "package:mypackage/b.dart";
main() {
@@ -56,6 +60,7 @@
- package:mypackage/a.dart
sources:
mypackage/a.dart: |
+ // @dart=2.9
main() {
foo();
foo();
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
index 8c28bf9..4aad801 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.1.expect
@@ -19,12 +19,12 @@
//
// Problems in library:
//
-// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
// bar();
// ^^^
//
static method foo() → dynamic {
- invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n bar();\n ^^^";
+ invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n bar();\n ^^^";
}
}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
index 8c28bf9..4aad801 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.2.expect
@@ -19,12 +19,12 @@
//
// Problems in library:
//
-// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
// bar();
// ^^^
//
static method foo() → dynamic {
- invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n bar();\n ^^^";
+ invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n bar();\n ^^^";
}
}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
index 3cd7e09..38fff53 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_5.yaml.world.3.expect
@@ -20,12 +20,12 @@
//
// Problems in library:
//
-// org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.
+// org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.
// bar();
// ^^^
//
static method foo() → dynamic {
- invalid-expression "org-dartlang-test:///mypackage/b.dart:2:3: Error: Method not found: 'bar'.\n bar();\n ^^^";
+ invalid-expression "org-dartlang-test:///mypackage/b.dart:3:3: Error: Method not found: 'bar'.\n bar();\n ^^^";
}
}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
index 309b436..65569db 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml
@@ -11,9 +11,11 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class Foo<X extends Bar> {}
lib.dart: |
+ // @dart=2.9
// The error is here: Foo is unknown
// (although it might give some other error instead)
class Bar<X extends Foo<Null>> {}
@@ -26,6 +28,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class Foo {}
expectInitializeFromDill: false
@@ -38,9 +41,11 @@
- lib.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class Foo<X extends Bar> {}
lib.dart: |
+ // @dart=2.9
import 'main.dart';
class Bar<X extends Foo<Null>> {}
expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
index 3d2f012..4fb5295 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
@@ -3,11 +3,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:3:21: Error: Expected 0 type arguments.
+// org-dartlang-test:///lib.dart:4:21: Error: Expected 0 type arguments.
// class Bar<X extends Foo<Null>> {}
// ^
//
-// org-dartlang-test:///lib.dart:3:21: Error: Type 'Foo' not found.
+// org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
// class Bar<X extends Foo<Null>> {}
// ^^^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
index 4033273..5a65282 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
@@ -3,11 +3,11 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:3:21: Error: Expected 0 type arguments.
+// org-dartlang-test:///lib.dart:4:21: Error: Expected 0 type arguments.
// class Bar<X extends Foo<Null>> {}
// ^
//
-// org-dartlang-test:///lib.dart:3:21: Error: Type 'Foo' not found.
+// org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
// class Bar<X extends Foo<Null>> {}
// ^^^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
index 20ae3a1..c316a64 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml
@@ -11,11 +11,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
}
lib.dart: |
+ // @dart=2.9
import 'nonexisting.dart';
foo() {}
expectedLibraryCount: 2
@@ -27,6 +29,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
@@ -41,6 +44,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
import 'lib2.dart';
main() {
@@ -48,6 +52,7 @@
bar();
}
lib2.dart: |
+ // @dart=2.9
bar() {
print("hello");
}
@@ -60,6 +65,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
bar() {
print("hello2");
}
@@ -73,6 +79,7 @@
- lib.dart
sources:
lib.dart: |
+ // @dart=2.9
foo() {}
expectInitializeFromDill: false
expectedLibraryCount: 3
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
index 2e97886..4639701 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.1.expect
@@ -17,7 +17,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import 'nonexisting.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
index 65648e6..912f55c 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.2.expect
@@ -18,7 +18,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import 'nonexisting.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
index 061945a..4066f1b 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.3.expect
@@ -25,7 +25,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import 'nonexisting.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
index 48606d6..c9821f8 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_7.yaml.world.4.expect
@@ -25,7 +25,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///lib.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import 'nonexisting.dart';
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
index 3eb0124..0835d55 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml
@@ -12,11 +12,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
}
lib.dart: |
+ // @dart=2.9
class Foo {
const Foo(int i) : assert(i > 0);
}
@@ -32,12 +34,14 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
import 'lib2.dart';
main() {
foo();
}
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
bar() {
const Foo(0);
@@ -51,6 +55,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
index 72d51f4..15f54b2 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
@@ -24,10 +24,10 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib2.dart:3:9: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:4:9: Error: Constant evaluation error:
// const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
//
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
index 308cc60..ca1a5f1 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml
@@ -13,11 +13,13 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
main() {
foo();
}
lib.dart: |
+ // @dart=2.9
class Foo {
const Foo(int i) : assert(i > 0);
}
@@ -33,6 +35,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
import 'lib2.dart';
import 'lib3.dart';
@@ -41,9 +44,11 @@
print(fooField2);
}
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField = const Foo(0);
lib3.dart: |
+ // @dart=2.9
import 'lib2.dart';
const fooField2 = fooField;
expectInitializeFromDill: false
@@ -55,6 +60,7 @@
- lib2.dart
sources:
lib2.dart: |
+ // @dart=2.9
import 'lib.dart';
const fooField = const Foo(1);
expectInitializeFromDill: false
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
index 0fd2abb..1ba9798 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
@@ -24,13 +24,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib2.dart:2:24: Error: Constant evaluation error:
+// org-dartlang-test:///lib2.dart:3:24: Error: Constant evaluation error:
// const fooField = const Foo(0);
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
-// org-dartlang-test:///lib2.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib2.dart:3:7: Context: While analyzing:
// const fooField = const Foo(0);
// ^
//
@@ -43,13 +43,13 @@
//
// Problems in library:
//
-// org-dartlang-test:///lib3.dart:2:19: Error: Constant evaluation error:
+// org-dartlang-test:///lib3.dart:3:19: Error: Constant evaluation error:
// const fooField2 = fooField;
// ^
-// org-dartlang-test:///lib.dart:2:31: Context: This assertion failed.
+// org-dartlang-test:///lib.dart:3:31: Context: This assertion failed.
// const Foo(int i) : assert(i > 0);
// ^
-// org-dartlang-test:///lib3.dart:2:7: Context: While analyzing:
+// org-dartlang-test:///lib3.dart:3:7: Context: While analyzing:
// const fooField2 = fooField;
// ^
//
diff --git a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
index 5965f18..2451af9 100644
--- a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
+++ b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml
@@ -13,6 +13,7 @@
warnings: false
sources:
main.dart: |
+ // @dart=2.9
library mainLibrary;
import "b.dart" as b;
@@ -20,6 +21,7 @@
b.foo();
}
b.dart: |
+ // @dart=2.9
library bLibrary;
foo() {
@@ -43,12 +45,14 @@
warnings: false
sources:
main.dart: |
+ // @dart=2.9
library mainLibrary;
main() {
print("hello");
}
b.dart: |
+ // @dart=2.9
library bLibrary;
foo() {
diff --git a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
index 4f98801..542be09 100644
--- a/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/remove_import_with_error.yaml.world.1.expect
@@ -2,7 +2,7 @@
//
// Problems in component:
//
-// org-dartlang-test:///b.dart:14:7: Error: 'C' can't implement both 'I<int>' and 'I<String>'
+// org-dartlang-test:///b.dart:15:7: Error: 'C' can't implement both 'I<int>' and 'I<String>'
// - 'I' is from 'org-dartlang-test:///b.dart'.
// class C extends A implements B {}
// ^
diff --git a/pkg/front_end/testcases/incremental/remove_language_version.yaml b/pkg/front_end/testcases/incremental/remove_language_version.yaml
index fc000e4..dcd410c 100644
--- a/pkg/front_end/testcases/incremental/remove_language_version.yaml
+++ b/pkg/front_end/testcases/incremental/remove_language_version.yaml
@@ -10,7 +10,6 @@
type: newworld
worlds:
- entry: main.dart
- experiments: non-nullable
errors: true
warnings: false
sources:
@@ -21,7 +20,6 @@
}
expectedLibraryCount: 1
- entry: main.dart
- experiments: non-nullable
invalidate:
- main.dart
errors: false
diff --git a/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect b/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect
index 033ad48..32f26ec 100644
--- a/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/remove_language_version.yaml.world.1.expect
@@ -4,7 +4,7 @@
// Problems in library:
//
// org-dartlang-test:///main.dart:3:6: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
// int? i;
// ^
// org-dartlang-test:///main.dart:1:1: Context: This is the annotation that opts out this library from null safety features.
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
index f644133..ee75714 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins.yaml
@@ -12,8 +12,10 @@
- a.dart
sources:
a.dart: |
+ // @dart=2.9
import 'b.dart';
class A extends Object with B<Object>, C {}
b.dart: |
+ // @dart=2.9
abstract class C<T extends Object> extends Object with B<T> {}
abstract class B<ChildType extends Object> extends Object {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml b/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
index 9238c66..19f8ea2 100644
--- a/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
+++ b/pkg/front_end/testcases/incremental/strongmode_mixins_2.yaml
@@ -10,9 +10,11 @@
- a.dart
sources:
a.dart: |
+ // @dart=2.9
import 'b.dart';
class A extends Object with B<C>, D {}
b.dart: |
+ // @dart=2.9
mixin B<ChildType extends Object> {
ChildType get child => null;
set child(ChildType value) {}
diff --git a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
index 40aae93..c41e41a 100644
--- a/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
+++ b/pkg/front_end/testcases/incremental/type_change_on_recompile.yaml
@@ -25,6 +25,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import 'lib.dart';
class A extends B with C, D {
A(E parameter) : super.named(parameter);
@@ -32,6 +33,7 @@
mixin C { }
mixin D { }
lib.dart: |
+ // @dart=2.9
class E {}
abstract class B {
final E _field;
diff --git a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
index ca9f7f1..44cbeeb 100644
--- a/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/typedef_crash_01.yaml
@@ -10,9 +10,11 @@
errors: false
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
typedef G<T> = Function(F<T>);
lib.dart: |
+ // @dart=2.9
typedef F<T> = Function();
expectedLibraryCount: 2
- entry: main.dart
@@ -22,6 +24,7 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "lib.dart";
typedef G<T> = Function(F<T>);
main() {
diff --git a/pkg/front_end/testcases/incremental/unused_file.yaml b/pkg/front_end/testcases/incremental/unused_file.yaml
index 1282d0d..c2569c1 100644
--- a/pkg/front_end/testcases/incremental/unused_file.yaml
+++ b/pkg/front_end/testcases/incremental/unused_file.yaml
@@ -12,12 +12,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
main() {
print("hello");
b();
}
b.dart: |
+ // @dart=2.9
b() {
print("b");
}
@@ -27,10 +29,12 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
main() {
print("hello");
}
b.dart: |
+ // @dart=2.9
b() {
print("b");
}
diff --git a/pkg/front_end/testcases/incremental/updated_package_1.yaml b/pkg/front_end/testcases/incremental/updated_package_1.yaml
index 0a24fa7..6950f98 100644
--- a/pkg/front_end/testcases/incremental/updated_package_1.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_1.yaml
@@ -12,12 +12,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -25,6 +27,7 @@
print("v0.1.0");
}
package_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
@@ -39,12 +42,14 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -52,11 +57,13 @@
print("v0.1.0");
}
package_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
}
package_0.1.1/b.dart: |
+ // @dart=2.9
b() {
print("hello from v0.1.1");
}
diff --git a/pkg/front_end/testcases/incremental/updated_package_2.yaml b/pkg/front_end/testcases/incremental/updated_package_2.yaml
index ad7756f..34110ba 100644
--- a/pkg/front_end/testcases/incremental/updated_package_2.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_2.yaml
@@ -12,12 +12,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -25,6 +27,7 @@
print("v0.1.0");
}
package_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
@@ -38,12 +41,14 @@
expectInitializeFromDill: false
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -51,11 +56,13 @@
print("v0.1.0");
}
package_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
}
package_0.1.1/b.dart: |
+ // @dart=2.9
b() {
print("hello from v0.1.1");
}
diff --git a/pkg/front_end/testcases/incremental/updated_package_3.yaml b/pkg/front_end/testcases/incremental/updated_package_3.yaml
index ed1f6ab..faf431e 100644
--- a/pkg/front_end/testcases/incremental/updated_package_3.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_3.yaml
@@ -12,12 +12,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -25,6 +27,7 @@
print("v0.1.0");
}
package_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
@@ -39,6 +42,7 @@
- .packages
sources:
package_0.1.1/b.dart: |
+ // @dart=2.9
b() {
print("hello from v0.1.1");
}
diff --git a/pkg/front_end/testcases/incremental/updated_package_4.yaml b/pkg/front_end/testcases/incremental/updated_package_4.yaml
index 5cb7d9c..4d2fd14 100644
--- a/pkg/front_end/testcases/incremental/updated_package_4.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_4.yaml
@@ -11,12 +11,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package/b.dart: |
+ // @dart=2.9
b() {
print("hello from package");
}
diff --git a/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect b/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
index 8607a05..3dd8e8b 100644
--- a/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/updated_package_4.yaml.world.2.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.
+// org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.
// b();
// ^
//
@@ -12,14 +12,14 @@
static method main() → dynamic {
dart.core::print("hello");
- invalid-expression "org-dartlang-test:///main.dart:4:3: Error: Method not found: 'b'.\n b();\n ^";
+ invalid-expression "org-dartlang-test:///main.dart:5:3: Error: Method not found: 'b'.\n b();\n ^";
}
}
library from "package:example/b.dart" as b {
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:8: Error: Not found: 'package:example/b.dart'
+// org-dartlang-test:///main.dart:2:8: Error: Not found: 'package:example/b.dart'
// import "package:example/b.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/updated_package_uri.yaml b/pkg/front_end/testcases/incremental/updated_package_uri.yaml
index f716e96..f8e7ad9 100644
--- a/pkg/front_end/testcases/incremental/updated_package_uri.yaml
+++ b/pkg/front_end/testcases/incremental/updated_package_uri.yaml
@@ -11,12 +11,14 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:example/b.dart";
main() {
print("hello");
b();
}
package_0.1.0/a.dart: |
+ // @dart=2.9
a() {
la1();
}
@@ -24,6 +26,7 @@
print("v0.1.0");
}
package_0.1.0/b.dart: |
+ // @dart=2.9
import "a.dart";
b() {
a();
@@ -35,6 +38,7 @@
expectInitializeFromDill: false
sources:
package_0.1.1/b.dart: |
+ // @dart=2.9
b() {
print("hello from v0.1.1");
}
diff --git a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
index 22c9d3b..eabf11d 100644
--- a/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
+++ b/pkg/front_end/testcases/incremental/vm_IRTest_TypedDataAOT_FunctionalIndexError.yaml
@@ -9,6 +9,7 @@
- entry: set-Uint8List.dart
sources:
set-Uint8List.dart: |
+ // @dart=2.9
import 'dart:typed_data';
void setUint8List(Uint8List list, int index, int value) {
list[index] = value;
@@ -22,6 +23,7 @@
- set-Int8List.dart
sources:
set-Int8List.dart: |
+ // @dart=2.9
import 'dart:typed_data';
void setInt8List(Int8List list, int index, int value) {
list[index] = value;
@@ -35,6 +37,7 @@
- set-Uint8List.dart
sources:
set-Uint8List.dart: |
+ // @dart=2.9
import 'dart:typed_data';
void setUint8List(Uint8List list, int index, int value) {
list[index] = value;
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
index 9f3b66a..0d6af65 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml
@@ -11,8 +11,10 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
b.dart: |
+ // @dart=2.9
import "nonexisting.dart";
expectedLibraryCount: 2
expectedSyntheticLibraryCount: 1
@@ -22,8 +24,10 @@
- main.dart
sources:
main.dart: |
+ // @dart=2.9
import "b.dart";
b.dart: |
+ // @dart=2.9
import "nonexisting.dart";
expectedLibraryCount: 2
expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
index 3e591c7..a861bfe 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.1.expect
@@ -13,7 +13,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
index 3e591c7..a861bfe 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_1.yaml.world.2.expect
@@ -13,7 +13,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///b.dart:1:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
+// org-dartlang-test:///b.dart:2:8: Error: Error when reading 'org-dartlang-test:///nonexisting.dart': File org-dartlang-test:///nonexisting.dart does not exist.
// import "nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
index 50f16a6..bb4a675 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_2.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "dart:foo/nonexisting.dart";
expectedLibraryCount: 1
expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
index 6d8eb3f..48439c7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
part "dart:foo/nonexisting.dart";
expectedLibraryCount: 1
expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
index 34996e7..95c6981 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_3.yaml.world.1.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-untranslatable-uri:dart%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-untranslatable-uri:dart%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
// part "dart:foo/nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
index 1af29a8..5822b85 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml
@@ -12,6 +12,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
part "package:foo/nonexisting.dart";
expectedLibraryCount: 1
expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
index 76e7779..8b98f2c 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_4.yaml.world.1.expect
@@ -3,7 +3,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Can't use 'org-dartlang-untranslatable-uri:package%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
+// org-dartlang-test:///main.dart:2:6: Error: Can't use 'org-dartlang-untranslatable-uri:package%3Afoo%2Fnonexisting.dart' as a part, because it has no 'part of' declaration.
// part "package:foo/nonexisting.dart";
// ^
//
@@ -14,7 +14,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:6: Error: Not found: 'package:foo/nonexisting.dart'
+// org-dartlang-test:///main.dart:2:6: Error: Not found: 'package:foo/nonexisting.dart'
// part "package:foo/nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
index 9aa7ede..7be194b 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml
@@ -11,6 +11,7 @@
- entry: main.dart
sources:
main.dart: |
+ // @dart=2.9
import "package:foo/nonexisting.dart";
expectedLibraryCount: 1
expectedSyntheticLibraryCount: 1
diff --git a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
index 2ba0d73..48013d7 100644
--- a/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/working_with_synthetic_libraries_5.yaml.world.1.expect
@@ -8,7 +8,7 @@
//
// Problems in library:
//
-// org-dartlang-test:///main.dart:1:8: Error: Not found: 'package:foo/nonexisting.dart'
+// org-dartlang-test:///main.dart:2:8: Error: Not found: 'package:foo/nonexisting.dart'
// import "package:foo/nonexisting.dart";
// ^
//
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
index 4346a6e..2849f6d 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.expect
@@ -11,18 +11,18 @@
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
+// C<
+// ^
//
// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: Expected ';' after this.
+// C<
+// ^
//
// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
// - 'Type' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
index 242ea34..dcaeb52 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.outline.expect
@@ -11,9 +11,9 @@
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
+// C<
+// ^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
index 4346a6e..2849f6d 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.transformed.expect
@@ -11,18 +11,18 @@
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
+// C<
+// ^
//
// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected an identifier, but got '}'.
// Try inserting an identifier before '}'.
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: Expected ';' after this.
+// C<
+// ^
//
// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
// - 'Type' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
index 238ce88..289c890 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.expect
@@ -12,9 +12,9 @@
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000039.dart:9:15: Error: Expected ';' after this.
+// this.a = x.
+// ^
//
// pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
// class B extends A {
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
index 238ce88..289c890 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.transformed.expect
@@ -12,9 +12,9 @@
// }
// ^
//
-// pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/rasta/issue_000039.dart:9:15: Error: Expected ';' after this.
+// this.a = x.
+// ^
//
// pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
// class B extends A {
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
index 2c87a2a..af8ae54 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.expect
@@ -6,9 +6,9 @@
// typedef F = Map<String, dynamic> Function();
// ^^^^^^^
//
-// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
-// typedef F = Map<String, dynamic> Function();
-// ^^^^^^^
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+// ^
//
// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
// typedef T =
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
index 0528f74..d0b75ac 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.outline.expect
@@ -6,9 +6,9 @@
// typedef F = Map<String, dynamic> Function();
// ^^^^^^^
//
-// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
-// typedef F = Map<String, dynamic> Function();
-// ^^^^^^^
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+// ^
//
// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
// typedef T =
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
index 2c87a2a..af8ae54 100644
--- a/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
// typedef F = Map<String, dynamic> Function();
// ^^^^^^^
//
-// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected ';' after this.
-// typedef F = Map<String, dynamic> Function();
-// ^^^^^^^
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+// ^
//
// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-function type.
// typedef T =
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart b/pkg/front_end/testcases/regress/issue_31198.dart
index e0adf99..06128f9 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart
+++ b/pkg/front_end/testcases/regress/issue_31198.dart
@@ -6,6 +6,8 @@
class B extends A {
B(): super().foo() {}
+ B.named1(): super().super() {}
+ B.named2(): super().() {}
}
bad() {
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
index 1059c9e..aa17508 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.textual_outline.expect
@@ -2,6 +2,8 @@
abstract class A {}
class B extends A {
B(): super().foo() {}
+ B.named1(): super().super() {}
+ B.named2(): super().() {}
}
bad() {}
main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
index 3bc5419..ecfe034 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.expect
@@ -2,6 +2,11 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+// B.named2(): super().() {}
+// ^
+//
// pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
// To delegate a constructor to a super constructor, put the super call as an initializer.
// B(): super().foo() {}
@@ -11,6 +16,19 @@
// B(): super().foo() {}
// ^
//
+// pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+// B.named1(): super().super() {}
+// ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+// B.named2(): super().() {}
+// ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an initializer.
+// B.named2(): super().() {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -35,6 +53,15 @@
To delegate a constructor to a super constructor, put the super call as an initializer.
B(): super().foo() {}
^"{dynamic}.foo() {}
+ constructor named1() → self::B*
+ : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+ B.named1(): super().super() {}
+ ^^^^^" {}
+ constructor named2() → self::B*
+ : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+ B.named2(): super().() {}
+ ^" {}
}
static method bad() → dynamic {
new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
index 60bee53..e898940 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.outline.expect
@@ -1,4 +1,12 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+// B.named2(): super().() {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -19,6 +27,10 @@
class B extends self::A {
constructor •() → self::B*
;
+ constructor named1() → self::B*
+ ;
+ constructor named2() → self::B*
+ ;
}
static method bad() → dynamic
;
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
index 3bc5419..ecfe034 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.transformed.expect
@@ -2,6 +2,11 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+// B.named2(): super().() {}
+// ^
+//
// pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
// To delegate a constructor to a super constructor, put the super call as an initializer.
// B(): super().foo() {}
@@ -11,6 +16,19 @@
// B(): super().foo() {}
// ^
//
+// pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+// B.named1(): super().super() {}
+// ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+// B.named2(): super().() {}
+// ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an initializer.
+// B.named2(): super().() {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -35,6 +53,15 @@
To delegate a constructor to a super constructor, put the super call as an initializer.
B(): super().foo() {}
^"{dynamic}.foo() {}
+ constructor named1() → self::B*
+ : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+ B.named1(): super().super() {}
+ ^^^^^" {}
+ constructor named2() → self::B*
+ : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+ B.named2(): super().() {}
+ ^" {}
}
static method bad() → dynamic {
new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect
index c7801f6..6b4145e 100644
--- a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.expect
@@ -24,9 +24,9 @@
// M("${)=
// ^
//
-// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:7: Error: Expected ';' after this.
// M("${)=
-// ^...
+// ^
//
// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Unexpected token ''.
// M("${)=
diff --git a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect
index c7801f6..6b4145e 100644
--- a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.transformed.expect
@@ -24,9 +24,9 @@
// M("${)=
// ^
//
-// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Expected ';' after this.
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:7: Error: Expected ';' after this.
// M("${)=
-// ^...
+// ^
//
// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Unexpected token ''.
// M("${)=
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 9a9f894..7edd205 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1595,6 +1595,7 @@
@override
void transformChildren(Transformer v) {
+ v.transformList(annotations, this);
v.transformList(typeParameters, this);
// ignore: unnecessary_null_comparison
if (onType != null) {
@@ -1604,6 +1605,7 @@
@override
void transformOrRemoveChildren(RemovingTransformer v) {
+ v.transformExpressionList(annotations, this);
v.transformTypeParameterList(typeParameters, this);
// ignore: unnecessary_null_comparison
if (onType != null) {
diff --git a/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart b/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart
index c69323d..fb97b82 100644
--- a/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart
+++ b/pkg/vm_service/test/mark_main_isolate_as_system_isolate_test.dart
@@ -2,6 +2,11 @@
// 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.
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:developer';
+import 'dart:io';
import 'dart:isolate';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart' as service;
@@ -9,31 +14,33 @@
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
-foo(void _) async {
- print('non system isolate started');
- while (true) {}
-}
-
testMain() async {
- await Isolate.spawn<void>(foo, null);
- print('started system isolate main');
- while (true) {}
+ await Isolate.spawnUri(Platform.script, ['--selftest'], null,
+ debugName: 'foo');
}
-var tests = <VMTest>[
- (service.VmService service) async {
+var tests = <IsolateTest>[
+ hasStoppedAtBreakpoint,
+ (service.VmService service, _) async {
final vm = await service.getVM();
expect(vm.isolates!.length, 1);
expect(vm.isolates!.first.name, 'foo');
expect(vm.systemIsolates!.length, greaterThanOrEqualTo(1));
expect(vm.systemIsolates!.where((e) => e.name == 'main').isNotEmpty, true);
- }
+ },
+ resumeIsolate,
];
-main([args = const <String>[]]) => runVMTests(
- args,
- tests,
- 'mark_main_isolate_as_system_isolate_test.dart',
- testeeConcurrent: testMain,
- extraArgs: ['--mark-main-isolate-as-system-isolate'],
- );
+main([args = const <String>[]]) {
+ if (args.length > 0 && args[0] == '--selftest') {
+ debugger();
+ return;
+ }
+ return runIsolateTests(
+ args,
+ tests,
+ 'mark_main_isolate_as_system_isolate_test.dart',
+ testeeConcurrent: testMain,
+ extraArgs: ['--mark-main-isolate-as-system-isolate'],
+ );
+}
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 234fa62..b779f80 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -369,10 +369,15 @@
#endif // !defined(DART_PRECOMPILED_RUNTIME)
}
- if (Options::gen_snapshot_kind() == kAppJIT) {
+ if (Options::gen_snapshot_kind() == kAppJIT && !isolate_run_app_snapshot) {
// If we sort, we must do it for all isolates, not just the main isolate,
// otherwise isolates related by spawnFunction will disagree on CIDs and
- // cannot correctly send each other messages.
+ // cannot correctly send each other messages. If we run from an app
+ // snapshot, things are already sorted, and other isolate created by
+ // spawnFunction will also load from the same snapshot. Sorting such isolate
+ // is counter-productive because it invalidates their code.
+ // After we switch to always using isolate groups, this be changed to
+ // `generating-app-jit && is_main_isolate`.
result = Dart_SortClasses();
CHECK_RESULT(result);
}
@@ -928,6 +933,19 @@
void RunMainIsolate(const char* script_name,
const char* package_config_override,
CommandLineOptions* dart_options) {
+ if (script_name != NULL) {
+ const char* base_name = strrchr(script_name, '/');
+ if (base_name == NULL) {
+ base_name = script_name;
+ } else {
+ base_name++; // Skip '/'.
+ }
+ const intptr_t kMaxNameLength = 64;
+ char name[kMaxNameLength];
+ Utils::SNPrint(name, kMaxNameLength, "dart:%s", base_name);
+ Platform::SetProcessName(name);
+ }
+
// Call CreateIsolateGroupAndSetup which creates an isolate and loads up
// the specified application script.
char* error = NULL;
diff --git a/runtime/bin/platform.h b/runtime/bin/platform.h
index a34db67..68723c2 100644
--- a/runtime/bin/platform.h
+++ b/runtime/bin/platform.h
@@ -108,6 +108,8 @@
static int GetScriptIndex() { return script_index_; }
static char** GetArgv() { return argv_; }
+ static void SetProcessName(const char* name);
+
DART_NORETURN static void Exit(int exit_code);
static void SetCoreDumpResourceLimit(int value);
diff --git a/runtime/bin/platform_android.cc b/runtime/bin/platform_android.cc
index a9a5cda..dbbae40 100644
--- a/runtime/bin/platform_android.cc
+++ b/runtime/bin/platform_android.cc
@@ -7,13 +7,14 @@
#include "bin/platform.h"
-#include <errno.h> // NOLINT
-#include <signal.h> // NOLINT
-#include <string.h> // NOLINT
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/prctl.h>
#include <sys/resource.h>
#include <sys/system_properties.h>
-#include <sys/utsname.h> // NOLINT
-#include <unistd.h> // NOLINT
+#include <sys/utsname.h>
+#include <unistd.h>
#include "bin/console.h"
#include "bin/file.h"
@@ -158,6 +159,10 @@
return File::ReadLinkInto("/proc/self/exe", result, result_size);
}
+void Platform::SetProcessName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name), 0, 0, 0); // NOLINT
+}
+
void Platform::Exit(int exit_code) {
Console::RestoreConfig();
Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_fuchsia.cc b/runtime/bin/platform_fuchsia.cc
index 47c1907..2c12818 100644
--- a/runtime/bin/platform_fuchsia.cc
+++ b/runtime/bin/platform_fuchsia.cc
@@ -150,6 +150,11 @@
return -1;
}
+void Platform::SetProcessName(const char* name) {
+ zx_object_set_property(zx_process_self(), ZX_PROP_NAME, name,
+ Utils::Minimum(strlen(name), ZX_MAX_NAME_LEN));
+}
+
void Platform::Exit(int exit_code) {
Console::RestoreConfig();
Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_linux.cc b/runtime/bin/platform_linux.cc
index adbfac1..84cf46c 100644
--- a/runtime/bin/platform_linux.cc
+++ b/runtime/bin/platform_linux.cc
@@ -7,12 +7,13 @@
#include "bin/platform.h"
-#include <errno.h> // NOLINT
-#include <signal.h> // NOLINT
-#include <string.h> // NOLINT
-#include <sys/resource.h> // NOLINT
-#include <sys/utsname.h> // NOLINT
-#include <unistd.h> // NOLINT
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/prctl.h>
+#include <sys/resource.h>
+#include <sys/utsname.h>
+#include <unistd.h>
#include "bin/console.h"
#include "bin/file.h"
@@ -165,6 +166,10 @@
return File::ReadLinkInto("/proc/self/exe", result, result_size);
}
+void Platform::SetProcessName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name), 0, 0, 0); // NOLINT
+}
+
void Platform::Exit(int exit_code) {
Console::RestoreConfig();
Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 8083949..26f40a4 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -328,6 +328,8 @@
return path_size;
}
+void Platform::SetProcessName(const char* name) {}
+
void Platform::Exit(int exit_code) {
Console::RestoreConfig();
Dart_PrepareToAbort();
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index 515a569..b407cd2 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -302,6 +302,8 @@
return -1;
}
+void Platform::SetProcessName(const char* name) {}
+
void Platform::Exit(int exit_code) {
// Restore the console's output code page
Console::RestoreConfig();
diff --git a/runtime/observatory/tests/service/breakpoint_gc_test.dart b/runtime/observatory/tests/service/breakpoint_gc_test.dart
new file mode 100644
index 0000000..6e11cbf
--- /dev/null
+++ b/runtime/observatory/tests/service/breakpoint_gc_test.dart
@@ -0,0 +1,53 @@
+// 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 'test_helper.dart';
+import 'service_test_common.dart';
+
+const int LINE_A = 16;
+const int LINE_B = 19;
+const int LINE_C = 22;
+const String file = "breakpoint_gc_test.dart";
+
+foo() => 42;
+
+testeeMain() {
+ foo(); // static call
+
+ dynamic list = [1, 2, 3];
+ list.clear(); // instance call
+ print(list);
+
+ dynamic local = list; // debug step check = runtime call
+ return local;
+}
+
+Future forceGC(isolate) async {
+ await isolate.invokeRpcNoUpgrade("_collectAllGarbage", {});
+}
+
+var tests = <IsolateTest>[
+ hasPausedAtStart,
+ setBreakpointAtUriAndLine(file, LINE_A), // at `foo()`
+ setBreakpointAtUriAndLine(file, LINE_B), // at `list.clear()`
+ setBreakpointAtUriAndLine(file, LINE_C), // at `local = list`
+ resumeIsolate,
+ hasStoppedAtBreakpoint,
+ stoppedAtLine(LINE_A),
+ forceGC, // Should not crash
+ resumeIsolate,
+ hasStoppedAtBreakpoint,
+ stoppedAtLine(LINE_B),
+ forceGC, // Should not crash
+ resumeIsolate,
+ hasStoppedAtBreakpoint,
+ stoppedAtLine(LINE_C),
+ forceGC, // Should not crash
+ resumeIsolate,
+];
+
+main(args) {
+ runIsolateTestsSynchronous(args, tests,
+ testeeConcurrent: testeeMain, pause_on_start: true);
+}
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 14d202d..c6e2222 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -52,6 +52,7 @@
break_on_function_many_child_isolates_test: SkipByDesign # Debugger is disabled in AOT mode.
break_on_function_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_async_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_gc_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_in_package_parts_class_file_uri_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_in_package_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_in_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
diff --git a/runtime/observatory_2/tests/service_2/breakpoint_gc_test.dart b/runtime/observatory_2/tests/service_2/breakpoint_gc_test.dart
new file mode 100644
index 0000000..6e11cbf
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/breakpoint_gc_test.dart
@@ -0,0 +1,53 @@
+// 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 'test_helper.dart';
+import 'service_test_common.dart';
+
+const int LINE_A = 16;
+const int LINE_B = 19;
+const int LINE_C = 22;
+const String file = "breakpoint_gc_test.dart";
+
+foo() => 42;
+
+testeeMain() {
+ foo(); // static call
+
+ dynamic list = [1, 2, 3];
+ list.clear(); // instance call
+ print(list);
+
+ dynamic local = list; // debug step check = runtime call
+ return local;
+}
+
+Future forceGC(isolate) async {
+ await isolate.invokeRpcNoUpgrade("_collectAllGarbage", {});
+}
+
+var tests = <IsolateTest>[
+ hasPausedAtStart,
+ setBreakpointAtUriAndLine(file, LINE_A), // at `foo()`
+ setBreakpointAtUriAndLine(file, LINE_B), // at `list.clear()`
+ setBreakpointAtUriAndLine(file, LINE_C), // at `local = list`
+ resumeIsolate,
+ hasStoppedAtBreakpoint,
+ stoppedAtLine(LINE_A),
+ forceGC, // Should not crash
+ resumeIsolate,
+ hasStoppedAtBreakpoint,
+ stoppedAtLine(LINE_B),
+ forceGC, // Should not crash
+ resumeIsolate,
+ hasStoppedAtBreakpoint,
+ stoppedAtLine(LINE_C),
+ forceGC, // Should not crash
+ resumeIsolate,
+];
+
+main(args) {
+ runIsolateTestsSynchronous(args, tests,
+ testeeConcurrent: testeeMain, pause_on_start: true);
+}
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index 6b1b364..83eb2d1 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -52,6 +52,7 @@
break_on_function_many_child_isolates_test: SkipByDesign # Debugger is disabled in AOT mode.
break_on_function_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_async_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_gc_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_in_package_parts_class_file_uri_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_in_package_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
breakpoint_in_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 869c233..80ae9a9 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -321,11 +321,6 @@
"../../../tests/corelib/num_parse_test.dart",
"../../../tests/corelib/num_sign_test.dart",
"../../../tests/corelib/num_try_parse_test.dart",
- "../../../tests/corelib/queue_first_test.dart",
- "../../../tests/corelib/queue_iterator_test.dart",
- "../../../tests/corelib/queue_last_test.dart",
- "../../../tests/corelib/queue_single_test.dart",
- "../../../tests/corelib/queue_test.dart",
"../../../tests/corelib/range_error_test.dart",
"../../../tests/corelib/reg_exp1_test.dart",
"../../../tests/corelib/reg_exp5_test.dart",
@@ -3103,6 +3098,11 @@
"../../../tests/lib/collection/hash_set_test.dart",
"../../../tests/lib/collection/linked_list_test.dart",
"../../../tests/lib/collection/list_test.dart",
+ "../../../tests/lib/collection/queue_first_test.dart",
+ "../../../tests/lib/collection/queue_iterator_test.dart",
+ "../../../tests/lib/collection/queue_last_test.dart",
+ "../../../tests/lib/collection/queue_single_test.dart",
+ "../../../tests/lib/collection/queue_test.dart",
"../../../tests/lib/convert/ascii_test.dart",
"../../../tests/lib/convert/base64_test.dart",
"../../../tests/lib/convert/chunked_conversion1_test.dart",
@@ -3734,11 +3734,6 @@
"../../../tests/corelib_2/num_parse_test.dart",
"../../../tests/corelib_2/num_sign_test.dart",
"../../../tests/corelib_2/num_try_parse_test.dart",
- "../../../tests/corelib_2/queue_first_test.dart",
- "../../../tests/corelib_2/queue_iterator_test.dart",
- "../../../tests/corelib_2/queue_last_test.dart",
- "../../../tests/corelib_2/queue_single_test.dart",
- "../../../tests/corelib_2/queue_test.dart",
"../../../tests/corelib_2/range_error_test.dart",
"../../../tests/corelib_2/reg_exp1_test.dart",
"../../../tests/corelib_2/reg_exp4_test.dart",
@@ -6443,6 +6438,11 @@
"../../../tests/lib_2/collection/hash_set_test.dart",
"../../../tests/lib_2/collection/linked_list_test.dart",
"../../../tests/lib_2/collection/list_test.dart",
+ "../../../tests/lib_2/collection/queue_first_test.dart",
+ "../../../tests/lib_2/collection/queue_iterator_test.dart",
+ "../../../tests/lib_2/collection/queue_last_test.dart",
+ "../../../tests/lib_2/collection/queue_single_test.dart",
+ "../../../tests/lib_2/collection/queue_test.dart",
"../../../tests/lib_2/convert/ascii_test.dart",
"../../../tests/lib_2/convert/base64_test.dart",
"../../../tests/lib_2/convert/chunked_conversion1_test.dart",
diff --git a/runtime/tests/vm/dart/regress_46790_test.dart b/runtime/tests/vm/dart/regress_46790_test.dart
new file mode 100644
index 0000000..ba2cfa5
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_46790_test.dart
@@ -0,0 +1,120 @@
+// 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.
+
+/// VMOptions=--stacktrace_every=137 --deterministic
+
+// Reduced from
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+// dart dartfuzz.dart --seed 2528999334 --no-fp --no-ffi --no-flat
+
+int var73 = -9223372034707292159;
+String var81 = 'E4yq0';
+Map<Expando<int>, int> var531 = <Expando<int>,int>{
+ Expando<int>('NX') : 2147483648,
+ Expando<int>('Gy') : 0,
+ Expando<int>('DDp670v') : 40,
+ Expando<int>('zS(') : -9223372036854775807
+};
+Map<Map<bool, int>, Expando<int>> var1077 = <Map<bool, int>,Expando<int>>{
+ <bool,int>{
+ true : -74,
+ false : -65,
+ true : 7
+ } : Expando<int>('cteN2')
+};
+Map<MapEntry<int, int>, int> var1791 = <MapEntry<int, int>,int>{
+ MapEntry<int, int>(31, 45) : 13,
+ MapEntry<int, int>(10, 37) : 43
+};
+Map<MapEntry<String, bool>, int> var1911 = <MapEntry<String, bool>,int>{
+ MapEntry<String, bool>('uD', false) : 47,
+ MapEntry<String, bool>('LdL', false) : -11,
+ MapEntry<String, bool>('RO(9', false) : -92,
+ MapEntry<String, bool>('', true) : -9223372032559808513,
+ MapEntry<String, bool>('F6eH', false) : -9223372032559808512,
+ MapEntry<String, bool>('d', false) : -39
+};
+Map<MapEntry<String, int>, int>? var1972 = null;
+Map<MapEntry<String, String>, MapEntry<int, bool>> var2077 = <MapEntry<String, String>,MapEntry<int, bool>>{
+ MapEntry<String, String>('M', '') : MapEntry<int, bool>(1, true),
+ new MapEntry<String, String>('n8)mj', '') : MapEntry<int, bool>(24, true),
+ MapEntry<String, String>('', 'q9KjW') : MapEntry<int, bool>(21, false),
+ MapEntry<String, String>('C', 'k5x') : new MapEntry<int, bool>(21, false)
+};
+MapEntry<Expando<bool>, Map<String, bool>> var2287 = MapEntry<Expando<bool>, Map<String, bool>>(Expando<bool>('5E\u{1f600}\u2665'), <String,bool>{
+ 'w\u266537L' : true,
+ 'Rfu' : false,
+ ')JI+q&' : true,
+ 'Z)@a\u2665V' : true,
+ '3+3WP' : true
+});
+MapEntry<Map<bool, String>, Expando<bool>>? var2918 = MapEntry<Map<bool, String>, Expando<bool>>(<bool,String>{
+ true : '3rVO( ',
+ true : '+9psp57'
+}, Expando<bool>('d'));
+MapEntry<Map<int, bool>, Map<int, String>>? var3006 = MapEntry<Map<int, bool>, Map<int, String>>(<int,bool>{
+ 18 : false,
+ -32 : true,
+ -32 : false,
+ 31 : false,
+ -50 : false
+}, <int,String>{
+ -37 : '',
+ 12 : 'viG4s',
+ 4294967297 : '\u2665YGL12',
+ 11 : 'G',
+ 31 : 'hdQ',
+ -2147483649 : 'JMsv'
+});
+
+MapEntry<MapEntry<bool, int>, Map<String, int>>? var3430 = MapEntry<MapEntry<bool, int>, Map<String, int>>(MapEntry<bool, int>(true, 29), <String,int>{
+ 'k' : -31,
+ '' : 0,
+ '\u{1f600}u3IJ ' : 12,
+ '' : -89,
+ 'G&5' : 39
+});
+
+class X0 {
+ Map<MapEntry<String, int>, int>? foo0_1(int par1){
+ if (par1 >= 49) {
+ return var1972;
+ }
+
+ {
+ int loc0 = 0;
+ do {
+ var2077.forEach((loc1, loc2){});
+ } while (++loc0 < 41);
+ }
+
+ for (int loc0 = 0; loc0 < 49; loc0++) {
+ try {
+ var3430 = MapEntry<MapEntry<bool, int>, Map<String, int>>(MapEntry<bool, int>(true, 11), <String,int>{
+ 'tocS' : (true ? var73 : var1911[MapEntry<String, bool>('CZ\u2665G4Ra', true)]!),
+ '\u{1f600}UnA#' : var531[var1077[const <bool,int>{
+ false : -73
+ }]!]!,
+ });
+ } catch (exception, stackTrace) {
+ var3006 = var3006;
+ var2918 = var2918;
+ }
+
+ var1791.forEach((loc2, loc3){});
+ }
+
+ return foo0_1(par1 + 1);
+ }
+}
+
+
+main() {
+ try {
+ X0().foo0_1(0);
+ } catch (e, st) {
+ print('X0().foo0_1 throws');
+ }
+}
diff --git a/runtime/tests/vm/dart/regress_47010_test.dart b/runtime/tests/vm/dart/regress_47010_test.dart
new file mode 100644
index 0000000..108ead2
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_47010_test.dart
@@ -0,0 +1,285 @@
+// 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.
+
+// VMOptions=--use_slow_path --deterministic
+
+// Reduced from:
+// The Dart Project Fuzz Tester (1.91).
+// Program generated as:
+// dart dartfuzz.dart --seed 1339276199 --no-fp --no-ffi --no-flat
+// @dart=2.14
+
+import 'dart:collection';
+import 'dart:typed_data';
+
+MapEntry<Map<bool, int>, List<String>>? var0 =
+ MapEntry<Map<bool, int>, List<String>>(
+ <bool, int>{true: -32, true: 47, false: -11, false: 9, false: -69},
+ <String>['n', 'Rz!4\u2665']);
+Uint8List? var9 = Uint8List.fromList(Uint64List.fromList(
+ Int64List.fromList(Int16List.fromList(Int16List.fromList(Uint8List(38))))));
+Uint8ClampedList var10 = Uint8ClampedList.fromList(
+ Int32List.fromList(Uint64List.fromList(<int>[-27, -74])));
+Uint8ClampedList? var11 = Uint8ClampedList(31);
+Int16List var12 = Int16List(5);
+Int16List? var13 = Int16List(44);
+Uint16List var14 = Uint16List.fromList(<int>[-96, 24, -43, -9]);
+Uint16List? var15 = Uint16List.fromList(Int8List.fromList(Int32List(34)));
+Int32List var16 = Int32List(7);
+Int32List? var17 =
+ Int32List.fromList(<int>[-67, if (false) -98 else -36, -4294967295]);
+Uint32List var18 = Uint32List(28);
+Uint32List? var19 = Uint32List(18);
+Int64List var20 = Int64List.fromList(Uint64List.fromList(Uint16List(47)));
+Int64List? var21 = Int64List(1);
+Uint64List var22 = Uint64List(49);
+Uint64List? var23 = Uint64List(43);
+Int32x4List var24 = Int32x4List(45);
+Int32x4List? var25 = Int32x4List(46);
+Int32x4 var26 = Int32x4(46, 24, 23, 15);
+Int32x4? var27 = Int32x4(20, 28, 20, 2);
+Deprecated var28 = Deprecated('G-Ki');
+Deprecated? var29 = Deprecated('#Ww');
+Provisional var30 = Provisional();
+Provisional? var31 = Provisional();
+bool var32 = bool.fromEnvironment('');
+bool? var33 = bool.hasEnvironment('P9LY');
+Duration var34 = Duration();
+Duration? var35 = Duration();
+Error var36 = Error();
+Error? var37 = Error();
+AssertionError var38 = AssertionError(17);
+AssertionError? var39 = AssertionError(8);
+TypeError var40 = TypeError();
+TypeError? var41 = TypeError();
+CastError var42 = CastError();
+CastError? var43 = new CastError();
+NullThrownError var44 = NullThrownError();
+NullThrownError? var45 = new NullThrownError();
+ArgumentError var46 = ArgumentError.value(22, 'K90\u{1f600}QtS', 33);
+ArgumentError? var47 = ArgumentError.notNull(')');
+RangeError var48 = RangeError.range(2, 23, 36, 'H', 'w&');
+RangeError? var49 = new RangeError(22);
+IndexError var50 = IndexError(15, 14, 'ZuC', '#1z9xJ', 1);
+IndexError? var51 = IndexError(14, 36, 'V(', '9Jf!0\u2665', 2);
+FallThroughError var52 = FallThroughError();
+FallThroughError? var53 = FallThroughError();
+AbstractClassInstantiationError var54 = AbstractClassInstantiationError('J!');
+AbstractClassInstantiationError? var55 =
+ AbstractClassInstantiationError('L48ynpV');
+UnsupportedError var56 = UnsupportedError('5txzg');
+UnsupportedError? var57 = UnsupportedError('W4vVdfv');
+UnimplementedError var58 = UnimplementedError('pK00TI\u2665');
+UnimplementedError? var59 = UnimplementedError('J(teto2');
+StateError var60 = StateError('L\u2665');
+StateError? var61 = StateError('e\u2665mykMK');
+ConcurrentModificationError var62 = new ConcurrentModificationError(22);
+ConcurrentModificationError? var63 = ConcurrentModificationError(7);
+StackOverflowError var64 = StackOverflowError();
+StackOverflowError? var65 = new StackOverflowError();
+CyclicInitializationError var66 = CyclicInitializationError('\u{1f600}');
+CyclicInitializationError? var67 = CyclicInitializationError('C');
+Exception var68 = Exception(14);
+Exception? var69 = Exception(40);
+FormatException var70 = FormatException('\u{1f600}lv32', 21, 28);
+FormatException? var71 = FormatException('e', 19, 12);
+IntegerDivisionByZeroException var72 = IntegerDivisionByZeroException();
+IntegerDivisionByZeroException? var73 = IntegerDivisionByZeroException();
+int var74 = 40;
+int? var75 = -44;
+Null var76 = null;
+Null? var77 = null;
+num var78 = 42;
+num? var79 = -85;
+RegExp var80 = new RegExp('M5O');
+RegExp? var81 = RegExp('Fs2');
+String var82 = 'W6';
+String? var83 = 'h';
+Runes var84 = Runes('+');
+Runes? var85 = Runes('');
+RuneIterator var86 = RuneIterator('\u2665w');
+RuneIterator? var87 = new RuneIterator('iNEK\u{1f600}');
+StringBuffer var88 = StringBuffer(47);
+StringBuffer? var89 = StringBuffer(5);
+Symbol var90 = new Symbol('q\u{1f600}');
+Symbol? var91 = new Symbol('&j5');
+Expando<bool> var92 = Expando<bool>(' ');
+Expando<bool>? var93 = Expando<bool>('f5B');
+Expando<int> var94 = Expando<int>('');
+Expando<int>? var95 = Expando<int>('\u{1f600}1AwU\u2665C');
+Expando<String> var96 = Expando<String>('Xzj(d');
+Expando<String>? var97 = Expando<String>('Ulsd');
+List<bool> var98 = <bool>[false, false, false];
+List<bool>? var99 = <bool>[false, false, false, true];
+List<int> var100 = Uint8ClampedList(17);
+List<int>? var101 = Uint8ClampedList(40);
+List<String> var102 = <String>['Y h', 'f', '\u{1f600}ip dQ', ')p', '2Qo'];
+List<String>? var103 = <String>[
+ 'BQ(6-',
+ '\u{1f600}6\u2665yJaC',
+ '3wa',
+ 'VJ',
+ 'k',
+ ''
+];
+Set<bool> var104 = <bool>{false, true, false};
+Set<bool>? var105 = <bool>{false, true, false, true, false, false};
+Set<int> var106 = <int>{44, 11};
+Set<int>? var107 = <int>{if (false) -94, 35};
+Set<String> var108 = <String>{''};
+Set<String>? var109 = <String>{'4'};
+Map<bool, bool> var110 = <bool, bool>{
+ false: true,
+ false: true,
+ false: true,
+ true: false
+};
+Map<bool, bool>? var111 = <bool, bool>{
+ false: false,
+ true: false,
+ false: false,
+ true: false
+};
+Map<bool, int> var112 = <bool, int>{
+ true: 35,
+ true: -4,
+ true: -14,
+ false: 30,
+ false: -25
+};
+Map<bool, int>? var113 = null;
+Map<bool, String> var114 = <bool, String>{
+ false: '7d',
+ false: '\u{1f600}sv+',
+ false: 'aY',
+ false: 'dt'
+};
+Map<bool, String>? var115 = <bool, String>{
+ false: '',
+ false: '(G7\u{1f600}TBN',
+ true: '',
+ true: 'zZ-\u{1f600}\u2665)X',
+ false: ')-9',
+ false: ''
+};
+Map<int, bool> var116 = <int, bool>{
+ 3: true,
+ 10: true,
+ -59: true,
+ 15: false,
+ -36: true
+};
+Map<int, bool>? var117 = <int, bool>{16: false, 0: false};
+Map<int, int> var118 = <int, int>{
+ -92: 29,
+ -12: 40,
+ -29: -26,
+ -21: 1,
+ 13: 28,
+ 28: -44
+};
+Map<int, int>? var119 = <int, int>{-54: -37};
+Map<int, String> var120 = <int, String>{-80: '', -62: 'h', 40: 'C\u2665FVU'};
+Map<int, String>? var121 = <int, String>{
+ ...<int, String>{
+ -8: 'S\u{1f600}kjRb',
+ 23: '4',
+ -9223372034707292160: '',
+ 28: 'uz',
+ -69: '@'
+ },
+ -53: 'nU6f',
+ -5: '',
+ -9223372034707292159: '',
+ 20: 'h7EB+'
+};
+Map<String, bool> var122 = <String, bool>{'8+G': false};
+Map<String, bool>? var123 = <String, bool>{'rM9m6k': true, '2': true};
+Map<String, int> var124 = <String, int>{'Z+p@\u2665Ww': -55};
+Map<String, int>? var125 = <String, int>{'9': -2147483647, 'uQ': 40};
+Map<String, String> var126 = <String, String>{
+ 'Q!': ' V\u{1f600}A2\u{1f600}',
+ 'z': '\u2665)',
+ 'cM@7\u{1f600}': 'XUT',
+ 'oLoh': 'bLPrZ',
+ 'YmR67nj': 'BdeuR'
+};
+Map<String, String>? var127 = <String, String>{'nOsSM1': '3 @yIj'};
+MapEntry<bool, bool> var128 = MapEntry<bool, bool>(true, false);
+MapEntry<bool, bool>? var129 = MapEntry<bool, bool>(true, false);
+MapEntry<bool, int> var130 = MapEntry<bool, int>(false, 13);
+MapEntry<bool, int>? var131 = MapEntry<bool, int>(true, 31);
+MapEntry<bool, String> var132 =
+ MapEntry<bool, String>(true, '\u26653KE\u{1f600}');
+MapEntry<bool, String>? var133 = MapEntry<bool, String>(false, 'd');
+MapEntry<int, bool> var134 = MapEntry<int, bool>(46, true);
+MapEntry<int, bool>? var135 = MapEntry<int, bool>(34, false);
+MapEntry<int, int> var136 = MapEntry<int, int>(22, 30);
+MapEntry<int, int>? var137 = MapEntry<int, int>(30, 48);
+MapEntry<int, String> var138 = MapEntry<int, String>(46, 'by#@-nv');
+MapEntry<int, String>? var139 = MapEntry<int, String>(49, 'N@KF');
+MapEntry<String, bool> var140 =
+ MapEntry<String, bool>('\u{1f600}km\u2665', true);
+MapEntry<String, bool>? var141 = new MapEntry<String, bool>('7PZX', false);
+MapEntry<String, int> var142 = new MapEntry<String, int>('OE', 27);
+
+Map<String, Map<String, bool>> var446 = <String, Map<String, bool>>{
+ 'YJ\u{1f600}': <String, bool>{'BcKzE': true, 'Cz1A+n': false, '': true},
+ 'u!KEz9I': <String, bool>{
+ '\u26653Hjr': true,
+ '-\u{1f600}': true,
+ '': true,
+ ')-': false,
+ 'ygN': true
+ },
+ '+R6': <String, bool>{'ta\u2665dKu)': true, 'rao9j': true},
+ 'YGXS!': <String, bool>{
+ '': false,
+ '6R': false,
+ '': true,
+ 'MV\u{1f600} PP': true
+ }
+};
+Map<MapEntry<String, int>, Map<int, bool>> var2000 =
+ <MapEntry<String, int>, Map<int, bool>>{
+ new MapEntry<String, int>('', 7): <int, bool>{
+ -55: true,
+ 4294967295: false,
+ 48: true,
+ -1: true,
+ -96: false
+ },
+ MapEntry<String, int>('ORLVr', 1): <int, bool>{
+ -21: false,
+ 4294967297: false,
+ -12: false,
+ -84: false
+ }
+};
+
+void foo1_Extension0() {
+ var446.forEach((loc0, loc1) {
+ for (int loc2 = 0; loc2 < 34; loc2++) {
+ print(<MapEntry<bool, bool>, String>{
+ MapEntry<bool, bool>(true, false): 'pqKqb',
+ MapEntry<bool, bool>(true, true): 'Fkx',
+ MapEntry<bool, bool>(true, false): '',
+ MapEntry<bool, bool>(false, true): 'fJvVWOW',
+ MapEntry<bool, bool>(false, true): 'q\u2665NR',
+ MapEntry<bool, bool>(false, true): '\u2665'
+ });
+ var2000.forEach((loc3, loc4) {
+ print(MapEntry<Map<bool, String>, MapEntry<int, bool>>(
+ <bool, String>{false: 'L'}, MapEntry<int, bool>(42, false)));
+ });
+ }
+ });
+}
+
+main() {
+ foo1_Extension0();
+
+ print(
+ '$var0\n$var9\n$var11\n$var12\n$var13\n$var14\n$var15\n$var16\n$var17\n$var18\n$var19\n$var20\n$var21\n$var22\n$var23\n$var24\n$var25\n$var26\n$var27\n$var28\n$var29\n$var30\n$var31\n$var32\n$var33\n$var34\n$var35\n$var36\n$var37\n$var38\n$var39\n$var40\n$var41\n$var42\n$var43\n$var44\n$var45\n$var46\n$var47\n$var48\n$var49\n$var50\n$var51\n$var52\n$var53\n$var54\n$var55\n$var56\n$var57\n$var58\n$var59\n$var60\n$var61\n$var62\n$var63\n$var64\n$var65\n$var66\n$var67\n$var68\n$var69\n$var70\n$var71\n$var72\n$var73\n$var74\n$var75\n$var76\n$var77\n$var78\n$var79\n$var80\n$var81\n$var82\n$var83\n$var84\n$var85\n$var86\n$var87\n$var88\n$var89\n$var90\n$var91\n$var92\n$var93\n$var94\n$var95\n$var96\n$var97\n$var98\n$var99\n$var100\n$var101\n$var102\n$var103\n$var104\n$var105\n$var106\n$var107\n$var108\n$var109\n$var110\n$var111\n$var112\n$var113\n$var114\n$var115\n$var116\n$var117\n$var118\n$var119\n$var120\n$var121\n$var122\n$var123\n$var124\n$var125\n$var126\n$var127\n$var128\n$var129\n$var130\n$var131\n$var132\n');
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 64d0769..620a356 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -273,8 +273,10 @@
[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
dart/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
-dart/regress_45898_test: Pass, Slow
dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
+
+[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $builder_tag == tsan) ]
+dart/regress_45898_test: Pass, Slow
dart_2/regress_45898_test: Pass, Slow
[ $compiler == dartkp && ($runtime == dart_precompiled || $runtime == vm) ]
diff --git a/runtime/tools/dartfuzz/dartfuzz.dart b/runtime/tools/dartfuzz/dartfuzz.dart
index be82ace..c2e2d6c 100644
--- a/runtime/tools/dartfuzz/dartfuzz.dart
+++ b/runtime/tools/dartfuzz/dartfuzz.dart
@@ -14,7 +14,7 @@
// Version of DartFuzz. Increase this each time changes are made
// to preserve the property that a given version of DartFuzz yields
// the same fuzzed program for a deterministic random seed.
-const String version = '1.91';
+const String version = '1.92';
// Restriction on statements and expressions.
const int stmtDepth = 1;
@@ -1003,11 +1003,10 @@
emitNewline();
emitTryCatchFinally(() {
- var body = '';
for (var i = 0; i < globalVars.length; i++) {
- body += '\$$varName$i\\n';
+ emitPrint('$varName$i: \$$varName$i');
+ emitNewline();
}
- emitPrint('$body');
}, () => emitPrint('print() throws'));
});
@@ -1100,7 +1099,7 @@
}
emitIndentation();
// Emit a variable of the lhs type.
- final emittedVar = emitVar(0, tp, isLhs: true)!;
+ final emittedVar = emitVar(0, tp, isLhs: true, assignOp: assignOp)!;
var rhsFilter = RhsFilter.fromDartType(tp, emittedVar);
emit(' $assignOp ');
// Select one of the possible rhs types for the given lhs type and assign
@@ -1142,9 +1141,12 @@
// Emit a throw statement.
bool emitThrow() {
- var tp = oneOfSet(dartType.allTypes);
+ var tp;
+ do {
+ tp = oneOfSet(dartType.allTypes).toNonNullable();
+ } while (tp == DartType.NULL);
emitLn('throw ', newline: false);
- emitExpr(0, tp.toNonNullable(), includeSemicolon: true);
+ emitExpr(0, tp, includeSemicolon: true);
return false;
}
@@ -1890,12 +1892,20 @@
}
String? emitSubscriptedVar(int depth, DartType tp,
- {bool isLhs = false, RhsFilter? rhsFilter}) {
+ {bool isLhs = false, String? assignOp, RhsFilter? rhsFilter}) {
String? ret;
// Check if type tp is an indexable element of some other type.
if (dartType.isIndexableElementType(tp)) {
// Select a list or map type that contains elements of type tp.
- final iterType = oneOfSet(dartType.indexableElementTypes(tp));
+ var iterType = oneOfSet(dartType.indexableElementTypes(tp));
+ // For `collection[key] <op>= value` to work, collection must not be a
+ // Map or Expando because their subscript operators return a nullable
+ // type.
+ if (assignOp != null && assignOp != "=") {
+ while (!DartType.isListType(iterType)) {
+ iterType = oneOfSet(dartType.indexableElementTypes(tp));
+ }
+ }
// Get the index type for the respective list or map type.
final indexType = dartType.indexType(iterType);
// Emit a variable of the selected list or map type.
@@ -1920,14 +1930,14 @@
}
String? emitVar(int depth, DartType tp,
- {bool isLhs = false, RhsFilter? rhsFilter}) {
+ {bool isLhs = false, String? assignOp, RhsFilter? rhsFilter}) {
switch (choose(2)) {
case 0:
return emitScalarVar(tp, isLhs: isLhs, rhsFilter: rhsFilter);
break;
default:
return emitSubscriptedVar(depth, tp,
- isLhs: isLhs, rhsFilter: rhsFilter);
+ isLhs: isLhs, assignOp: assignOp, rhsFilter: rhsFilter);
break;
}
}
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index fc99bfc..dfe4a43 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -3261,10 +3261,18 @@
(compiler->CurrentTryIndex() != kInvalidTryIndex)) {
Environment* env =
compiler->SlowPathEnvironmentFor(instruction(), num_args);
- if (FLAG_precompiled_mode) {
+ // TODO(47044): Should be able to say `FLAG_precompiled_mode` instead.
+ if (CompilerState::Current().is_aot()) {
compiler->RecordCatchEntryMoves(env, try_index_);
- } else if (env != nullptr) {
+ } else if (compiler->is_optimizing()) {
+ ASSERT(env != nullptr);
compiler->AddSlowPathDeoptInfo(deopt_id, env);
+ } else {
+ ASSERT(env == nullptr);
+ const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
+ // Add deoptimization continuation point.
+ compiler->AddCurrentDescriptor(UntaggedPcDescriptors::kDeopt,
+ deopt_id_after, instruction()->source());
}
}
if (!use_shared_stub) {
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 74bab68..096d3c7 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -2726,13 +2726,11 @@
__ Stop("No debugging in PRODUCT mode");
#else
__ EnterStubFrame();
- __ pushq(RDX); // Preserve receiver.
__ pushq(RBX); // Preserve IC data.
__ pushq(Immediate(0)); // Result slot.
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
__ popq(CODE_REG); // Original stub.
__ popq(RBX); // Restore IC data.
- __ popq(RDX); // Restore receiver.
__ LeaveStubFrame();
__ movq(RAX, FieldAddress(CODE_REG, target::Code::entry_point_offset()));
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 6a4d13e..7655866 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -1065,8 +1065,7 @@
}
#if !defined(PRODUCT)
ServiceIsolate::MaybeMakeServiceIsolate(I);
- if (!ServiceIsolate::IsServiceIsolate(I) &&
- !KernelIsolate::IsKernelIsolate(I)) {
+ if (!Isolate::IsSystemIsolate(I)) {
I->message_handler()->set_should_pause_on_start(
FLAG_pause_isolates_on_start);
I->message_handler()->set_should_pause_on_exit(FLAG_pause_isolates_on_exit);
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index de2ecfc..57a1e57 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -1697,7 +1697,7 @@
void DoUnlinkedCallAOT(const UnlinkedCall& unlinked,
const Function& target_function);
- void DoMonomorphicMissAOT(const Object& data,
+ void DoMonomorphicMissAOT(const Object& old_data,
const Function& target_function);
void DoSingleTargetMissAOT(const SingleTargetCache& data,
const Function& target_function);
@@ -1712,7 +1712,7 @@
const Code& old_target,
const Function& target_function);
- void DoMonomorphicMissJIT(const Object& data,
+ void DoMonomorphicMissJIT(const Object& old_data,
const Function& target_function);
void DoICDataMissJIT(const ICData& data,
const Object& old_data,
@@ -1839,14 +1839,14 @@
#if defined(DART_PRECOMPILED_RUNTIME)
void PatchableCallHandler::DoMonomorphicMissAOT(
- const Object& data,
+ const Object& old_data,
const Function& target_function) {
classid_t old_expected_cid;
- if (data.IsSmi()) {
- old_expected_cid = Smi::Cast(data).Value();
+ if (old_data.IsSmi()) {
+ old_expected_cid = Smi::Cast(old_data).Value();
} else {
- RELEASE_ASSERT(data.IsMonomorphicSmiableCall());
- old_expected_cid = MonomorphicSmiableCall::Cast(data).expected_cid();
+ RELEASE_ASSERT(old_data.IsMonomorphicSmiableCall());
+ old_expected_cid = MonomorphicSmiableCall::Cast(old_data).expected_cid();
}
const bool is_monomorphic_hit = old_expected_cid == receiver().GetClassId();
const auto& old_receiver_class = Class::Handle(
@@ -1900,20 +1900,17 @@
#if !defined(DART_PRECOMPILED_RUNTIME)
void PatchableCallHandler::DoMonomorphicMissJIT(
- const Object& data,
+ const Object& old_data,
const Function& target_function) {
// Monomorphic calls use the ICData::entries() as their data.
- const auto& ic_data_entries = Array::Cast(data);
+ const auto& old_ic_data_entries = Array::Cast(old_data);
// Any non-empty ICData::entries() has a backref to it's ICData.
const auto& ic_data =
- ICData::Handle(zone_, ICData::ICDataOfEntriesArray(ic_data_entries));
-
- const classid_t current_cid = receiver().GetClassId();
- const classid_t old_cid = Smi::Value(Smi::RawCast(ic_data_entries.At(0)));
- const bool same_receiver = current_cid == old_cid;
+ ICData::Handle(zone_, ICData::ICDataOfEntriesArray(old_ic_data_entries));
// The target didn't change, so we can stay inside monomorphic state.
- if (same_receiver) {
+ if (ic_data.NumberOfChecksIs(1) &&
+ (ic_data.GetReceiverClassIdAt(0) == receiver().GetClassId())) {
// We got a miss because the old target code got disabled.
// Notice the reverse is not true: If the old code got disabled, the call
// might still have a different receiver then last time and possibly a
@@ -1929,10 +1926,10 @@
caller_frame_->pc());
}
- // We stay in monomorphic state, patch the code object and keep the same
- // data (old ICData entries array).
+ // We stay in monomorphic state, patch the code object and reload the icdata
+ // entries array.
const auto& code = Code::Handle(zone_, target_function.EnsureHasCode());
- ASSERT(data.ptr() == ic_data.entries());
+ const auto& data = Object::Handle(zone_, ic_data.entries());
CodePatcher::PatchInstanceCallAt(caller_frame_->pc(), caller_code_, data,
code);
ReturnJIT(code, data, target_function);
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index e9fc6f7..2e35cce 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -162,24 +162,12 @@
const char* StackFrame::ToCString() const {
ASSERT(thread_ == Thread::Current());
Zone* zone = Thread::Current()->zone();
- if (IsDartFrame()) {
- const Code& code = Code::Handle(zone, LookupDartCode());
- ASSERT(!code.IsNull());
- const auto& owner = Object::Handle(
- zone, WeakSerializationReference::UnwrapIfTarget(code.owner()));
- ASSERT(!owner.IsNull());
- auto const opt = code.IsFunctionCode() && code.is_optimized() ? "*" : "";
- auto const owner_name =
- owner.IsFunction() ? Function::Cast(owner).ToFullyQualifiedCString()
- : owner.ToCString();
- return zone->PrintToString("[%-8s : sp(%#" Px ") fp(%#" Px ") pc(%#" Px
- ") %s%s ]",
- GetName(), sp(), fp(), pc(), opt, owner_name);
- } else {
- return zone->PrintToString("[%-8s : sp(%#" Px ") fp(%#" Px ") pc(%#" Px
- ")]",
- GetName(), sp(), fp(), pc());
- }
+ const Code& code = Code::Handle(zone, GetCodeObject());
+ ASSERT(!code.IsNull());
+ const char* name =
+ code.QualifiedName(NameFormattingParams(Object::kInternalName));
+ return zone->PrintToString(" pc 0x%" Pp " fp 0x%" Pp " sp 0x%" Pp " %s",
+ pc(), fp(), sp(), name);
}
void ExitFrame::VisitObjectPointers(ObjectPointerVisitor* visitor) {
diff --git a/runtime/vm/virtual_memory_compressed.cc b/runtime/vm/virtual_memory_compressed.cc
index 7d4b882..a53007a 100644
--- a/runtime/vm/virtual_memory_compressed.cc
+++ b/runtime/vm/virtual_memory_compressed.cc
@@ -11,6 +11,7 @@
namespace dart {
uword VirtualMemoryCompressedHeap::base_ = 0;
+uword VirtualMemoryCompressedHeap::size_ = 0;
uint8_t* VirtualMemoryCompressedHeap::pages_ = nullptr;
uword VirtualMemoryCompressedHeap::minimum_free_page_id_ = 0;
Mutex* VirtualMemoryCompressedHeap::mutex_ = nullptr;
@@ -34,12 +35,29 @@
pages_[page_id / 8] &= ~PageMask(page_id);
}
-void VirtualMemoryCompressedHeap::Init(void* compressed_heap_region) {
+void VirtualMemoryCompressedHeap::Init(void* compressed_heap_region,
+ size_t size) {
pages_ = new uint8_t[kCompressedHeapBitmapSize];
memset(pages_, 0, kCompressedHeapBitmapSize);
+ ASSERT(size > 0);
+ ASSERT(size <= kCompressedHeapSize);
+ for (intptr_t page_id = size / kCompressedHeapPageSize;
+ page_id < kCompressedHeapNumPages; page_id++) {
+ SetPageUsed(page_id);
+ }
base_ = reinterpret_cast<uword>(compressed_heap_region);
+ size_ = size;
ASSERT(base_ != 0);
- ASSERT(Utils::IsAligned(base_, kCompressedHeapSize));
+ ASSERT(size_ != 0);
+ ASSERT(size_ <= kCompressedHeapSize);
+ ASSERT(Utils::IsAligned(base_, kCompressedHeapPageSize));
+ ASSERT(Utils::IsAligned(size_, kCompressedHeapPageSize));
+ // base_ is not necessarily 4GB-aligned, because on some systems we can't make
+ // a large enough reservation to guarentee it. Instead, we have only the
+ // weaker property that all addresses in [base_, base_ + size_) have the same
+ // same upper 32 bits, which is what we really need for compressed pointers.
+ intptr_t mask = ~(kCompressedHeapAlignment - 1);
+ ASSERT((base_ & mask) == (base_ + size_ - 1 & mask));
mutex_ = new Mutex(NOT_IN_PRODUCT("compressed_heap_mutex"));
}
@@ -47,6 +65,7 @@
delete[] pages_;
delete mutex_;
base_ = 0;
+ size_ = 0;
pages_ = nullptr;
minimum_free_page_id_ = 0;
mutex_ = nullptr;
@@ -123,8 +142,7 @@
}
bool VirtualMemoryCompressedHeap::Contains(void* address) {
- return reinterpret_cast<uword>(address) >= base_ &&
- reinterpret_cast<uword>(address) < base_ + kCompressedHeapSize;
+ return (reinterpret_cast<uword>(address) - base_) < size_;
}
} // namespace dart
diff --git a/runtime/vm/virtual_memory_compressed.h b/runtime/vm/virtual_memory_compressed.h
index 0df8b1c..bf6fb4c 100644
--- a/runtime/vm/virtual_memory_compressed.h
+++ b/runtime/vm/virtual_memory_compressed.h
@@ -33,7 +33,7 @@
public:
// Initializes the compressed heap. The callee must allocate a region of
// kCompressedHeapSize bytes, aligned to kCompressedHeapSize.
- static void Init(void* compressed_heap_region);
+ static void Init(void* compressed_heap_region, size_t size);
// Cleans up the compressed heap. The callee is responsible for freeing the
// region's memory.
@@ -58,6 +58,7 @@
static void ClearPageUsed(uword page_id);
static uword base_;
+ static uword size_;
static uint8_t* pages_;
static uword minimum_free_page_id_;
static Mutex* mutex_;
diff --git a/runtime/vm/virtual_memory_posix.cc b/runtime/vm/virtual_memory_posix.cc
index 2291d5e..0134610 100644
--- a/runtime/vm/virtual_memory_posix.cc
+++ b/runtime/vm/virtual_memory_posix.cc
@@ -35,6 +35,10 @@
#undef MAP_FAILED
#define MAP_FAILED reinterpret_cast<void*>(-1)
+#if defined(DART_HOST_OS_IOS)
+#define LARGE_RESERVATIONS_MAY_FAIL
+#endif
+
DECLARE_FLAG(bool, dual_map_code);
DECLARE_FLAG(bool, write_protect_code);
@@ -76,12 +80,56 @@
return page_size;
}
+#if defined(DART_COMPRESSED_POINTERS) && defined(LARGE_RESERVATIONS_MAY_FAIL)
+// Truncate to the largest subregion in [region] that doesn't cross an
+// [alignment] boundary.
+static MemoryRegion ClipToAlignedRegion(MemoryRegion region, size_t alignment) {
+ uword base = region.start();
+ uword aligned_base = Utils::RoundUp(base, alignment);
+ uword size_below =
+ region.end() >= aligned_base ? aligned_base - base : region.size();
+ uword size_above =
+ region.end() >= aligned_base ? region.end() - aligned_base : 0;
+ ASSERT(size_below + size_above == region.size());
+ if (size_below >= size_above) {
+ unmap(aligned_base, aligned_base + size_above);
+ return MemoryRegion(reinterpret_cast<void*>(base), size_below);
+ }
+ unmap(base, base + size_below);
+ if (size_above > alignment) {
+ unmap(aligned_base + alignment, aligned_base + size_above);
+ size_above = alignment;
+ }
+ return MemoryRegion(reinterpret_cast<void*>(aligned_base), size_above);
+}
+#endif // LARGE_RESERVATIONS_MAY_FAIL
+
void VirtualMemory::Init() {
page_size_ = CalculatePageSize();
#if defined(DART_COMPRESSED_POINTERS)
ASSERT(compressed_heap_ == nullptr);
+#if defined(LARGE_RESERVATIONS_MAY_FAIL)
+ // Try to reserve a region for the compressed heap by requesting decreasing
+ // powers-of-two until one succeeds, and use the largest subregion that does
+ // not cross a 4GB boundary. The subregion itself is not necessarily
+ // 4GB-aligned.
+ for (size_t allocated_size = kCompressedHeapSize + kCompressedHeapAlignment;
+ allocated_size >= kCompressedHeapPageSize; allocated_size >>= 1) {
+ void* address = GenericMapAligned(
+ nullptr, PROT_NONE, allocated_size, kCompressedHeapPageSize,
+ allocated_size + kCompressedHeapPageSize,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE);
+ if (address == MAP_FAILED) continue;
+
+ MemoryRegion region(address, allocated_size);
+ region = ClipToAlignedRegion(region, kCompressedHeapAlignment);
+ compressed_heap_ = new VirtualMemory(region, region);
+ break;
+ }
+#else
compressed_heap_ = Reserve(kCompressedHeapSize, kCompressedHeapAlignment);
+#endif
if (compressed_heap_ == nullptr) {
int error = errno;
const int kBufferSize = 1024;
@@ -89,7 +137,8 @@
FATAL("Failed to reserve region for compressed heap: %d (%s)", error,
Utils::StrError(error, error_buf, kBufferSize));
}
- VirtualMemoryCompressedHeap::Init(compressed_heap_->address());
+ VirtualMemoryCompressedHeap::Init(compressed_heap_->address(),
+ compressed_heap_->size());
#endif // defined(DART_COMPRESSED_POINTERS)
#if defined(DUAL_MAPPING_SUPPORTED)
@@ -248,6 +297,25 @@
MemoryRegion region =
VirtualMemoryCompressedHeap::Allocate(size, alignment);
if (region.pointer() == nullptr) {
+#if defined(LARGE_RESERVATIONS_MAY_FAIL)
+ // Try a fresh allocation and hope it ends up in the right region. On
+ // macOS/iOS, this works surprisingly often.
+ void* address =
+ GenericMapAligned(nullptr, PROT_READ | PROT_WRITE, size, alignment,
+ size + alignment, MAP_PRIVATE | MAP_ANONYMOUS);
+ if (address != nullptr) {
+ uword ok_start = Utils::RoundDown(compressed_heap_->start(),
+ kCompressedHeapAlignment);
+ uword ok_end = ok_start + kCompressedHeapSize;
+ uword start = reinterpret_cast<uword>(address);
+ uword end = start + size;
+ if ((start >= ok_start) && (end <= ok_end)) {
+ MemoryRegion region(address, size);
+ return new VirtualMemory(region, region);
+ }
+ munmap(address, size);
+ }
+#endif
return nullptr;
}
Commit(region.pointer(), region.size());
@@ -372,7 +440,10 @@
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
if (result == MAP_FAILED) {
int error = errno;
- FATAL("Failed to commit: %d\n", error);
+ const int kBufferSize = 1024;
+ char error_buf[kBufferSize];
+ FATAL("Failed to commit: %d (%s)", error,
+ Utils::StrError(error, error_buf, kBufferSize));
}
}
@@ -384,7 +455,10 @@
MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_FIXED, -1, 0);
if (result == MAP_FAILED) {
int error = errno;
- FATAL("Failed to decommit: %d\n", error);
+ const int kBufferSize = 1024;
+ char error_buf[kBufferSize];
+ FATAL("Failed to decommit: %d (%s)", error,
+ Utils::StrError(error, error_buf, kBufferSize));
}
}
diff --git a/runtime/vm/virtual_memory_win.cc b/runtime/vm/virtual_memory_win.cc
index 79eee52..67f1f63 100644
--- a/runtime/vm/virtual_memory_win.cc
+++ b/runtime/vm/virtual_memory_win.cc
@@ -62,7 +62,8 @@
int error = GetLastError();
FATAL("Failed to reserve region for compressed heap: %d", error);
}
- VirtualMemoryCompressedHeap::Init(compressed_heap_->address());
+ VirtualMemoryCompressedHeap::Init(compressed_heap_->address(),
+ compressed_heap_->size());
#endif // defined(DART_COMPRESSED_POINTERS)
}
diff --git a/sdk/lib/collection/collection.dart b/sdk/lib/collection/collection.dart
index ce3d87f..ac592bd 100644
--- a/sdk/lib/collection/collection.dart
+++ b/sdk/lib/collection/collection.dart
@@ -14,6 +14,8 @@
import 'dart:_internal' hide Symbol;
import 'dart:math' show Random; // Used by ListMixin.shuffle.
+export 'dart:_internal' show DoubleLinkedQueueEntry;
+
part 'collections.dart';
part 'hash_map.dart';
part 'hash_set.dart';
diff --git a/sdk/lib/collection/queue.dart b/sdk/lib/collection/queue.dart
index fd83b42..dcdecb4 100644
--- a/sdk/lib/collection/queue.dart
+++ b/sdk/lib/collection/queue.dart
@@ -119,116 +119,71 @@
void clear();
}
-class _DoubleLink<Link extends _DoubleLink<Link>> {
- Link? _previousLink;
- Link? _nextLink;
-
- void _link(Link? previous, Link? next) {
- _nextLink = next;
- _previousLink = previous;
- if (previous != null) previous._nextLink = this as Link;
- if (next != null) next._previousLink = this as Link;
- }
-
- void _unlink() {
- if (_previousLink != null) _previousLink!._nextLink = _nextLink;
- if (_nextLink != null) _nextLink!._previousLink = _previousLink;
- _nextLink = null;
- _previousLink = null;
- }
-}
-
-/// An entry in a doubly linked list. It contains a pointer to the next
-/// entry, the previous entry, and the boxed element.
-class DoubleLinkedQueueEntry<E> extends _DoubleLink<DoubleLinkedQueueEntry<E>> {
- // TODO(rnystrom): This needs to be nullable because the subclass
- // _DoubleLinkedQueueSentinel does not have an element. A cleaner solution is
- // probably to refactor the class hierarchy so that _DoubleLinkedQueueSentinel
- // does not inherit an element field.
- E? _element;
-
- /// The element in the queue.
- E get element => _element as E;
- set element(E element) {
- _element = element;
- }
-
- DoubleLinkedQueueEntry(this._element);
-
- /// Appends the given [e] as entry just after this entry.
- void append(E e) {
- DoubleLinkedQueueEntry<E>(e)._link(this, _nextLink);
- }
-
- /// Prepends the given [e] as entry just before this entry.
- void prepend(E e) {
- DoubleLinkedQueueEntry<E>(e)._link(_previousLink, this);
- }
-
- E remove() {
- _unlink();
- return element;
- }
-
- /// Returns the previous entry or `null` if there is none.
- DoubleLinkedQueueEntry<E>? previousEntry() => _previousLink;
-
- /// Returns the next entry or `null` if there is none.
- DoubleLinkedQueueEntry<E>? nextEntry() => _nextLink;
-}
-
-/// Interface for the link classes used by [DoubleLinkedQueue].
+/// Interface and base class for the link classes used by [DoubleLinkedQueue].
///
/// Both the [_DoubleLinkedQueueElement] and [_DoubleLinkedQueueSentinel]
/// implement this interface.
-/// The entry contains a link back to the queue, so calling `append`
-/// or `prepend` can correctly update the element count.
-abstract class _DoubleLinkedQueueEntry<E> extends DoubleLinkedQueueEntry<E> {
- DoubleLinkedQueue<E>? _queue;
- _DoubleLinkedQueueEntry(E? element, this._queue) : super(element);
+abstract class _DoubleLinkedQueueEntry<E> {
+ _DoubleLinkedQueueEntry<E>? _previousLink;
+ _DoubleLinkedQueueEntry<E>? _nextLink;
- DoubleLinkedQueueEntry<E>? _asNonSentinelEntry();
-
- void _append(E e) {
- _DoubleLinkedQueueElement<E>(e, _queue)._link(this, _nextLink);
+ void _link(
+ _DoubleLinkedQueueEntry<E>? previous, _DoubleLinkedQueueEntry<E>? next) {
+ _nextLink = next;
+ _previousLink = previous;
+ previous?._nextLink = this;
+ next?._previousLink = this;
}
- void _prepend(E e) {
- _DoubleLinkedQueueElement<E>(e, _queue)._link(_previousLink, this);
+ void _unlink() {
+ _previousLink?._nextLink = _nextLink;
+ _nextLink?._previousLink = _previousLink;
+ _previousLink = _nextLink = null;
+ }
+
+ _DoubleLinkedQueueElement<E>? _asNonSentinelEntry();
+
+ void _append(E element, DoubleLinkedQueue<E>? queue) {
+ _DoubleLinkedQueueElement<E>(element, queue)._link(this, _nextLink);
+ }
+
+ void _prepend(E element, DoubleLinkedQueue<E>? queue) {
+ _DoubleLinkedQueueElement<E>(element, queue)._link(_previousLink, this);
}
E _remove();
- E get _element => super._element as E;
-
- DoubleLinkedQueueEntry<E>? nextEntry() {
- _DoubleLinkedQueueEntry<E> entry = _nextLink as _DoubleLinkedQueueEntry<E>;
- return entry._asNonSentinelEntry();
- }
-
- DoubleLinkedQueueEntry<E>? previousEntry() {
- _DoubleLinkedQueueEntry<E> entry =
- _previousLink as _DoubleLinkedQueueEntry<E>;
- return entry._asNonSentinelEntry();
- }
+ E get element;
}
-/// The actual entry type used by the [DoubleLinkedQueue].
+/// Linked list entry used by the [DoubleLinkedQueue] to hold an element.
///
-/// The entry contains a reference to the queue, allowing
+/// These entry objects are also exposed by [DoubleLinkedQueue.firstEntry],
+/// [DoubleLinkedQueue.lastEntry] and [DoubleLinkedQueue.forEachEntry].
+///
+/// The entry contains both the [element] (which is mutable to anyone with
+/// access to the entry object) and a reference to the queue, allowing
/// [append]/[prepend] to update the list length.
-class _DoubleLinkedQueueElement<E> extends _DoubleLinkedQueueEntry<E> {
- _DoubleLinkedQueueElement(E element, DoubleLinkedQueue<E>? queue)
- : super(element, queue);
+///
+/// When an entry is removed from its queue, the [_queue] is set to `null`
+/// and will never change again. You can still use the unlinked entry
+/// to create a new list, by calling [append] and [prepend], but it won't
+/// be part of any [DoubleLinkedQueue].
+class _DoubleLinkedQueueElement<E> extends _DoubleLinkedQueueEntry<E>
+ implements DoubleLinkedQueueEntry<E> {
+ DoubleLinkedQueue<E>? _queue;
+ E element;
+
+ _DoubleLinkedQueueElement(this.element, this._queue);
void append(E e) {
- _append(e);
- if (_queue != null) _queue!._elementCount++;
+ _append(e, _queue);
+ _queue?._elementCount++;
}
void prepend(E e) {
- _prepend(e);
- if (_queue != null) _queue!._elementCount++;
+ _prepend(e, _queue);
+ _queue?._elementCount++;
}
E _remove() {
@@ -238,30 +193,43 @@
}
E remove() {
- if (_queue != null) _queue!._elementCount--;
+ _queue?._elementCount--;
return _remove();
}
- _DoubleLinkedQueueElement<E>? _asNonSentinelEntry() {
- return this;
- }
+ _DoubleLinkedQueueElement<E> _asNonSentinelEntry() => this;
+
+ DoubleLinkedQueueEntry<E>? previousEntry() =>
+ _previousLink?._asNonSentinelEntry();
+
+ DoubleLinkedQueueEntry<E>? nextEntry() => _nextLink?._asNonSentinelEntry();
}
-/// A sentinel in a double linked list is used to manipulate the list
-/// at both ends.
-/// A double linked list has exactly one sentinel,
+/// A header object used to hold the two ends of a double linked queue.
+///
+/// A [DoubleLinkedQueue] has exactly one sentinel,
/// which is the only entry when the list is constructed.
-/// Initially, a sentinel has its next and previous entry point to itself.
-/// A sentinel does not box any user element.
+///
+/// Initially, a sentinel has its next and previous entries point to itself.
+/// Its next and previous links are never `null` after creation, and
+/// the entries linked always form a circular structure with the next link
+/// pointing to the first element of the queue, and the previous link
+/// pointing to the last element of the queue, or both pointing to itself
+/// again if the queue becomes empty.
+///
+/// Implements [_DoubleLinkedQueueEntry._remove] and
+/// [_DoubleLinkedQueueEntry.element] as throwing because
+/// it makes it simple to implement members like [Queue.removeFirst]
+/// or [Queue.first] as throwing on an empty queue.
+///
+/// A sentinel does not contain any user element.
class _DoubleLinkedQueueSentinel<E> extends _DoubleLinkedQueueEntry<E> {
- _DoubleLinkedQueueSentinel(DoubleLinkedQueue<E> queue) : super(null, queue) {
+ _DoubleLinkedQueueSentinel() {
_previousLink = this;
_nextLink = this;
}
- DoubleLinkedQueueEntry<E>? _asNonSentinelEntry() {
- return null;
- }
+ Null _asNonSentinelEntry() => null;
/// Hit by, e.g., [DoubleLinkedQueue.removeFirst] if the queue is empty.
E _remove() {
@@ -269,7 +237,7 @@
}
/// Hit by, e.g., [DoubleLinkedQueue.first] if the queue is empty.
- E get _element {
+ E get element {
throw IterableElementError.noElement();
}
}
@@ -278,8 +246,8 @@
///
/// Allows constant time add, remove-at-ends and peek operations.
class DoubleLinkedQueue<E> extends Iterable<E> implements Queue<E> {
- late _DoubleLinkedQueueSentinel<E> _sentinel =
- _DoubleLinkedQueueSentinel<E>(this);
+ final _DoubleLinkedQueueSentinel<E> _sentinel =
+ _DoubleLinkedQueueSentinel<E>();
int _elementCount = 0;
@@ -318,49 +286,48 @@
int get length => _elementCount;
void addLast(E value) {
- _sentinel._prepend(value);
+ _sentinel._prepend(value, this);
_elementCount++;
}
void addFirst(E value) {
- _sentinel._append(value);
+ _sentinel._append(value, this);
_elementCount++;
}
void add(E value) {
- _sentinel._prepend(value);
+ _sentinel._prepend(value, this);
_elementCount++;
}
void addAll(Iterable<E> iterable) {
for (final E value in iterable) {
- _sentinel._prepend(value);
+ _sentinel._prepend(value, this);
_elementCount++;
}
}
E removeLast() {
- _DoubleLinkedQueueEntry<E> lastEntry =
- _sentinel._previousLink as _DoubleLinkedQueueEntry<E>;
- E result = lastEntry._remove();
+ // Hits sentinel's `_remove` if queue is empty.
+ E result = _sentinel._previousLink!._remove();
_elementCount--;
return result;
}
E removeFirst() {
- _DoubleLinkedQueueEntry<E> firstEntry =
- _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
- E result = firstEntry._remove();
+ // Hits sentinel's `_remove` if queue is empty.
+ E result = _sentinel._nextLink!._remove();
_elementCount--;
return result;
}
bool remove(Object? o) {
- _DoubleLinkedQueueEntry<E> entry =
- _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
- while (!identical(entry, _sentinel)) {
- bool equals = (entry._element == o);
- if (!identical(this, entry._queue)) {
+ _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink!;
+ while (true) {
+ var elementEntry = entry._asNonSentinelEntry();
+ if (elementEntry == null) return false;
+ bool equals = (elementEntry.element == o);
+ if (!identical(this, elementEntry._queue)) {
// Entry must still be in the queue.
throw ConcurrentModificationError(this);
}
@@ -369,26 +336,26 @@
_elementCount--;
return true;
}
- entry = entry._nextLink as _DoubleLinkedQueueEntry<E>;
+ entry = entry._nextLink!;
}
- return false;
}
void _filter(bool test(E element), bool removeMatching) {
- _DoubleLinkedQueueEntry<E> entry =
- _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
- while (!identical(entry, _sentinel)) {
- bool matches = test(entry._element);
- if (!identical(this, entry._queue)) {
+ _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink!;
+ while (true) {
+ var elementEntry = entry._asNonSentinelEntry();
+ if (elementEntry == null) return;
+ bool matches = test(elementEntry.element);
+ if (!identical(this, elementEntry._queue)) {
// Entry must still be in the queue.
throw ConcurrentModificationError(this);
}
- DoubleLinkedQueueEntry<E> next = entry._nextLink!; // Cannot be null.
+ var next = entry._nextLink!; // Cannot be null while entry is in queue.
if (identical(removeMatching, matches)) {
- entry._remove();
+ elementEntry._remove();
_elementCount--;
}
- entry = next as _DoubleLinkedQueueEntry<E>;
+ entry = next;
}
}
@@ -400,22 +367,17 @@
_filter(test, false);
}
- E get first {
- DoubleLinkedQueueEntry<E> firstEntry = _sentinel._nextLink!;
- return firstEntry._element as E;
- }
+ // Hits sentinel's `get element` if no element in queue.
+ E get first => _sentinel._nextLink!.element;
- E get last {
- DoubleLinkedQueueEntry<E> lastEntry = _sentinel._previousLink!;
- return lastEntry._element as E;
- }
+ // Hits sentinel's `get element` if no element in queue.
+ E get last => _sentinel._previousLink!.element;
E get single {
// Note that this throws correctly if the queue is empty
// because reading the element of the sentinel throws.
if (identical(_sentinel._nextLink, _sentinel._previousLink)) {
- DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink!;
- return entry._element as E;
+ return _sentinel._nextLink!.element;
}
throw IterableElementError.tooMany();
}
@@ -430,9 +392,8 @@
/// The entry objects can also be accessed using [lastEntry],
/// and they can be iterated using [DoubleLinkedQueueEntry.nextEntry] and
/// [DoubleLinkedQueueEntry.previousEntry].
- DoubleLinkedQueueEntry<E>? firstEntry() {
- return _sentinel.nextEntry();
- }
+ DoubleLinkedQueueEntry<E>? firstEntry() =>
+ _sentinel._nextLink!._asNonSentinelEntry();
/// The entry object of the last element in the queue.
///
@@ -444,15 +405,22 @@
/// The entry objects can also be accessed using [firstEntry],
/// and they can be iterated using [DoubleLinkedQueueEntry.nextEntry] and
/// [DoubleLinkedQueueEntry.previousEntry].
- DoubleLinkedQueueEntry<E>? lastEntry() {
- return _sentinel.previousEntry();
- }
+ DoubleLinkedQueueEntry<E>? lastEntry() =>
+ _sentinel._previousLink!._asNonSentinelEntry();
- bool get isEmpty {
- return (identical(_sentinel._nextLink, _sentinel));
- }
+ bool get isEmpty => identical(_sentinel._nextLink, _sentinel);
void clear() {
+ var cursor = _sentinel._nextLink!;
+ while (true) {
+ var entry = cursor._asNonSentinelEntry();
+ if (entry == null) break;
+ cursor = cursor._nextLink!;
+ entry
+ .._nextLink = null
+ .._previousLink = null
+ .._queue = null;
+ }
_sentinel._nextLink = _sentinel;
_sentinel._previousLink = _sentinel;
_elementCount = 0;
@@ -475,57 +443,59 @@
/// inserted after the current element before it is removed will not be
/// visited by the iteration.
void forEachEntry(void action(DoubleLinkedQueueEntry<E> element)) {
- _DoubleLinkedQueueEntry<E> entry =
- _sentinel._nextLink as _DoubleLinkedQueueEntry<E>;
- while (!identical(entry, _sentinel)) {
- _DoubleLinkedQueueElement<E> element =
- entry as _DoubleLinkedQueueElement<E>;
- _DoubleLinkedQueueEntry<E> next =
- element._nextLink as _DoubleLinkedQueueEntry<E>;
- // Remember both entry and entry._nextLink.
- // If someone calls `element.remove()` we continue from `next`.
- // Otherwise we use the value of entry._nextLink which may have been
- // updated.
- action(element);
- if (identical(this, entry._queue)) {
- next = entry._nextLink as _DoubleLinkedQueueEntry<E>;
- } else if (!identical(this, next._queue)) {
+ var cursor = _sentinel._nextLink!;
+ while (true) {
+ var element = cursor._asNonSentinelEntry();
+ if (element == null) break;
+ if (!identical(element._queue, this)) {
throw ConcurrentModificationError(this);
}
- entry = next;
+ cursor = cursor._nextLink!;
+ // Remember both element and element._nextLink (as cursor).
+ // If someone calls `element.remove()` we continue from `next`.
+ // Otherwise we use the value of element._nextLink which may have been
+ // updated.
+ action(element);
+ if (identical(this, element._queue)) {
+ cursor = element._nextLink!;
+ }
}
}
_DoubleLinkedQueueIterator<E> get iterator {
- return _DoubleLinkedQueueIterator<E>(_sentinel);
+ return _DoubleLinkedQueueIterator<E>(this);
}
String toString() => IterableBase.iterableToFullString(this, '{', '}');
}
class _DoubleLinkedQueueIterator<E> implements Iterator<E> {
- _DoubleLinkedQueueSentinel<E>? _sentinel;
- DoubleLinkedQueueEntry<E>? _nextEntry;
+ /// Queue being iterated. Used for concurrent modification checks.
+ DoubleLinkedQueue<E>? _queue;
+
+ /// Next entry to visit. Set to null when hitting the sentinel.
+ _DoubleLinkedQueueEntry<E>? _nextEntry;
+
+ /// Current element value, when valid.
E? _current;
- _DoubleLinkedQueueIterator(_DoubleLinkedQueueSentinel<E> sentinel)
- : _sentinel = sentinel,
- _nextEntry = sentinel._nextLink;
+ _DoubleLinkedQueueIterator(DoubleLinkedQueue<E> this._queue)
+ : _nextEntry = _queue._sentinel._nextLink;
bool moveNext() {
- if (identical(_nextEntry, _sentinel)) {
+ var nextElement = _nextEntry?._asNonSentinelEntry();
+ if (nextElement == null) {
+ // Clear everything to not unnecessarily keep values alive.
_current = null;
_nextEntry = null;
- _sentinel = null;
+ _queue = null;
return false;
}
- _DoubleLinkedQueueEntry<E> elementEntry =
- _nextEntry as _DoubleLinkedQueueEntry<E>;
- if (!identical(_sentinel!._queue, elementEntry._queue)) {
- throw ConcurrentModificationError(_sentinel!._queue);
+ if (!identical(_queue, nextElement._queue)) {
+ throw ConcurrentModificationError(_queue);
}
- _current = elementEntry._element;
- _nextEntry = elementEntry._nextLink;
+ _current = nextElement.element;
+ _nextEntry = nextElement._nextLink;
return true;
}
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 0e4c898..71f02d9 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -948,3 +948,66 @@
@Deprecated("Use networkConnectTimeoutError instead")
static const int NETWORK_CONNECT_TIMEOUT_ERROR = networkConnectTimeoutError;
}
+
+// Class moved here from dart:collection
+// to allow another, more important, class to implement the interface
+// without having to match the private members.
+
+/// An entry in a doubly linked list.
+///
+/// Such an entry contains an element and a link to the previous or next
+/// entries, if any.
+//
+// This class should have been abstract, but originally wasn't.
+// It's not used itself to interact with the double linked queue class,
+// which uses the `_DoubleLinkedQueueEntry` class and subclasses instead.
+// It's only used as an interface for the
+// `DoubleLinkedQueue.forEach`, `DoubleLinkedQueue.firstEntry` and
+// `DoubleLinkedQueue.lastEntry` members.
+// Still, someone might have based their own double-linked list on this
+// class, so we keep it functional.
+class DoubleLinkedQueueEntry<E> {
+ DoubleLinkedQueueEntry<E>? _previousLink;
+ DoubleLinkedQueueEntry<E>? _nextLink;
+
+ /// The element of the entry in the queue.
+ E element;
+
+ /// Creates a new entry with the given [element].
+ DoubleLinkedQueueEntry(this.element);
+
+ void _link(
+ DoubleLinkedQueueEntry<E>? previous, DoubleLinkedQueueEntry<E>? next) {
+ _nextLink = next;
+ _previousLink = previous;
+ previous?._nextLink = this;
+ next?._previousLink = this;
+ }
+
+ /// Appends the given element [e] as entry just after this entry.
+ void append(E e) {
+ DoubleLinkedQueueEntry<E>(e)._link(this, _nextLink);
+ }
+
+ /// Prepends the given [e] as entry just before this entry.
+ void prepend(E e) {
+ DoubleLinkedQueueEntry<E>(e)._link(_previousLink, this);
+ }
+
+ /// Removes this entry from any chain of entries it is part of.
+ ///
+ /// Returns its element value.
+ E remove() {
+ _previousLink?._nextLink = _nextLink;
+ _nextLink?._previousLink = _previousLink;
+ _nextLink = null;
+ _previousLink = null;
+ return element;
+ }
+
+ /// The previous entry, or `null` if there is none.
+ DoubleLinkedQueueEntry<E>? previousEntry() => _previousLink;
+
+ /// The next entry, or `null` if there is none.
+ DoubleLinkedQueueEntry<E>? nextEntry() => _nextLink;
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 97150c2..ecde5a5 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -2,6 +2,8 @@
# 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.
+bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
+
[ $compiler == dartdevk ]
regexp/lookbehind_test/01: Skip # Flaky in uncatchable way. Issue 36280
diff --git a/tests/corelib/queue_single_test.dart b/tests/corelib/queue_single_test.dart
deleted file mode 100644
index 1ef6b59..0000000
--- a/tests/corelib/queue_single_test.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2012, 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.
-
-library queue.single.test;
-
-import "package:expect/expect.dart";
-import 'dart:collection' show Queue;
-
-main() {
- Queue<int> queue1 = new Queue<int>();
- queue1.add(42);
- Queue queue2 = new Queue();
- queue2..add(11)..add(12)..add(13);
- Queue queue3 = new Queue();
-
- Expect.equals(42, queue1.single);
- Expect.throwsStateError(() => queue2.single);
- Expect.throwsStateError(() => queue3.single);
-}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 726b58f..3ee1d12 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -2,6 +2,8 @@
# 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.
+bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
+
[ $compiler == dartdevk ]
regexp/lookbehind_test/01: Skip # Flaky in uncatchable way. Issue 36280
diff --git a/tests/language/constructor/reference_test.dart b/tests/language/constructor/reference_test.dart
index 0a7cb37..c1b33371 100644
--- a/tests/language/constructor/reference_test.dart
+++ b/tests/language/constructor/reference_test.dart
@@ -100,12 +100,10 @@
// ^^^^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
Foo.bar<int>.baz();
-//^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION
// ^
// [cfe] Couldn't find constructor 'bar'.
-// ^^^
-// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+// ^^^^^
+// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
Foo.bar.baz<int>();
// ^
// [cfe] Member not found: 'bar'.
diff --git a/tests/language/label/label8_test.dart b/tests/language/label/label8_test.dart
index c59bad2..f03d2a9 100644
--- a/tests/language/label/label8_test.dart
+++ b/tests/language/label/label8_test.dart
@@ -24,10 +24,8 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
-// [cfe] Expected ';' after this.
// [cfe] Expected an identifier, but got ':'.
// [cfe] Unexpected token ':'.
while (false) {
diff --git a/tests/language_2/constructor/reference_test.dart b/tests/language_2/constructor/reference_test.dart
index 776fe8b..03c68d5 100644
--- a/tests/language_2/constructor/reference_test.dart
+++ b/tests/language_2/constructor/reference_test.dart
@@ -102,12 +102,10 @@
// ^^^^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
Foo.bar<int>.baz();
-//^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION
// ^
// [cfe] Couldn't find constructor 'bar'.
-// ^^^
-// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+// ^^^^^
+// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
Foo.bar.baz<int>();
// ^
// [cfe] Member not found: 'bar'.
diff --git a/tests/language_2/label/label8_test.dart b/tests/language_2/label/label8_test.dart
index e490609..90675c9 100644
--- a/tests/language_2/label/label8_test.dart
+++ b/tests/language_2/label/label8_test.dart
@@ -26,10 +26,8 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
-// [cfe] Expected ';' after this.
// [cfe] Expected an identifier, but got ':'.
// [cfe] Unexpected token ':'.
while (false) {
diff --git a/tests/corelib/queue_first_test.dart b/tests/lib/collection/queue_first_test.dart
similarity index 89%
rename from tests/corelib/queue_first_test.dart
rename to tests/lib/collection/queue_first_test.dart
index d0baf99..fb7e1a6 100644
--- a/tests/corelib/queue_first_test.dart
+++ b/tests/lib/collection/queue_first_test.dart
@@ -9,7 +9,10 @@
main() {
Queue<int> queue1 = new Queue<int>();
- queue1..add(11)..add(12)..add(13);
+ queue1
+ ..add(11)
+ ..add(12)
+ ..add(13);
Queue queue2 = new Queue();
Expect.equals(11, queue1.first);
diff --git a/tests/corelib/queue_iterator_test.dart b/tests/lib/collection/queue_iterator_test.dart
similarity index 100%
rename from tests/corelib/queue_iterator_test.dart
rename to tests/lib/collection/queue_iterator_test.dart
diff --git a/tests/corelib/queue_last_test.dart b/tests/lib/collection/queue_last_test.dart
similarity index 89%
rename from tests/corelib/queue_last_test.dart
rename to tests/lib/collection/queue_last_test.dart
index 3ea2eff..288ad40 100644
--- a/tests/corelib/queue_last_test.dart
+++ b/tests/lib/collection/queue_last_test.dart
@@ -9,7 +9,10 @@
main() {
Queue<int> queue1 = new Queue<int>();
- queue1..add(11)..add(12)..add(13);
+ queue1
+ ..add(11)
+ ..add(12)
+ ..add(13);
Queue queue2 = new Queue();
Expect.equals(13, queue1.last);
diff --git a/tests/corelib_2/queue_single_test.dart b/tests/lib/collection/queue_single_test.dart
similarity index 91%
copy from tests/corelib_2/queue_single_test.dart
copy to tests/lib/collection/queue_single_test.dart
index c1ebef1..a4cdfbf 100644
--- a/tests/corelib_2/queue_single_test.dart
+++ b/tests/lib/collection/queue_single_test.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// @dart = 2.9
-
library queue.single.test;
import "package:expect/expect.dart";
@@ -13,7 +11,10 @@
Queue<int> queue1 = new Queue<int>();
queue1.add(42);
Queue queue2 = new Queue();
- queue2..add(11)..add(12)..add(13);
+ queue2
+ ..add(11)
+ ..add(12)
+ ..add(13);
Queue queue3 = new Queue();
Expect.equals(42, queue1.single);
diff --git a/tests/corelib/queue_test.dart b/tests/lib/collection/queue_test.dart
similarity index 89%
rename from tests/corelib/queue_test.dart
rename to tests/lib/collection/queue_test.dart
index a34038e..0abfa51 100644
--- a/tests/corelib/queue_test.dart
+++ b/tests/lib/collection/queue_test.dart
@@ -56,41 +56,29 @@
Queue other = newQueueFrom(queue.where(is10));
checkQueue(other, 1, 10);
- Expect.equals(true, queue.any(is10));
+ Expect.isTrue(queue.any(is10));
bool isInstanceOfInt(dynamic value) {
return (value is int);
}
- Expect.equals(true, queue.every(isInstanceOfInt));
+ Expect.isTrue(queue.every(isInstanceOfInt));
- Expect.equals(false, queue.every(is10));
+ Expect.isFalse(queue.every(is10));
bool is1(dynamic value) {
return (value == 1);
}
- Expect.equals(false, queue.any(is1));
+ Expect.isFalse(queue.any(is1));
queue.clear();
Expect.equals(0, queue.length);
- var exception = null;
- try {
- queue.removeFirst();
- } on StateError catch (e) {
- exception = e;
- }
- Expect.equals(true, exception != null);
+ Expect.throws<StateError>(queue.removeFirst);
Expect.equals(0, queue.length);
- exception = null;
- try {
- queue.removeLast();
- } on StateError catch (e) {
- exception = e;
- }
- Expect.equals(true, exception != null);
+ Expect.throws<StateError>(queue.removeLast);
Expect.equals(0, queue.length);
queue.addFirst(1);
@@ -134,7 +122,7 @@
Expect.equals(expectedSum, sum);
}
- testLength(int length, Queue queue) {
+ void testLength(int length, Queue queue) {
Expect.equals(length, queue.length);
((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty);
@@ -242,9 +230,12 @@
queue.toList());
// Regression test: http://dartbug.com/16270
- // This should do nothing, and should not throw.
+ // These should all do nothing, and should not throw.
Queue emptyQueue = newQueue();
emptyQueue.remove(0);
+ emptyQueue.removeWhere((x) => throw "unreachable");
+ emptyQueue.retainWhere((x) => throw "unreachable");
+ Expect.equals(0, emptyQueue.length);
}
void testLarge() {
@@ -414,11 +405,11 @@
DoubleLinkedQueueEntry<int>? entry1 = queue1.firstEntry();
DoubleLinkedQueueEntry<int>? entry2 = queue2.firstEntry();
while (entry1 != null) {
- Expect.equals(true, !identical(entry1, entry2));
+ Expect.notIdentical(entry1, entry2);
entry1 = entry1.nextEntry();
entry2 = entry2!.nextEntry();
}
- Expect.equals(null, entry2);
+ Expect.isNull(entry2);
var firstEntry = queue1.firstEntry()!;
var secondEntry = queue1.firstEntry()!.nextEntry()!;
@@ -430,19 +421,27 @@
thirdEntry.prepend(8);
thirdEntry.append(9);
Expect.equals(9, queue1.length);
- Expect.listEquals(queue1.toList(), [4, 1, 5, 6, 2, 7, 8, 3, 9]);
+ Expect.listEquals([4, 1, 5, 6, 2, 7, 8, 3, 9], queue1.toList());
Expect.equals(1, firstEntry.remove());
Expect.equals(2, secondEntry.remove());
Expect.equals(3, thirdEntry.remove());
Expect.equals(6, queue1.length);
- Expect.listEquals(queue1.toList(), [4, 5, 6, 7, 8, 9]);
+ Expect.listEquals([4, 5, 6, 7, 8, 9], queue1.toList());
+
+ var elements = [];
+ queue1.forEachEntry((entry) {
+ elements.add(entry.element);
+ entry.remove(); // Can remove while iterating.
+ });
+ Expect.listEquals([4, 5, 6, 7, 8, 9], elements);
+ Expect.isTrue(queue1.isEmpty);
}
}
void linkEntryTest() {
var entry = new DoubleLinkedQueueEntry(42);
- Expect.equals(null, entry.previousEntry());
- Expect.equals(null, entry.nextEntry());
+ Expect.isNull(entry.previousEntry());
+ Expect.isNull(entry.nextEntry());
entry.append(37);
entry.prepend(87);
@@ -453,8 +452,8 @@
Expect.equals(87, prev.element);
Expect.identical(entry, prev.nextEntry());
Expect.identical(entry, next.previousEntry());
- Expect.equals(null, next.nextEntry());
- Expect.equals(null, prev.previousEntry());
+ Expect.isNull(next.nextEntry());
+ Expect.isNull(prev.previousEntry());
entry.element = 117;
Expect.equals(117, entry.element);
@@ -464,15 +463,15 @@
Expect.equals(117, entry.remove());
Expect.identical(next, prev.nextEntry());
Expect.identical(prev, next.previousEntry());
- Expect.equals(null, next.nextEntry());
- Expect.equals(null, prev.previousEntry());
+ Expect.isNull(next.nextEntry());
+ Expect.isNull(prev.previousEntry());
Expect.equals(37, next.element);
Expect.equals(87, prev.element);
Expect.equals(37, next.remove());
Expect.equals(87, prev.element);
- Expect.equals(null, prev.nextEntry());
- Expect.equals(null, prev.previousEntry());
+ Expect.isNull(prev.nextEntry());
+ Expect.isNull(prev.previousEntry());
Expect.equals(87, prev.remove());
}
diff --git a/tests/corelib_2/queue_first_test.dart b/tests/lib_2/collection/queue_first_test.dart
similarity index 90%
rename from tests/corelib_2/queue_first_test.dart
rename to tests/lib_2/collection/queue_first_test.dart
index 63ec6ca..99fe1c6 100644
--- a/tests/corelib_2/queue_first_test.dart
+++ b/tests/lib_2/collection/queue_first_test.dart
@@ -11,7 +11,10 @@
main() {
Queue<int> queue1 = new Queue<int>();
- queue1..add(11)..add(12)..add(13);
+ queue1
+ ..add(11)
+ ..add(12)
+ ..add(13);
Queue queue2 = new Queue();
Expect.equals(11, queue1.first);
diff --git a/tests/corelib_2/queue_iterator_test.dart b/tests/lib_2/collection/queue_iterator_test.dart
similarity index 100%
rename from tests/corelib_2/queue_iterator_test.dart
rename to tests/lib_2/collection/queue_iterator_test.dart
diff --git a/tests/corelib_2/queue_last_test.dart b/tests/lib_2/collection/queue_last_test.dart
similarity index 90%
rename from tests/corelib_2/queue_last_test.dart
rename to tests/lib_2/collection/queue_last_test.dart
index 3d070da..f5575f1 100644
--- a/tests/corelib_2/queue_last_test.dart
+++ b/tests/lib_2/collection/queue_last_test.dart
@@ -11,7 +11,10 @@
main() {
Queue<int> queue1 = new Queue<int>();
- queue1..add(11)..add(12)..add(13);
+ queue1
+ ..add(11)
+ ..add(12)
+ ..add(13);
Queue queue2 = new Queue();
Expect.equals(13, queue1.last);
diff --git a/tests/corelib_2/queue_single_test.dart b/tests/lib_2/collection/queue_single_test.dart
similarity index 91%
rename from tests/corelib_2/queue_single_test.dart
rename to tests/lib_2/collection/queue_single_test.dart
index c1ebef1..29654c6 100644
--- a/tests/corelib_2/queue_single_test.dart
+++ b/tests/lib_2/collection/queue_single_test.dart
@@ -13,7 +13,10 @@
Queue<int> queue1 = new Queue<int>();
queue1.add(42);
Queue queue2 = new Queue();
- queue2..add(11)..add(12)..add(13);
+ queue2
+ ..add(11)
+ ..add(12)
+ ..add(13);
Queue queue3 = new Queue();
Expect.equals(42, queue1.single);
diff --git a/tests/corelib_2/queue_test.dart b/tests/lib_2/collection/queue_test.dart
similarity index 89%
rename from tests/corelib_2/queue_test.dart
rename to tests/lib_2/collection/queue_test.dart
index 08ea375..6a903e6 100644
--- a/tests/corelib_2/queue_test.dart
+++ b/tests/lib_2/collection/queue_test.dart
@@ -58,41 +58,29 @@
Queue other = newQueueFrom(queue.where(is10));
checkQueue(other, 1, 10);
- Expect.equals(true, queue.any(is10));
+ Expect.isTrue(queue.any(is10));
bool isInstanceOfInt(Object value) {
return (value is int);
}
- Expect.equals(true, queue.every(isInstanceOfInt));
+ Expect.isTrue(queue.every(isInstanceOfInt));
- Expect.equals(false, queue.every(is10));
+ Expect.isFalse(queue.every(is10));
bool is1(Object value) {
return (value == 1);
}
- Expect.equals(false, queue.any(is1));
+ Expect.isFalse(queue.any(is1));
queue.clear();
Expect.equals(0, queue.length);
- var exception = null;
- try {
- queue.removeFirst();
- } on StateError catch (e) {
- exception = e;
- }
- Expect.equals(true, exception != null);
+ Expect.throws<StateError>(queue.removeFirst);
Expect.equals(0, queue.length);
- exception = null;
- try {
- queue.removeLast();
- } on StateError catch (e) {
- exception = e;
- }
- Expect.equals(true, exception != null);
+ Expect.throws<StateError>(queue.removeLast);
Expect.equals(0, queue.length);
queue.addFirst(1);
@@ -136,7 +124,7 @@
Expect.equals(expectedSum, sum);
}
- testLength(int length, Queue queue) {
+ void testLength(int length, Queue queue) {
Expect.equals(length, queue.length);
((length == 0) ? Expect.isTrue : Expect.isFalse)(queue.isEmpty);
((length != 0) ? Expect.isTrue : Expect.isFalse)(queue.isNotEmpty);
@@ -164,8 +152,6 @@
sum += e;
}
- ;
-
set.forEach(f);
Expect.equals(7, sum);
sum = 0;
@@ -249,8 +235,9 @@
// These should all do nothing, and should not throw.
Queue emptyQueue = newQueue();
emptyQueue.remove(0);
- emptyQueue.removeWhere((x) => null);
- emptyQueue.retainWhere((x) => null);
+ emptyQueue.removeWhere((x) => throw "unreachable");
+ emptyQueue.retainWhere((x) => throw "unreachable");
+ Expect.equals(0, emptyQueue.length);
}
void testLarge() {
@@ -420,11 +407,11 @@
DoubleLinkedQueueEntry<int> entry1 = queue1.firstEntry();
DoubleLinkedQueueEntry<int> entry2 = queue2.firstEntry();
while (entry1 != null) {
- Expect.equals(true, !identical(entry1, entry2));
+ Expect.notIdentical(entry1, entry2);
entry1 = entry1.nextEntry();
entry2 = entry2.nextEntry();
}
- Expect.equals(null, entry2);
+ Expect.isNull(entry2);
var firstEntry = queue1.firstEntry();
var secondEntry = queue1.firstEntry().nextEntry();
@@ -436,19 +423,27 @@
thirdEntry.prepend(8);
thirdEntry.append(9);
Expect.equals(9, queue1.length);
- Expect.listEquals(queue1.toList(), [4, 1, 5, 6, 2, 7, 8, 3, 9]);
+ Expect.listEquals([4, 1, 5, 6, 2, 7, 8, 3, 9], queue1.toList());
Expect.equals(1, firstEntry.remove());
Expect.equals(2, secondEntry.remove());
Expect.equals(3, thirdEntry.remove());
Expect.equals(6, queue1.length);
- Expect.listEquals(queue1.toList(), [4, 5, 6, 7, 8, 9]);
+ Expect.listEquals([4, 5, 6, 7, 8, 9], queue1.toList());
+
+ var elements = [];
+ queue1.forEachEntry((entry) {
+ elements.add(entry.element);
+ entry.remove(); // Can remove while iterating.
+ });
+ Expect.listEquals([4, 5, 6, 7, 8, 9], elements);
+ Expect.isTrue(queue1.isEmpty);
}
}
void linkEntryTest() {
var entry = new DoubleLinkedQueueEntry(42);
- Expect.equals(null, entry.previousEntry());
- Expect.equals(null, entry.nextEntry());
+ Expect.isNull(entry.previousEntry());
+ Expect.isNull(entry.nextEntry());
entry.append(37);
entry.prepend(87);
@@ -459,8 +454,8 @@
Expect.equals(87, prev.element);
Expect.identical(entry, prev.nextEntry());
Expect.identical(entry, next.previousEntry());
- Expect.equals(null, next.nextEntry());
- Expect.equals(null, prev.previousEntry());
+ Expect.isNull(next.nextEntry());
+ Expect.isNull(prev.previousEntry());
entry.element = 117;
Expect.equals(117, entry.element);
@@ -470,15 +465,15 @@
Expect.equals(117, entry.remove());
Expect.identical(next, prev.nextEntry());
Expect.identical(prev, next.previousEntry());
- Expect.equals(null, next.nextEntry());
- Expect.equals(null, prev.previousEntry());
+ Expect.isNull(next.nextEntry());
+ Expect.isNull(prev.previousEntry());
Expect.equals(37, next.element);
Expect.equals(87, prev.element);
Expect.equals(37, next.remove());
Expect.equals(87, prev.element);
- Expect.equals(null, prev.nextEntry());
- Expect.equals(null, prev.previousEntry());
+ Expect.isNull(prev.nextEntry());
+ Expect.isNull(prev.previousEntry());
Expect.equals(87, prev.remove());
}
diff --git a/tools/VERSION b/tools/VERSION
index f34b853..f3425e5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 66
+PRERELEASE 67
PRERELEASE_PATCH 0
\ No newline at end of file