Version 2.17.0-175.0.dev
Merge commit '46c805ea1821b4991b1fa3c36c7f4e02d80a8921' into 'dev'
diff --git a/DEPS b/DEPS
index 90d3669..dc14ff7 100644
--- a/DEPS
+++ b/DEPS
@@ -107,7 +107,7 @@
# and land the review.
#
# For more details, see https://github.com/dart-lang/sdk/issues/30164
- "dart_style_rev": "6f894c0ca33686122be9085f06e5b9bf6ad55262",
+ "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea",
"dartdoc_rev" : "a39f378f8100b907e6285ac825967d764fd664ad",
"devtools_rev" : "b9f2039239cc72ac8b26f8a5fe46123f34d53ce1",
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
index e95fb08..cfc5917 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
@@ -2,11 +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/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/error/codes.dart';
-import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'context_collection_resolution.dart';
@@ -133,24 +129,6 @@
}
mixin ExtensionOverrideTestCases on PubPackageResolutionTest {
- late ExtensionElement extension;
- late ExtensionOverride extensionOverride;
-
- void findDeclarationAndOverride(
- {required String declarationName,
- required String overrideSearch,
- String? declarationUri}) {
- if (declarationUri == null) {
- ExtensionDeclaration declaration =
- findNode.extensionDeclaration('extension $declarationName');
- extension = declaration.declaredElement as ExtensionElement;
- } else {
- extension =
- findElement.importFind(declarationUri).extension_(declarationName);
- }
- extensionOverride = findNode.extensionOverride(overrideSearch);
- }
-
test_call_noPrefix_noTypeArguments() async {
await assertNoErrorsInCode('''
class A {}
@@ -161,9 +139,65 @@
E(a)('');
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- validateCall();
+
+ var node = findNode.functionExpressionInvocation('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@68
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: self::@extension::E::@method::call
+ staticInvokeType: int Function(String)
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@68
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: self::@extension::E::@method::call
+ staticInvokeType: int* Function(String*)*
+ staticType: int*
+''');
+ }
}
test_call_noPrefix_typeArguments() async {
@@ -177,9 +211,93 @@
E<String>(a)('');
}
''');
- findDeclarationAndOverride(declarationName: 'E<T>', overrideSearch: 'E<S');
- validateOverride(typeArguments: [stringType]);
- validateCall();
+
+ var node = findNode.functionExpressionInvocation('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: String
+ staticElement: dart:core::@class::String
+ staticType: null
+ type: String
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@66
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ String
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: MethodMember
+ base: self::@extension::E::@method::call
+ substitution: {T: String}
+ staticInvokeType: int Function(String)
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: String
+ staticElement: dart:core::@class::String
+ staticType: null
+ type: String*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@66
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ String*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: MethodMember
+ base: self::@extension::E::@method::call
+ substitution: {T: String*}
+ staticInvokeType: int* Function(String*)*
+ staticType: int*
+''');
+ }
}
test_call_prefix_noTypeArguments() async {
@@ -195,12 +313,81 @@
p.E(a)('');
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E(a)');
- validateOverride();
- validateCall();
+
+ var node = findNode.functionExpressionInvocation('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: package:test/lib.dart::@extension::E::@method::call
+ staticInvokeType: int Function(String)
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: package:test/lib.dart::@extension::E::@method::call
+ staticInvokeType: int* Function(String*)*
+ staticType: int*
+''');
+ }
}
test_call_prefix_typeArguments() async {
@@ -217,12 +404,109 @@
p.E<String>(a)('');
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E<S');
- validateOverride(typeArguments: [stringType]);
- validateCall();
+
+ var node = findNode.functionExpressionInvocation('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: String
+ staticElement: dart:core::@class::String
+ staticType: null
+ type: String
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ String
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: MethodMember
+ base: package:test/lib.dart::@extension::E::@method::call
+ substitution: {T: String}
+ staticInvokeType: int Function(String)
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: String
+ staticElement: dart:core::@class::String
+ staticType: null
+ type: String*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ String*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleStringLiteral
+ literal: ''
+ rightParenthesis: )
+ staticElement: MethodMember
+ base: package:test/lib.dart::@extension::E::@method::call
+ substitution: {T: String*}
+ staticInvokeType: int* Function(String*)*
+ staticType: int*
+''');
+ }
}
test_getter_noPrefix_noTypeArguments() async {
@@ -235,14 +519,59 @@
E(a).g;
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- assertPropertyAccess2(
- findNode.propertyAccess('.g'),
- element: findElement.getter('g'),
- type: 'int',
- );
+ var node = findNode.propertyAccess('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@59
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: self::@extension::E::@getter::g
+ staticType: int
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@59
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: self::@extension::E::@getter::g
+ staticType: int*
+ staticType: int*
+''');
+ }
}
test_getter_noPrefix_noTypeArguments_functionExpressionInvocation() async {
@@ -257,17 +586,81 @@
E(a).g(0);
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- var invocation = findNode.functionExpressionInvocation('g(0)');
- assertElementNull(invocation);
- assertInvokeType(invocation, 'double Function(int)');
- assertType(invocation, 'double');
-
- var function = invocation.function as PropertyAccess;
- assertElement(function.propertyName, findElement.getter('g', of: 'E'));
- assertType(function.propertyName, 'double Function(int)');
+ var node = findNode.functionExpressionInvocation('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@87
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: self::@extension::E::@getter::g
+ staticType: double Function(int)
+ staticType: double Function(int)
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ IntegerLiteral
+ literal: 0
+ staticType: int
+ rightParenthesis: )
+ staticElement: <null>
+ staticInvokeType: double Function(int)
+ staticType: double
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+ function: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@87
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: self::@extension::E::@getter::g
+ staticType: double* Function(int*)*
+ staticType: double* Function(int*)*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ IntegerLiteral
+ literal: 0
+ staticType: int*
+ rightParenthesis: )
+ staticElement: <null>
+ staticInvokeType: double* Function(int*)*
+ staticType: double*
+''');
+ }
}
test_getter_noPrefix_typeArguments() async {
@@ -280,17 +673,87 @@
E<int>(a).g;
}
''');
- findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- assertPropertyAccess2(
- findNode.propertyAccess('.g'),
- element: elementMatcher(
- findElement.getter('g'),
- substitution: {'T': 'int'},
- ),
- type: 'int',
- );
+ var node = findNode.propertyAccess('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@62
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: PropertyAccessorMember
+ base: self::@extension::E::@getter::g
+ substitution: {T: int}
+ staticType: int
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@62
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: PropertyAccessorMember
+ base: self::@extension::E::@getter::g
+ substitution: {T: int*}
+ staticType: int*
+ staticType: int*
+''');
+ }
}
test_getter_prefix_noTypeArguments() async {
@@ -306,18 +769,75 @@
p.E(a).g;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E(a)');
- validateOverride();
- var importFind = findElement.importFind('package:test/lib.dart');
- assertPropertyAccess2(
- findNode.propertyAccess('.g'),
- element: importFind.getter('g'),
- type: 'int',
- );
+ var node = findNode.propertyAccess('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: package:test/lib.dart::@extension::E::@getter::g
+ staticType: int
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: package:test/lib.dart::@extension::E::@getter::g
+ staticType: int*
+ staticType: int*
+''');
+ }
}
test_getter_prefix_typeArguments() async {
@@ -333,21 +853,103 @@
p.E<int>(a).g;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- var importFind = findElement.importFind('package:test/lib.dart');
- assertPropertyAccess2(
- findNode.propertyAccess('.g'),
- element: elementMatcher(
- importFind.getter('g'),
- substitution: {'T': 'int'},
- ),
- type: 'int',
- );
+ var node = findNode.propertyAccess('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@getter::g
+ substitution: {T: int}
+ staticType: int
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ propertyName: SimpleIdentifier
+ token: g
+ staticElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@getter::g
+ substitution: {T: int*}
+ staticType: int*
+ staticType: int*
+''');
+ }
}
test_method_noPrefix_noTypeArguments() async {
@@ -360,9 +962,67 @@
E(a).m();
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- validateInvocation();
+
+ var node = findNode.methodInvocation('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@55
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: self::@extension::E::@method::m
+ staticType: void Function()
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@55
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: self::@extension::E::@method::m
+ staticType: void Function()*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()*
+ staticType: void
+''');
+ }
}
test_method_noPrefix_typeArguments() async {
@@ -375,9 +1035,95 @@
E<int>(a).m();
}
''');
- findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- validateInvocation();
+
+ var node = findNode.methodInvocation('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@58
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: MethodMember
+ base: self::@extension::E::@method::m
+ substitution: {T: int}
+ staticType: void Function()
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@58
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: MethodMember
+ base: self::@extension::E::@method::m
+ substitution: {T: int*}
+ staticType: void Function()*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()*
+ staticType: void
+''');
+ }
}
test_method_prefix_noTypeArguments() async {
@@ -393,12 +1139,83 @@
p.E(a).m();
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E(a)');
- validateOverride();
- validateInvocation();
+
+ var node = findNode.methodInvocation('E(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: package:test/lib.dart::@extension::E::@method::m
+ staticType: void Function()
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: package:test/lib.dart::@extension::E::@method::m
+ staticType: void Function()*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()*
+ staticType: void
+''');
+ }
}
test_method_prefix_typeArguments() async {
@@ -414,12 +1231,111 @@
p.E<int>(a).m();
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- validateInvocation();
+
+ var node = findNode.methodInvocation('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: MethodMember
+ base: package:test/lib.dart::@extension::E::@method::m
+ substitution: {T: int}
+ staticType: void Function()
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+MethodInvocation
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ methodName: SimpleIdentifier
+ token: m
+ staticElement: MethodMember
+ base: package:test/lib.dart::@extension::E::@method::m
+ substitution: {T: int*}
+ staticType: void Function()*
+ argumentList: ArgumentList
+ leftParenthesis: (
+ rightParenthesis: )
+ staticInvokeType: void Function()*
+ staticType: void
+''');
+ }
}
test_operator_noPrefix_noTypeArguments() async {
@@ -432,9 +1348,61 @@
E(a) + 1;
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- validateBinaryExpression();
+
+ var node = findNode.binary('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@74
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int
+ staticElement: self::@extension::E::@method::+
+ staticInvokeType: void Function(int)
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@74
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int*
+ staticElement: self::@extension::E::@method::+
+ staticInvokeType: void Function(int*)*
+ staticType: void
+''');
+ }
}
test_operator_noPrefix_typeArguments() async {
@@ -447,9 +1415,85 @@
E<int>(a) + 1;
}
''');
- findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- validateBinaryExpression();
+
+ var node = findNode.binary('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@77
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int
+ staticElement: self::@extension::E::@method::+
+ staticInvokeType: void Function(int)
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@77
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int*
+ staticElement: self::@extension::E::@method::+
+ staticInvokeType: void Function(int*)*
+ staticType: void
+''');
+ }
}
test_operator_onTearOff() async {
@@ -465,8 +1509,73 @@
''', [
error(CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER, 45, 1),
]);
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(0)');
- validateOverride();
+
+ var node = findNode.postfix('++;');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+PostfixExpression
+ operand: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ IntegerLiteral
+ literal: 0
+ staticType: int
+ rightParenthesis: )
+ extendedType: int
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: v
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: ++
+ readElement: self::@extension::E::@method::v
+ readType: dynamic
+ writeElement: <null>
+ writeType: dynamic
+ staticElement: <null>
+ staticType: dynamic
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+PostfixExpression
+ operand: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ IntegerLiteral
+ literal: 0
+ staticType: int*
+ rightParenthesis: )
+ extendedType: int*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: v
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: ++
+ readElement: self::@extension::E::@method::v
+ readType: dynamic
+ writeElement: <null>
+ writeType: dynamic
+ staticElement: <null>
+ staticType: dynamic
+''');
+ }
}
test_operator_prefix_noTypeArguments() async {
@@ -482,12 +1591,77 @@
p.E(a) + 1;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E(a)');
- validateOverride();
- validateBinaryExpression();
+
+ var node = findNode.binary('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int
+ staticElement: package:test/lib.dart::@extension::E::@method::+
+ staticInvokeType: void Function(int)
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int*
+ staticElement: package:test/lib.dart::@extension::E::@method::+
+ staticInvokeType: void Function(int*)*
+ staticType: void
+''');
+ }
}
test_operator_prefix_typeArguments() async {
@@ -503,12 +1677,101 @@
p.E<int>(a) + 1;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- validateBinaryExpression();
+
+ var node = findNode.binary('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int
+ staticElement: package:test/lib.dart::@extension::E::@method::+
+ staticInvokeType: void Function(int)
+ staticType: void
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+BinaryExpression
+ leftOperand: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: +
+ rightOperand: IntegerLiteral
+ literal: 1
+ staticType: int*
+ staticElement: package:test/lib.dart::@extension::E::@method::+
+ staticInvokeType: void Function(int*)*
+ staticType: void
+''');
+ }
}
test_setter_noPrefix_noTypeArguments() async {
@@ -521,18 +1784,81 @@
E(a).s = 0;
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- assertAssignment(
- findNode.assignment('s ='),
- readElement: null,
- readType: null,
- writeElement: findElement.setter('s', of: 'E'),
- writeType: 'int',
- operatorElement: null,
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@59
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: <null>
+ readType: null
+ writeElement: self::@extension::E::@setter::s
+ writeType: int
+ staticElement: <null>
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@59
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: <null>
+ readType: null
+ writeElement: self::@extension::E::@setter::s
+ writeType: int*
+ staticElement: <null>
+ staticType: int*
+''');
+ }
}
test_setter_noPrefix_typeArguments() async {
@@ -545,21 +1871,109 @@
E<int>(a).s = 0;
}
''');
- findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- assertAssignment(
- findNode.assignment('s ='),
- readElement: null,
- readType: null,
- writeElement: elementMatcher(
- findElement.setter('s', of: 'E'),
- substitution: {'T': 'int'},
- ),
- writeType: 'int',
- operatorElement: null,
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@62
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: <null>
+ readType: null
+ writeElement: PropertyAccessorMember
+ base: self::@extension::E::@setter::s
+ substitution: {T: int}
+ writeType: int
+ staticElement: <null>
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@62
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: <null>
+ readType: null
+ writeElement: PropertyAccessorMember
+ base: self::@extension::E::@setter::s
+ substitution: {T: int*}
+ writeType: int*
+ staticElement: <null>
+ staticType: int*
+''');
+ }
}
test_setter_prefix_noTypeArguments() async {
@@ -575,22 +1989,97 @@
p.E(a).s = 0;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E(a)');
- validateOverride();
- var importFind = findElement.importFind('package:test/lib.dart');
- assertAssignment(
- findNode.assignment('s ='),
- readElement: null,
- readType: null,
- writeElement: importFind.setter('s', of: 'E'),
- writeType: 'int',
- operatorElement: null,
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: <null>
+ readType: null
+ writeElement: package:test/lib.dart::@extension::E::@setter::s
+ writeType: int
+ staticElement: <null>
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: <null>
+ readType: null
+ writeElement: package:test/lib.dart::@extension::E::@setter::s
+ writeType: int*
+ staticElement: <null>
+ staticType: int*
+''');
+ }
}
test_setter_prefix_typeArguments() async {
@@ -606,25 +2095,125 @@
p.E<int>(a).s = 0;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- var importFind = findElement.importFind('package:test/lib.dart');
- assertAssignment(
- findNode.assignment('s ='),
- readElement: null,
- readType: null,
- writeElement: elementMatcher(
- importFind.setter('s', of: 'E'),
- substitution: {'T': 'int'},
- ),
- writeType: 'int',
- operatorElement: null,
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: <null>
+ readType: null
+ writeElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@setter::s
+ substitution: {T: int}
+ writeType: int
+ staticElement: <null>
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: =
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: <null>
+ readType: null
+ writeElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@setter::s
+ substitution: {T: int*}
+ writeType: int*
+ staticElement: <null>
+ staticType: int*
+''');
+ }
}
test_setterAndGetter_noPrefix_noTypeArguments() async {
@@ -638,21 +2227,83 @@
E(a).s += 0;
}
''');
- findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
- validateOverride();
- assertAssignment(
- findNode.assignment('s +='),
- readElement: findElement.getter('s', of: 'E'),
- readType: 'int',
- writeElement: findElement.setter('s', of: 'E'),
- writeType: 'int',
- operatorElement: elementMatcher(
- numElement.getMethod('+'),
- isLegacy: isLegacyLibrary,
- ),
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@77
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: self::@extension::E::@getter::s
+ readType: int
+ writeElement: self::@extension::E::@setter::s
+ writeType: int
+ staticElement: dart:core::@class::num::@method::+
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@77
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: self::@extension::E::@getter::s
+ readType: int*
+ writeElement: self::@extension::E::@setter::s
+ writeType: int*
+ staticElement: MethodMember
+ base: dart:core::@class::num::@method::+
+ isLegacy: true
+ staticType: int*
+''');
+ }
}
test_setterAndGetter_noPrefix_typeArguments() async {
@@ -666,27 +2317,115 @@
E<int>(a).s += 0;
}
''');
- findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- assertAssignment(
- findNode.assignment('s +='),
- readElement: elementMatcher(
- findElement.getter('s', of: 'E'),
- substitution: {'T': 'int'},
- ),
- readType: 'int',
- writeElement: elementMatcher(
- findElement.setter('s', of: 'E'),
- substitution: {'T': 'int'},
- ),
- writeType: 'int',
- operatorElement: elementMatcher(
- numElement.getMethod('+'),
- isLegacy: isLegacyLibrary,
- ),
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@80
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: PropertyAccessorMember
+ base: self::@extension::E::@getter::s
+ substitution: {T: int}
+ readType: int
+ writeElement: PropertyAccessorMember
+ base: self::@extension::E::@setter::s
+ substitution: {T: int}
+ writeType: int
+ staticElement: dart:core::@class::num::@method::+
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@80
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: PropertyAccessorMember
+ base: self::@extension::E::@getter::s
+ substitution: {T: int*}
+ readType: int*
+ writeElement: PropertyAccessorMember
+ base: self::@extension::E::@setter::s
+ substitution: {T: int*}
+ writeType: int*
+ staticElement: MethodMember
+ base: dart:core::@class::num::@method::+
+ isLegacy: true
+ staticType: int*
+''');
+ }
}
test_setterAndGetter_prefix_noTypeArguments() async {
@@ -703,25 +2442,99 @@
p.E(a).s += 0;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E(a)');
- validateOverride();
- var importFind = findElement.importFind('package:test/lib.dart');
- assertAssignment(
- findNode.assignment('s +='),
- readElement: importFind.getter('s', of: 'E'),
- readType: 'int',
- writeElement: importFind.setter('s', of: 'E'),
- writeType: 'int',
- operatorElement: elementMatcher(
- numElement.getMethod('+'),
- isLegacy: isLegacyLibrary,
- ),
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: package:test/lib.dart::@extension::E::@getter::s
+ readType: int
+ writeElement: package:test/lib.dart::@extension::E::@setter::s
+ writeType: int
+ staticElement: dart:core::@class::num::@method::+
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: package:test/lib.dart::@extension::E::@getter::s
+ readType: int*
+ writeElement: package:test/lib.dart::@extension::E::@setter::s
+ writeType: int*
+ staticElement: MethodMember
+ base: dart:core::@class::num::@method::+
+ isLegacy: true
+ staticType: int*
+''');
+ }
}
test_setterAndGetter_prefix_typeArguments() async {
@@ -738,31 +2551,131 @@
p.E<int>(a).s += 0;
}
''');
- findDeclarationAndOverride(
- declarationName: 'E',
- declarationUri: 'package:test/lib.dart',
- overrideSearch: 'E<int>');
- validateOverride(typeArguments: [intType]);
- var importFind = findElement.importFind('package:test/lib.dart');
- assertAssignment(
- findNode.assignment('s +='),
- readElement: elementMatcher(
- importFind.getter('s', of: 'E'),
- substitution: {'T': 'int'},
- ),
- readType: 'int',
- writeElement: elementMatcher(
- importFind.setter('s', of: 'E'),
- substitution: {'T': 'int'},
- ),
- writeType: 'int',
- operatorElement: elementMatcher(
- numElement.getMethod('+'),
- isLegacy: isLegacyLibrary,
- ),
- type: 'int',
- );
+ var node = findNode.assignment('(a)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A
+ rightParenthesis: )
+ extendedType: A
+ staticType: null
+ typeArgumentTypes
+ int
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int
+ readElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@getter::s
+ substitution: {T: int}
+ readType: int
+ writeElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@setter::s
+ substitution: {T: int}
+ writeType: int
+ staticElement: dart:core::@class::num::@method::+
+ staticType: int
+''');
+ } else {
+ assertResolvedNodeText(node, r'''
+AssignmentExpression
+ leftHandSide: PropertyAccess
+ target: ExtensionOverride
+ extensionName: PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: p
+ staticElement: self::@prefix::p
+ staticType: null
+ period: .
+ identifier: SimpleIdentifier
+ token: E
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ staticElement: package:test/lib.dart::@extension::E
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: <
+ arguments
+ NamedType
+ name: SimpleIdentifier
+ token: int
+ staticElement: dart:core::@class::int
+ staticType: null
+ type: int*
+ rightBracket: >
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: a
+ staticElement: a@35
+ staticType: A*
+ rightParenthesis: )
+ extendedType: A*
+ staticType: null
+ typeArgumentTypes
+ int*
+ operator: .
+ propertyName: SimpleIdentifier
+ token: s
+ staticElement: <null>
+ staticType: null
+ staticType: null
+ operator: +=
+ rightHandSide: IntegerLiteral
+ literal: 0
+ staticType: int*
+ readElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@getter::s
+ substitution: {T: int*}
+ readType: int*
+ writeElement: PropertyAccessorMember
+ base: package:test/lib.dart::@extension::E::@setter::s
+ substitution: {T: int*}
+ writeType: int*
+ staticElement: MethodMember
+ base: dart:core::@class::num::@method::+
+ isLegacy: true
+ staticType: int*
+''');
+ }
}
test_tearOff() async {
@@ -775,59 +2688,59 @@
f(C c) => E(c).a;
''');
- var identifier = findNode.simple('a;');
- assertElement(identifier, findElement.method('a'));
- assertType(identifier, 'void Function(int)');
- }
- void validateBinaryExpression() {
- BinaryExpression binary = extensionOverride.parent as BinaryExpression;
- Element? resolvedElement = binary.staticElement;
- expect(resolvedElement, extension.getMethod('+'));
- }
-
- void validateCall() {
- FunctionExpressionInvocation invocation =
- extensionOverride.parent as FunctionExpressionInvocation;
- Element? resolvedElement = invocation.staticElement;
- expect(resolvedElement, extension.getMethod('call'));
-
- NodeList<Expression> arguments = invocation.argumentList.arguments;
- for (int i = 0; i < arguments.length; i++) {
- expect(arguments[i].staticParameterElement, isNotNull);
- }
- }
-
- void validateInvocation() {
- MethodInvocation invocation = extensionOverride.parent as MethodInvocation;
-
- assertMethodInvocation(
- invocation,
- extension.getMethod('m'),
- 'void Function()',
- );
-
- NodeList<Expression> arguments = invocation.argumentList.arguments;
- for (int i = 0; i < arguments.length; i++) {
- expect(arguments[i].staticParameterElement, isNotNull);
- }
- }
-
- void validateOverride({List<DartType>? typeArguments}) {
- expect(extensionOverride.extensionName.staticElement, extension);
-
- expect(extensionOverride.staticType, isNull);
- expect(extensionOverride.extensionName.staticType, isNull);
-
- if (typeArguments == null) {
- expect(extensionOverride.typeArguments, isNull);
+ var node = findNode.propertyAccess('E(c)');
+ if (isNullSafetyEnabled) {
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: c
+ staticElement: c@57
+ staticType: C
+ rightParenthesis: )
+ extendedType: C
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: a
+ staticElement: self::@extension::E::@method::a
+ staticType: void Function(int)
+ staticType: void Function(int)
+''');
} else {
- expect(
- extensionOverride.typeArguments!.arguments
- .map((annotation) => annotation.type),
- unorderedEquals(typeArguments));
+ assertResolvedNodeText(node, r'''
+PropertyAccess
+ target: ExtensionOverride
+ extensionName: SimpleIdentifier
+ token: E
+ staticElement: self::@extension::E
+ staticType: null
+ argumentList: ArgumentList
+ leftParenthesis: (
+ arguments
+ SimpleIdentifier
+ token: c
+ staticElement: c@57
+ staticType: C*
+ rightParenthesis: )
+ extendedType: C*
+ staticType: null
+ operator: .
+ propertyName: SimpleIdentifier
+ token: a
+ staticElement: self::@extension::E::@method::a
+ staticType: void Function(int*)*
+ staticType: void Function(int*)*
+''');
}
- expect(extensionOverride.argumentList.arguments, hasLength(1));
}
}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
index aa6cb56..1a83d84 100644
--- a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
@@ -1,20 +1,60 @@
-enum E1 { element; final int element = 42; }
-enum E2 { element, element; }
-enum E3 { element; void element() {} }
-enum E4 { element; static void element() {} }
-enum E5 { element; static int element = 42; }
-enum E6 { element; void set element(E6 value) {} }
-enum E7 { element; static void set element(E7 value) {} }
+enum E1 {
+ element;
+
+ final int element = 42;
+}
+
+enum E2 {
+ element,
+ element;
+}
+
+enum E3 {
+ element;
+
+ void element() {}
+}
+
+enum E4 {
+ element;
+
+ static void element() {}
+}
+
+enum E5 {
+ element;
+
+ static int element = 42;
+}
+
+enum E6 {
+ element;
+
+ void set element(E6 value) {}
+}
+
+enum E7 {
+ element;
+
+ static void set element(E7 value) {}
+}
+
class A8 {
void set element(dynamic value) {}
}
+
enum E8 with A8 { element }
+
class A9 {
int element = 42;
}
+
enum E9 with A9 { element }
+
class A10 {
void element() {}
}
+
enum E10 with A10 { element }
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2ef28c8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline_modelled.expect
@@ -0,0 +1,60 @@
+class A10 {
+ void element() {}
+}
+
+class A8 {
+ void set element(dynamic value) {}
+}
+
+class A9 {
+ int element = 42;
+}
+
+enum E1 {
+ element;
+
+ final int element = 42;
+}
+
+enum E10 with A10 { element }
+
+enum E2 {
+ element,
+ element;
+}
+
+enum E3 {
+ element;
+
+ void element() {}
+}
+
+enum E4 {
+ element;
+
+ static void element() {}
+}
+
+enum E5 {
+ element;
+
+ static int element = 42;
+}
+
+enum E6 {
+ element;
+
+ void set element(E6 value) {}
+}
+
+enum E7 {
+ element;
+
+ static void set element(E7 value) {}
+}
+
+enum E8 with A8 { element }
+
+enum E9 with A9 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect
index 672888e..e490318 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect
@@ -1,3 +1,20 @@
-enum E { one, two.named(), three.f(), four.f2(); const E(); const E.named() : this(); factory E.f() => values.first; factory E.f2() { return const E(); } const factory E.f3() = E; factory E.f4() = E; factory E.f5() = E.f; factory E.f6(int value) = E.f; }
+enum E {
+ one,
+ two.named(),
+ three.f(),
+ four.f2();
+
+ const E();
+ const E.named() : this();
+ factory E.f() => values.first;
+ factory E.f2() {
+ return const E();
+ }
+ const factory E.f3() = E;
+ factory E.f4() = E;
+ factory E.f5() = E.f;
+ factory E.f6(int value) = E.f;
+}
+
test() {}
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0351378
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+enum E {
+ one,
+ two.named(),
+ three.f(),
+ four.f2();
+
+ const E();
+ const E.named() : this();
+ factory E.f() => values.first;
+ factory E.f2() {
+ return const E();
+ }
+ const factory E.f3() = E;
+ factory E.f4() = E;
+ factory E.f5() = E.f;
+ factory E.f6(int value) = E.f;
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect
index 474ee41..99971da 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect
@@ -1,3 +1,13 @@
-enum T { t; const T.named(); }
-enum S { s.named(); const S(); }
+enum T {
+ t;
+
+ const T.named();
+}
+
+enum S {
+ s.named();
+
+ const S();
+}
+
void main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..487c963
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+enum S {
+ s.named();
+
+ const S();
+}
+
+enum T {
+ t;
+
+ const T.named();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect
index ee99a49..2c03b28 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect
@@ -1,8 +1,44 @@
-enum E1 { element; static const List<E1> values = [E1.element]; }
-enum E2 { element; int values = 42; }
-enum E3 { element; static const List<E3> values = [E3.element]; int values = 42; }
-enum E4 { element; static void set values(List<E4> x) {} }
-enum E5 { element; static void set values(dynamic x) {} }
-enum E6 { element; static void set values(Never x) {} }
-enum E7 { element; void values() {} }
+enum E1 {
+ element;
+
+ static const List<E1> values = [E1.element];
+}
+
+enum E2 {
+ element;
+
+ int values = 42;
+}
+
+enum E3 {
+ element;
+
+ static const List<E3> values = [E3.element];
+ int values = 42;
+}
+
+enum E4 {
+ element;
+
+ static void set values(List<E4> x) {}
+}
+
+enum E5 {
+ element;
+
+ static void set values(dynamic x) {}
+}
+
+enum E6 {
+ element;
+
+ static void set values(Never x) {}
+}
+
+enum E7 {
+ element;
+
+ void values() {}
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2c03b28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,44 @@
+enum E1 {
+ element;
+
+ static const List<E1> values = [E1.element];
+}
+
+enum E2 {
+ element;
+
+ int values = 42;
+}
+
+enum E3 {
+ element;
+
+ static const List<E3> values = [E3.element];
+ int values = 42;
+}
+
+enum E4 {
+ element;
+
+ static void set values(List<E4> x) {}
+}
+
+enum E5 {
+ element;
+
+ static void set values(dynamic x) {}
+}
+
+enum E6 {
+ element;
+
+ static void set values(Never x) {}
+}
+
+enum E7 {
+ element;
+
+ void values() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect
index 4344750..c5514b9 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect
@@ -1,18 +1,26 @@
abstract class A extends Enum {
int get foo => index;
}
+
enum EA with A { element }
+
abstract class B implements Enum {
int get foo => index;
}
+
enum EB with B { element }
+
mixin M on Enum {
int get foo => index;
}
+
enum EM with M { element }
+
mixin N implements Enum {
int get foo => index;
}
+
enum EN with N { element }
+
expectEquals(x, y) {}
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1a4630a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+abstract class A extends Enum {
+ int get foo => index;
+}
+
+abstract class B implements Enum {
+ int get foo => index;
+}
+
+enum EA with A { element }
+
+enum EB with B { element }
+
+enum EM with M { element }
+
+enum EN with N { element }
+
+expectEquals(x, y) {}
+main() {}
+mixin M on Enum {
+ int get foo => index;
+}
+mixin N implements Enum {
+ int get foo => index;
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
index 707dc9c..4f3495e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
@@ -1,5 +1,17 @@
X foo<X>(X x) => x;
-enum E1 { bar(foo); const E1(int Function(int) f); }
-enum E2<X> { bar(foo); const E2(X f); }
+
+enum E1 {
+ bar(foo);
+
+ const E1(int Function(int) f);
+}
+
+enum E2<X> {
+ bar(foo);
+
+ const E2(X f);
+}
+
enum E3<X extends num, Y extends String, Z extends Function(X, Y)> { element }
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4f3495e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+X foo<X>(X x) => x;
+
+enum E1 {
+ bar(foo);
+
+ const E1(int Function(int) f);
+}
+
+enum E2<X> {
+ bar(foo);
+
+ const E2(X f);
+}
+
+enum E3<X extends num, Y extends String, Z extends Function(X, Y)> { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect
index 8ce4f0c..88e3d26 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect
@@ -1,4 +1,11 @@
-enum E<X> { one(1), two("2"); final X field; const E(this.field); }
+enum E<X> {
+ one(1),
+ two("2");
+
+ final X field;
+ const E(this.field);
+}
+
test() {}
foo(E<int> ei, E<String> es) {}
bar(E<int> ei, E<String> es) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d32b67f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+bar(E<int> ei, E<String> es) {}
+baz(E<Object> ei, E<Object> es) {}
+boz(E<Never> ei, E<Never> es) {}
+checkIsNotType<T>(x) {}
+checkIsType<T>(x) {}
+
+enum E<X> {
+ one(1),
+ two("2");
+
+ final X field;
+ const E(this.field);
+}
+
+foo(E<int> ei, E<String> es) {}
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
index 57d7640..b188f35 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
@@ -1,3 +1,12 @@
-enum E { one("foo"), two("bar"); final String field; const E(this.field); @override String toString() => field; }
+enum E {
+ one("foo"),
+ two("bar");
+
+ final String field;
+ const E(this.field);
+ @override
+ String toString() => field;
+}
+
expectEquals(a, b) {}
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b188f35
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+enum E {
+ one("foo"),
+ two("bar");
+
+ final String field;
+ const E(this.field);
+ @override
+ String toString() => field;
+}
+
+expectEquals(a, b) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect
index ac00eb5e..90d4341 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect
@@ -1,3 +1,16 @@
-enum E { e1, e2; factory E.f(int i) => E.values[i]; }
-enum F { f1, f2(42), f3.foo(); factory F(int i) => F.values[i]; }
+enum E {
+ e1,
+ e2;
+
+ factory E.f(int i) => E.values[i];
+}
+
+enum F {
+ f1,
+ f2(42),
+ f3.foo();
+
+ factory F(int i) => F.values[i];
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..90d4341
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+enum E {
+ e1,
+ e2;
+
+ factory E.f(int i) => E.values[i];
+}
+
+enum F {
+ f1,
+ f2(42),
+ f3.foo();
+
+ factory F(int i) => F.values[i];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
index 1f73072..359a7ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
@@ -1,2 +1,7 @@
-enum E { v([]); const E(_); }
+enum E {
+ v([]);
+
+ const E(_);
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..359a7ab
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+enum E {
+ v([]);
+
+ const E(_);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
index b70621c..f5732c3 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
@@ -1,6 +1,12 @@
mixin M1 on Enum {
int mixedInMethod1(int v) => v;
}
-enum E with M1 { e1, e2, e3; }
+
+enum E with M1 {
+ e1,
+ e2,
+ e3;
+}
+
expectEquals(x, y) {}
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5c66761
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+enum E with M1 {
+ e1,
+ e2,
+ e3;
+}
+
+expectEquals(x, y) {}
+main() {}
+mixin M1 on Enum {
+ int mixedInMethod1(int v) => v;
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect
index 4aac745..47d7784 100644
--- a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect
@@ -1,3 +1,16 @@
-enum E1 { element; E1(); E1.named(); }
-enum E2 { one.named1(), two.named2(); const E2.named1() : super(); const E2.named2() : super(42, "42"); }
+enum E1 {
+ element;
+
+ E1();
+ E1.named();
+}
+
+enum E2 {
+ one.named1(),
+ two.named2();
+
+ const E2.named1() : super();
+ const E2.named2() : super(42, "42");
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..47d7784
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+enum E1 {
+ element;
+
+ E1();
+ E1.named();
+}
+
+enum E2 {
+ one.named1(),
+ two.named2();
+
+ const E2.named1() : super();
+ const E2.named2() : super(42, "42");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
index 1037478..4235f68 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
@@ -1,3 +1,27 @@
-enum E { one(1), two(2); final int foo; final int bar = 42; static E staticFoo = new E.f(); const E(this.foo); factory E.f() => E.one; int method(int value) => value + 10; String staticMethod(double d, bool b) => "$d$b"; }
-enum E2<X> { one<num>(1), two("2"); final X foo; final X? bar = null; static var staticFoo = () => new E2.f(); const E2(this.foo); factory E2.f() => throw 42; int method(int value) => value + 10; String staticMethod(double d, X x) => "$d$x"; }
+enum E {
+ one(1),
+ two(2);
+
+ final int foo;
+ final int bar = 42;
+ static E staticFoo = new E.f();
+ const E(this.foo);
+ factory E.f() => E.one;
+ int method(int value) => value + 10;
+ String staticMethod(double d, bool b) => "$d$b";
+}
+
+enum E2<X> {
+ one<num>(1),
+ two("2");
+
+ final X foo;
+ final X? bar = null;
+ static var staticFoo = () => new E2.f();
+ const E2(this.foo);
+ factory E2.f() => throw 42;
+ int method(int value) => value + 10;
+ String staticMethod(double d, X x) => "$d$x";
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4235f68
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline_modelled.expect
@@ -0,0 +1,27 @@
+enum E {
+ one(1),
+ two(2);
+
+ final int foo;
+ final int bar = 42;
+ static E staticFoo = new E.f();
+ const E(this.foo);
+ factory E.f() => E.one;
+ int method(int value) => value + 10;
+ String staticMethod(double d, bool b) => "$d$b";
+}
+
+enum E2<X> {
+ one<num>(1),
+ two("2");
+
+ final X foo;
+ final X? bar = null;
+ static var staticFoo = () => new E2.f();
+ const E2(this.foo);
+ factory E2.f() => throw 42;
+ int method(int value) => value + 10;
+ String staticMethod(double d, X x) => "$d$x";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
index c2dd324..1cff5f7 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
@@ -1,4 +1,29 @@
-enum E0 { one(1, bar: 1), two(2, bar: 2); final int foo; final int bar; const E0(this.foo, {required this.bar}); }
-enum E1<X> { one(foo: "1"), two(foo: 2); final X foo; const E1({required this.foo}); }
-enum E2<X, Y, Z> { one(1, bar: "1", baz: 3.14), two("2", baz: 3.14, bar: 2), three(3.0, bar: false); final X foo; final Y bar; final Z? baz; const E2(this.foo, {required this.bar, this.baz = null}); }
+enum E0 {
+ one(1, bar: 1),
+ two(2, bar: 2);
+
+ final int foo;
+ final int bar;
+ const E0(this.foo, {required this.bar});
+}
+
+enum E1<X> {
+ one(foo: "1"),
+ two(foo: 2);
+
+ final X foo;
+ const E1({required this.foo});
+}
+
+enum E2<X, Y, Z> {
+ one(1, bar: "1", baz: 3.14),
+ two("2", baz: 3.14, bar: 2),
+ three(3.0, bar: false);
+
+ final X foo;
+ final Y bar;
+ final Z? baz;
+ const E2(this.foo, {required this.bar, this.baz = null});
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1cff5f7
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,29 @@
+enum E0 {
+ one(1, bar: 1),
+ two(2, bar: 2);
+
+ final int foo;
+ final int bar;
+ const E0(this.foo, {required this.bar});
+}
+
+enum E1<X> {
+ one(foo: "1"),
+ two(foo: 2);
+
+ final X foo;
+ const E1({required this.foo});
+}
+
+enum E2<X, Y, Z> {
+ one(1, bar: "1", baz: 3.14),
+ two("2", baz: 3.14, bar: 2),
+ three(3.0, bar: false);
+
+ final X foo;
+ final Y bar;
+ final Z? baz;
+ const E2(this.foo, {required this.bar, this.baz = null});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect
index 03be650..d49769a 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect
@@ -1,3 +1,18 @@
-enum C { a(1, 2, z: 3), b(z: 3, 1, 2), c(1, z: 3, 2), d.named1(1, 2, 3), e.named2(1, 2, 3), f.named3(1, 2, 3), ; final String log; const C(int x, int y, {int z = 42}) : this.log = "x=$x, y=$y, z=$z"; const C.named1(int x, int y, int z) : this(x, y, z: z); const C.named2(int x, int y, int z) : this(x, z: z, y); const C.named3(int x, int y, int z) : this(z: z, x, y); }
+enum C {
+ a(1, 2, z: 3),
+ b(z: 3, 1, 2),
+ c(1, z: 3, 2),
+ d.named1(1, 2, 3),
+ e.named2(1, 2, 3),
+ f.named3(1, 2, 3),
+ ;
+
+ final String log;
+ const C(int x, int y, {int z = 42}) : this.log = "x=$x, y=$y, z=$z";
+ const C.named1(int x, int y, int z) : this(x, y, z: z);
+ const C.named2(int x, int y, int z) : this(x, z: z, y);
+ const C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
main() {}
expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8fff920
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+enum C {
+ a(1, 2, z: 3),
+ b(z: 3, 1, 2),
+ c(1, z: 3, 2),
+ d.named1(1, 2, 3),
+ e.named2(1, 2, 3),
+ f.named3(1, 2, 3),
+ ;
+
+ final String log;
+ const C(int x, int y, {int z = 42}) : this.log = "x=$x, y=$y, z=$z";
+ const C.named1(int x, int y, int z) : this(x, y, z: z);
+ const C.named2(int x, int y, int z) : this(x, z: z, y);
+ const C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect
index bc9f7ff..e53cb1d 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect
@@ -1,2 +1,7 @@
-enum E { a.b() ; const E.b(); }
+enum E {
+ a.b();
+
+ const E.b();
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e53cb1d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+enum E {
+ a.b();
+
+ const E.b();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
index 8246ad5..89a8e24 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
@@ -1,3 +1,19 @@
-enum E1 { one(1), two.named(2); final int foo; const E1(this.foo); const E1.named(int value) : this(value); }
-enum E2 { one(1), two.named(2); final int foo; const E2(this.foo); const E2.named(int value) : this(value, value); }
+enum E1 {
+ one(1),
+ two.named(2);
+
+ final int foo;
+ const E1(this.foo);
+ const E1.named(int value) : this(value);
+}
+
+enum E2 {
+ one(1),
+ two.named(2);
+
+ final int foo;
+ const E2(this.foo);
+ const E2.named(int value) : this(value, value);
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..89a8e24
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+enum E1 {
+ one(1),
+ two.named(2);
+
+ final int foo;
+ const E1(this.foo);
+ const E1.named(int value) : this(value);
+}
+
+enum E2 {
+ one(1),
+ two.named(2);
+
+ final int foo;
+ const E2(this.foo);
+ const E2.named(int value) : this(value, value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
index d11d9cd..0815587 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
@@ -1,3 +1,21 @@
-enum E1 { one(1), two.named(2); final int foo; const E1(this.foo); const E1.named(int value) : foo = value; }
-enum E2<X, Y> { one<int, String>(1, "one"), two.named("two", 2), three.named("three", "three"); final X foo; final Y bar; const E2(this.foo, this.bar); const E2.named(Y this.bar, X this.foo); }
+enum E1 {
+ one(1),
+ two.named(2);
+
+ final int foo;
+ const E1(this.foo);
+ const E1.named(int value) : foo = value;
+}
+
+enum E2<X, Y> {
+ one<int, String>(1, "one"),
+ two.named("two", 2),
+ three.named("three", "three");
+
+ final X foo;
+ final Y bar;
+ const E2(this.foo, this.bar);
+ const E2.named(Y this.bar, X this.foo);
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0815587
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+enum E1 {
+ one(1),
+ two.named(2);
+
+ final int foo;
+ const E1(this.foo);
+ const E1.named(int value) : foo = value;
+}
+
+enum E2<X, Y> {
+ one<int, String>(1, "one"),
+ two.named("two", 2),
+ three.named("three", "three");
+
+ final X foo;
+ final Y bar;
+ const E2(this.foo, this.bar);
+ const E2.named(Y this.bar, X this.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect
index b33af83..0a18666 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect
@@ -1,10 +1,30 @@
abstract class I {
void foo();
}
-enum E1 implements I { one, two; void foo() {} }
+
+enum E1 implements I {
+ one,
+ two;
+
+ void foo() {}
+}
+
enum E2 implements I { one, two }
-enum E3 implements I? { one, two; void foo() {} }
-enum E4 { one, two; void foo() {} }
+
+enum E3 implements I? {
+ one,
+ two;
+
+ void foo() {}
+}
+
+enum E4 {
+ one,
+ two;
+
+ void foo() {}
+}
+
bar(I i) {}
test(E1 e1, E2 e2, E3 e3, E4 e4) {}
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8fe40d6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline_modelled.expect
@@ -0,0 +1,31 @@
+abstract class I {
+ void foo();
+}
+
+bar(I i) {}
+
+enum E1 implements I {
+ one,
+ two;
+
+ void foo() {}
+}
+
+enum E2 implements I { one, two }
+
+enum E3 implements I? {
+ one,
+ two;
+
+ void foo() {}
+}
+
+enum E4 {
+ one,
+ two;
+
+ void foo() {}
+}
+
+main() {}
+test(E1 e1, E2 e2, E3 e3, E4 e4) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect
index 8e3abd8..a428d0b 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect
@@ -1,15 +1,21 @@
class A {
String get foo => "foo";
}
+
class B {
int bar() => 42;
}
+
mixin M {
void set callOnAssignment(void Function() f) {}
}
+
enum E1 with A { one, two }
+
enum E2 with A, B { one, two }
+
enum E3 with M { one, two }
+
expectEquals(x, y) {}
expectThrows(void Function() f) {}
void throwOnCall() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bd0fbf1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+class A {
+ String get foo => "foo";
+}
+
+class B {
+ int bar() => 42;
+}
+
+enum E1 with A { one, two }
+
+enum E2 with A, B { one, two }
+
+enum E3 with M { one, two }
+
+expectEquals(x, y) {}
+expectThrows(void Function() f) {}
+main() {}
+mixin M {
+ void set callOnAssignment(void Function() f) {}
+}
+void throwOnCall() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
index 4aac745..47d7784 100644
--- a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
@@ -1,3 +1,16 @@
-enum E1 { element; E1(); E1.named(); }
-enum E2 { one.named1(), two.named2(); const E2.named1() : super(); const E2.named2() : super(42, "42"); }
+enum E1 {
+ element;
+
+ E1();
+ E1.named();
+}
+
+enum E2 {
+ one.named1(),
+ two.named2();
+
+ const E2.named1() : super();
+ const E2.named2() : super(42, "42");
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..47d7784
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+enum E1 {
+ element;
+
+ E1();
+ E1.named();
+}
+
+enum E2 {
+ one.named1(),
+ two.named2();
+
+ const E2.named1() : super();
+ const E2.named2() : super(42, "42");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
index 5874d3e..998e815 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
@@ -1,6 +1,12 @@
mixin GM<T> on Enum {}
mixin M on Object {}
+
abstract class I {}
+
abstract class GI<T> {}
-enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> { element }
+
+enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> {
+ element
+}
+
main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9a1883e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+abstract class GI<T> {}
+
+abstract class I {}
+
+enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> {
+ element
+}
+
+main() {}
+mixin GM<T> on Enum {}
+mixin M on Object {}
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect
index 42c4aa9..6b1018f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect
@@ -12,4 +12,5 @@
baz,
cafebabe,
}
+
main() {}
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect
index 1866609..1b22ef3 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect
@@ -4,6 +4,7 @@
}
const int hest = 42;
+
enum Foo {
@hest
bar,
@@ -11,4 +12,5 @@
baz,
cafebabe,
}
+
main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
index ba503dc..8ced954 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
@@ -15,4 +15,5 @@
_Enum,
List,
}
+
main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
index 361bcb3..63ae580 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
@@ -15,4 +15,5 @@
_Enum,
List,
}
+
main() {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
index 9e362fc..f5cfa60 100644
--- a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
@@ -1,6 +1,7 @@
import 'main_lib.dart';
enum Enum1 { a, b, c }
+
typedef Alias1 = Enum1;
test() {}
main() {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
index 596d8b2..5082198 100644
--- a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
@@ -1,6 +1,7 @@
import 'main_lib.dart';
enum Enum1 { a, b, c }
+
main() {}
test() {}
typedef Alias1 = Enum1;
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
index 4e0154a..fcf0e3c 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
@@ -1,5 +1,7 @@
// @dart = 2.9
const a = null;
+
@a
enum E { E1, E2, E3 }
+
main() {}
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect
index 4e0154a..fcf0e3c 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect
@@ -1,5 +1,7 @@
// @dart = 2.9
const a = null;
+
@a
enum E { E1, E2, E3 }
+
main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
index 7e8eab6..d228da5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
@@ -2,5 +2,6 @@
library test;
enum E { v1 }
+
final x = E.v1;
main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
index 7e8eab6..d228da5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
@@ -2,5 +2,6 @@
library test;
enum E { v1 }
+
final x = E.v1;
main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
index 429c184..f7c5643 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
@@ -2,5 +2,6 @@
library test;
enum E { v1 }
+
final x = E.values;
main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
index 429c184..f7c5643 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
@@ -2,5 +2,6 @@
library test;
enum E { v1 }
+
final x = E.values;
main() {}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect
index 0823c8f..9ff88d2 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect
@@ -12,7 +12,9 @@
Future<int?> returnAsync7() async {}
Iterable yieldSync() sync* {}
Stream yieldAsync() async* {}
+
enum Enum { a, b }
+
Enum caseReturn1(Enum e) {}
Enum caseReturn2(Enum e) {}
localFunctions() {}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect
index cc610a6..becfa0f 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect
@@ -13,7 +13,9 @@
String returnExplicit() {}
String returnImplicit() {}
String returnMixed(bool b) {}
+
enum Enum { a, b }
+
localFunctions() {}
main() {}
returnAsync5() async {}
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect
index acc9973..6644830 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect
@@ -1,4 +1,5 @@
enum Enum { e1, e2 }
+
int method1(Enum? e) {}
int method2(Enum? e) {}
int method3(Enum? e) {}
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect
index a18d6e9..78ea1cb 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect
@@ -1,4 +1,5 @@
enum Enum { e1, e2 }
+
expect(expected, actual) {}
int method1(Enum? e) {}
int method2(Enum? e) {}
diff --git a/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
index c10a31d..08d5765 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
@@ -3,4 +3,5 @@
ec1,
ec2,
}
+
main() {}
diff --git a/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
index c10a31d..08d5765 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
@@ -3,4 +3,5 @@
ec1,
ec2,
}
+
main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
index b42a46f..2af2679 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
@@ -2,4 +2,5 @@
a,
b,
}
+
main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
index b42a46f..2af2679 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
@@ -2,4 +2,5 @@
a,
b,
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
index 94dbab2..51a454d 100644
--- a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
@@ -1,28 +1,36 @@
B1 f1() => throw 42;
+
class A1 {
var foo = f1();
A1(this.foo);
}
+
class B1 extends A1 {
B1(super.foo) : super();
}
+
class A2 {
var foo = B2.new;
A2(this.foo);
}
+
class B2 extends A2 {
B2(super.foo) : super();
}
+
class A3 {
var foo = C3.new;
A3();
A3.initializeFoo(this.foo);
}
+
class B3 extends A3 {
var bar = A3.initializeFoo;
B3(this.bar) : super();
}
+
class C3 extends B3 {
C3(super.bar) : super();
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..310cf19
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline_modelled.expect
@@ -0,0 +1,36 @@
+B1 f1() => throw 42;
+
+class A1 {
+ A1(this.foo);
+ var foo = f1();
+}
+
+class A2 {
+ A2(this.foo);
+ var foo = B2.new;
+}
+
+class A3 {
+ A3();
+ A3.initializeFoo(this.foo);
+ var foo = C3.new;
+}
+
+class B1 extends A1 {
+ B1(super.foo) : super();
+}
+
+class B2 extends A2 {
+ B2(super.foo) : super();
+}
+
+class B3 extends A3 {
+ B3(this.bar) : super();
+ var bar = A3.initializeFoo;
+}
+
+class C3 extends B3 {
+ C3(super.bar) : super();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
index 9f3486c..9766c4d 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
@@ -2,97 +2,122 @@
int s;
S1([int x = 0]) : s = x - 1;
}
+
class C1 extends S1 {
int c;
C1([super.x]) : c = x + 1;
}
+
class S2 {
int s;
S2({int x = 0}) : s = x - 1;
}
+
class C2 extends S2 {
int c;
C2({super.x}) : c = x + 1;
}
+
class S3 {
int s;
S3([int x = 0]) : s = x - 1;
}
+
class C3 extends S3 {
int c;
C3([super.x = 42]) : c = x + 1;
}
+
class S4 {
int s;
S4({int x = 0}) : s = x - 1;
}
+
class C4 extends S4 {
int c;
C4({super.x = 42}) : c = x + 1;
}
+
class S5 {
num a;
S5([num x = 3.14]) : a = x - 1;
}
+
class C5 extends S5 {
C5([int super.x]);
}
+
class S6 {
num? a;
S6([num? x = 3.14]) : a = x;
}
+
class C6 extends S6 {
int? b;
C6([int? super.x]);
}
+
class S7 {
int s;
S7([int x = 0]) : s = x - 1;
}
+
class C7 extends S7 {
int c;
C7([super.x]) : c = x + 1;
}
+
class CC7 extends C7 {
int cc;
CC7([super.x]) : cc = x * 1;
}
+
class S8 {
int s;
S8([int x = 0]) : s = x - 1;
}
+
class CC8 extends C8 {
int cc;
CC8([super.x]) : cc = x * 1;
}
+
class C8 extends S8 {
int c;
C8([super.x]) : c = x + 1;
}
+
class CC9 extends C9 {
int cc;
CC9([super.x]) : cc = x * 1;
}
+
class C9 extends S9 {
int c;
C9([super.x]) : c = x + 1;
}
+
class S9 {
int s;
S9([int x = 0]) : s = x - 1;
}
+
class Ap {
Ap([num x = 3.14]);
}
+
class Bp extends Ap {
Bp([int super.x]);
Bp.req(int super.x);
}
+
class An {
An({num x = 3.14});
}
+
class Bn extends An {
Bn({int super.x});
Bn.req({required int super.x});
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6b17d46
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,123 @@
+class An {
+ An({num x = 3.14});
+}
+
+class Ap {
+ Ap([num x = 3.14]);
+}
+
+class Bn extends An {
+ Bn({int super.x});
+ Bn.req({required int super.x});
+}
+
+class Bp extends Ap {
+ Bp([int super.x]);
+ Bp.req(int super.x);
+}
+
+class C1 extends S1 {
+ C1([super.x]) : c = x + 1;
+ int c;
+}
+
+class C2 extends S2 {
+ C2({super.x}) : c = x + 1;
+ int c;
+}
+
+class C3 extends S3 {
+ C3([super.x = 42]) : c = x + 1;
+ int c;
+}
+
+class C4 extends S4 {
+ C4({super.x = 42}) : c = x + 1;
+ int c;
+}
+
+class C5 extends S5 {
+ C5([int super.x]);
+}
+
+class C6 extends S6 {
+ C6([int? super.x]);
+ int? b;
+}
+
+class C7 extends S7 {
+ C7([super.x]) : c = x + 1;
+ int c;
+}
+
+class C8 extends S8 {
+ C8([super.x]) : c = x + 1;
+ int c;
+}
+
+class C9 extends S9 {
+ C9([super.x]) : c = x + 1;
+ int c;
+}
+
+class CC7 extends C7 {
+ CC7([super.x]) : cc = x * 1;
+ int cc;
+}
+
+class CC8 extends C8 {
+ CC8([super.x]) : cc = x * 1;
+ int cc;
+}
+
+class CC9 extends C9 {
+ CC9([super.x]) : cc = x * 1;
+ int cc;
+}
+
+class S1 {
+ S1([int x = 0]) : s = x - 1;
+ int s;
+}
+
+class S2 {
+ S2({int x = 0}) : s = x - 1;
+ int s;
+}
+
+class S3 {
+ S3([int x = 0]) : s = x - 1;
+ int s;
+}
+
+class S4 {
+ S4({int x = 0}) : s = x - 1;
+ int s;
+}
+
+class S5 {
+ S5([num x = 3.14]) : a = x - 1;
+ num a;
+}
+
+class S6 {
+ S6([num? x = 3.14]) : a = x;
+ num? a;
+}
+
+class S7 {
+ S7([int x = 0]) : s = x - 1;
+ int s;
+}
+
+class S8 {
+ S8([int x = 0]) : s = x - 1;
+ int s;
+}
+
+class S9 {
+ S9([int x = 0]) : s = x - 1;
+ int s;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect
index befb5f9..0f8b504 100644
--- a/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect
@@ -1,8 +1,10 @@
class A {
A(num a);
}
+
class B extends A {
B.sub1(int super.a1);
B.sub2(double super.a2);
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0f8b504
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+ A(num a);
+}
+
+class B extends A {
+ B.sub1(int super.a1);
+ B.sub2(double super.a2);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
index d25be67..5a6498f 100644
--- a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
@@ -3,21 +3,52 @@
int s2;
S1(this.s1, [this.s2 = 42]);
}
+
class C1 extends S1 {
int i1;
int i2;
C1(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
}
+
class S2 {
- S2({String one = "1", bool two = false, int three = 3, double four = 4, num five = 3.14, List<String> six = const ["six"]});
+ S2(
+ {String one = "1",
+ bool two = false,
+ int three = 3,
+ double four = 4,
+ num five = 3.14,
+ List<String> six = const ["six"]});
}
+
class C21 extends S2 {
- C21({dynamic foo, super.one, dynamic bar, dynamic baz, super.three, super.five});
+ C21(
+ {dynamic foo,
+ super.one,
+ dynamic bar,
+ dynamic baz,
+ super.three,
+ super.five});
}
+
class C22 extends S2 {
- C22({dynamic foo, super.six, dynamic bar, dynamic baz, super.four, super.two});
+ C22(
+ {dynamic foo,
+ super.six,
+ dynamic bar,
+ dynamic baz,
+ super.four,
+ super.two});
}
+
class C23 extends S2 {
- C23({super.three, dynamic foo, super.one, super.four, dynamic bar, super.two, dynamic baz});
+ C23(
+ {super.three,
+ dynamic foo,
+ super.one,
+ super.four,
+ dynamic bar,
+ super.two,
+ dynamic baz});
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d4a92de
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline_modelled.expect
@@ -0,0 +1,54 @@
+class C1 extends S1 {
+ C1(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
+ int i1;
+ int i2;
+}
+
+class C21 extends S2 {
+ C21(
+ {dynamic foo,
+ super.one,
+ dynamic bar,
+ dynamic baz,
+ super.three,
+ super.five});
+}
+
+class C22 extends S2 {
+ C22(
+ {dynamic foo,
+ super.six,
+ dynamic bar,
+ dynamic baz,
+ super.four,
+ super.two});
+}
+
+class C23 extends S2 {
+ C23(
+ {super.three,
+ dynamic foo,
+ super.one,
+ super.four,
+ dynamic bar,
+ super.two,
+ dynamic baz});
+}
+
+class S1 {
+ S1(this.s1, [this.s2 = 42]);
+ int s1;
+ int s2;
+}
+
+class S2 {
+ S2(
+ {String one = "1",
+ bool two = false,
+ int three = 3,
+ double four = 4,
+ num five = 3.14,
+ List<String> six = const ["six"]});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
index 9eae54a..c769e7d 100644
--- a/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
@@ -4,9 +4,11 @@
S(this.n, this.t);
S.named(this.t, this.n);
}
+
class C<T> extends S<T> {
C.constr1(super.n, String s, super.t);
C.constr2(int i, super.n, String s, super.t) : super();
C.constr3(int i, super.t, String s, super.n) : super.named();
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b593fa1
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+class C<T> extends S<T> {
+ C.constr1(super.n, String s, super.t);
+ C.constr2(int i, super.n, String s, super.t) : super();
+ C.constr3(int i, super.t, String s, super.n) : super.named();
+}
+
+class S<T> {
+ S(this.n, this.t);
+ S.named(this.t, this.n);
+ T t;
+ num n;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect
index f0bc3ea..91dee23 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect
@@ -2,7 +2,9 @@
final int foo;
A(this.foo);
}
+
class B extends A {
B(super.foo);
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ce8d868
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+ A(this.foo);
+ final int foo;
+}
+
+class B extends A {
+ B(super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
index a194020..ebcc1b5 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
@@ -5,18 +5,22 @@
A1.named2(int foo) : foo = foo;
A1.named3({required int foo}) : foo = foo;
}
+
class B1 extends A1 {
B1(super.foo);
B1.named(super.foo) : super.named();
B1.named2(super.foo) : super.named2();
B1.named3({required super.foo}) : super.named3();
}
+
class A2 {
final int foo;
final String bar;
A2({required int this.foo, required String this.bar});
}
+
class B2 extends A2 {
B2({required super.bar, required super.foo});
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7b7faf4
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline_modelled.expect
@@ -0,0 +1,26 @@
+class A1 {
+ A1(this.foo);
+ A1.named(this.foo);
+ A1.named2(int foo) : foo = foo;
+ A1.named3({required int foo}) : foo = foo;
+ final int foo;
+}
+
+class A2 {
+ A2({required int this.foo, required String this.bar});
+ final String bar;
+ final int foo;
+}
+
+class B1 extends A1 {
+ B1(super.foo);
+ B1.named(super.foo) : super.named();
+ B1.named2(super.foo) : super.named2();
+ B1.named3({required super.foo}) : super.named3();
+}
+
+class B2 extends A2 {
+ B2({required super.bar, required super.foo});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect
index 3c4243b..ff4395b 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect
@@ -2,22 +2,28 @@
final int foo;
A1({required this.foo});
}
+
class B1 extends A1 {
B1({required super.foo}) : super();
}
+
class C1 extends A1 {
C1({required super.foo}) : super(foo: foo);
}
+
class A2 {
final int foo;
final String bar;
A2({required this.foo, required this.bar});
}
+
class B2 extends A2 {
B2() : super(foo: 42, bar: "bar", baz: false);
}
+
class C2 extends A2 {
C2({required super.foo}) : super();
C2.other({required super.foo}) : super(bar: 'bar');
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4ce72d0
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,29 @@
+class A1 {
+ A1({required this.foo});
+ final int foo;
+}
+
+class A2 {
+ A2({required this.foo, required this.bar});
+ final String bar;
+ final int foo;
+}
+
+class B1 extends A1 {
+ B1({required super.foo}) : super();
+}
+
+class B2 extends A2 {
+ B2() : super(foo: 42, bar: "bar", baz: false);
+}
+
+class C1 extends A1 {
+ C1({required super.foo}) : super(foo: foo);
+}
+
+class C2 extends A2 {
+ C2({required super.foo}) : super();
+ C2.other({required super.foo}) : super(bar: 'bar');
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
index a6fc5bc..2d8c920 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
@@ -2,21 +2,27 @@
final int foo;
A1(this.foo);
}
+
class B1 extends A1 {
B1(super.foo) : super();
}
+
class C1 extends A1 {
C1(super.foo) : super(42);
}
+
class A2 {
final int foo;
final String bar;
A2(this.foo, this.bar);
}
+
class B2 extends A2 {
B2() : super(0, 1, 2);
}
+
class C2 extends A2 {
C2(super.foo) : super();
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0602b3a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+class A1 {
+ A1(this.foo);
+ final int foo;
+}
+
+class A2 {
+ A2(this.foo, this.bar);
+ final String bar;
+ final int foo;
+}
+
+class B1 extends A1 {
+ B1(super.foo) : super();
+}
+
+class B2 extends A2 {
+ B2() : super(0, 1, 2);
+}
+
+class C1 extends A1 {
+ C1(super.foo) : super(42);
+}
+
+class C2 extends A2 {
+ C2(super.foo) : super();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect
index 7acd1b7..d71530b 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect
@@ -3,8 +3,10 @@
int s2;
S([this.s1 = 1, this.s2 = 2]);
}
+
class C extends S {
int c1;
C(this.c1, [int super.s1, int x = 0, int super.s2]);
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4d4ec1e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class C extends S {
+ C(this.c1, [int super.s1, int x = 0, int super.s2]);
+ int c1;
+}
+
+class S {
+ S([this.s1 = 1, this.s2 = 2]);
+ int s1;
+ int s2;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
index ed0e4f7..570dcce 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
@@ -2,53 +2,75 @@
final int a;
A1(this.a);
}
+
class B1 {}
+
class C1 = A1 with B1;
+
class D1 extends C1 {
D1(super.a);
}
+
class A2 {
final int a;
A2({this.a = 0});
}
+
class B2 {}
+
class C2 = A2 with B2;
+
class D2 extends C2 {
D2({super.a});
}
+
class A3 {
final int a;
A3([this.a = 0]);
}
+
class B3 {}
+
class C3 = A3 with B3;
+
class D3 extends C3 {
D3([super.a]);
}
+
class D4 extends C4 {
D4([super.foo]);
}
+
class C4 = A4 with B4;
+
class B4 {}
+
class A4 extends AA4 {
A4([super.foo]);
}
+
class AA4 {
final int foo;
AA4([this.foo = 42]);
}
+
class D5 extends C5c {
D5([super.foo]);
}
+
class C5c = C5b with B5;
class C5b = C5a with B5;
class C5a = A5 with B5;
+
class B5 {}
+
class A5 extends AA5 {
A5([super.foo]);
}
+
class AA5 {
final int foo;
AA5([this.foo = 42]);
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a0dfff2
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,72 @@
+class A1 {
+ A1(this.a);
+ final int a;
+}
+
+class A2 {
+ A2({this.a = 0});
+ final int a;
+}
+
+class A3 {
+ A3([this.a = 0]);
+ final int a;
+}
+
+class A4 extends AA4 {
+ A4([super.foo]);
+}
+
+class A5 extends AA5 {
+ A5([super.foo]);
+}
+
+class AA4 {
+ AA4([this.foo = 42]);
+ final int foo;
+}
+
+class AA5 {
+ AA5([this.foo = 42]);
+ final int foo;
+}
+
+class B1 {}
+
+class B2 {}
+
+class B3 {}
+
+class B4 {}
+
+class B5 {}
+
+class C1 = A1 with B1;
+class C2 = A2 with B2;
+class C3 = A3 with B3;
+class C4 = A4 with B4;
+class C5a = A5 with B5;
+class C5b = C5a with B5;
+class C5c = C5b with B5;
+
+class D1 extends C1 {
+ D1(super.a);
+}
+
+class D2 extends C2 {
+ D2({super.a});
+}
+
+class D3 extends C3 {
+ D3([super.a]);
+}
+
+class D4 extends C4 {
+ D4([super.foo]);
+}
+
+class D5 extends C5c {
+ D5([super.foo]);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
index 1e4deb1..0903aa2 100644
--- a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
@@ -2,44 +2,56 @@
final String foo;
A1(this.foo);
}
+
typedef TA1 = A1;
typedef TTA1 = TA1;
typedef TTTA1 = TTA1;
typedef TTTTA1 = TTTA1;
+
class D1 extends TTTTA1 {
D1(super.foo);
}
+
class A2 {
final String foo;
A2({this.foo = "bar"});
}
+
typedef TA2 = A2;
typedef TTA2 = TA2;
typedef TTTA2 = TTA2;
typedef TTTTA2 = TTTA2;
+
class D2 extends TTTTA2 {
D2({super.foo});
}
+
class A3 {
final String foo;
A3([this.foo = "bar"]);
}
+
typedef TA3 = A3;
typedef TTA3 = TA3;
typedef TTTA3 = TTA3;
typedef TTTTA3 = TTTA3;
+
class D3 extends TTTTA3 {
D3([super.foo]);
}
+
class D4 extends TTTTA4 {
D4([super.foo]);
}
+
typedef TTTTA4 = TTTA4;
typedef TTTA4 = TTA4;
typedef TTA4 = TA4;
typedef TA4 = A4;
+
class A4 {
final String foo;
A4([this.foo = "bar"]);
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..095c390
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline_modelled.expect
@@ -0,0 +1,53 @@
+class A1 {
+ A1(this.foo);
+ final String foo;
+}
+
+class A2 {
+ A2({this.foo = "bar"});
+ final String foo;
+}
+
+class A3 {
+ A3([this.foo = "bar"]);
+ final String foo;
+}
+
+class A4 {
+ A4([this.foo = "bar"]);
+ final String foo;
+}
+
+class D1 extends TTTTA1 {
+ D1(super.foo);
+}
+
+class D2 extends TTTTA2 {
+ D2({super.foo});
+}
+
+class D3 extends TTTTA3 {
+ D3([super.foo]);
+}
+
+class D4 extends TTTTA4 {
+ D4([super.foo]);
+}
+
+main() {}
+typedef TA1 = A1;
+typedef TA2 = A2;
+typedef TA3 = A3;
+typedef TA4 = A4;
+typedef TTA1 = TA1;
+typedef TTA2 = TA2;
+typedef TTA3 = TA3;
+typedef TTA4 = TA4;
+typedef TTTA1 = TTA1;
+typedef TTTA2 = TTA2;
+typedef TTTA3 = TTA3;
+typedef TTTA4 = TTA4;
+typedef TTTTA1 = TTTA1;
+typedef TTTTA2 = TTTA2;
+typedef TTTTA3 = TTTA3;
+typedef TTTTA4 = TTTA4;
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect
index f29b981..82f686f 100644
--- a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect
@@ -2,35 +2,45 @@
final int foo;
A1(int this.foo);
}
+
class B1 extends A1 {
B1(int super.foo);
}
+
class A2 {
final int Function(int) foo;
A2(int Function(int) this.foo);
}
+
class B2 extends A2 {
B2(int Function(int) super.foo);
}
+
class A3 {
final int Function(int) foo;
A3(int this.foo(int));
}
+
class B3 extends A3 {
B3(int super.foo(int));
}
+
class A4 {
final void Function() Function(void Function()) foo;
A4(void Function() this.foo(void Function()));
}
+
class B4 extends A4 {
B4(void Function() super.foo(void Function()));
}
+
class A5 {
final void Function() Function(void Function()) foo;
A5(void Function() Function(void Function()) this.foo);
}
+
class B5 extends A5 {
B5(void Function() Function(void Function()) super.foo);
}
+
main() {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cf41b18
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,46 @@
+class A1 {
+ A1(int this.foo);
+ final int foo;
+}
+
+class A2 {
+ A2(int Function(int) this.foo);
+ final int Function(int) foo;
+}
+
+class A3 {
+ A3(int this.foo(int));
+ final int Function(int) foo;
+}
+
+class A4 {
+ A4(void Function() this.foo(void Function()));
+ final void Function() Function(void Function()) foo;
+}
+
+class A5 {
+ A5(void Function() Function(void Function()) this.foo);
+ final void Function() Function(void Function()) foo;
+}
+
+class B1 extends A1 {
+ B1(int super.foo);
+}
+
+class B2 extends A2 {
+ B2(int Function(int) super.foo);
+}
+
+class B3 extends A3 {
+ B3(int super.foo(int));
+}
+
+class B4 extends A4 {
+ B4(void Function() super.foo(void Function()));
+}
+
+class B5 extends A5 {
+ B5(void Function() Function(void Function()) super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index e5d43b6..6b47db9 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -28,30 +28,8 @@
constructor_tearoffs/new_as_selector: FormatterCrash
dart2js/late_fields: FormatterCrash
dart2js/late_statics: FormatterCrash
-enhanced_enums/conflicting_elements: FormatterCrash
-enhanced_enums/constructor_calls: FormatterCrash
-enhanced_enums/constructor_not_found: FormatterCrash
-enhanced_enums/declared_values: FormatterCrash
enhanced_enums/entries_with_type_arguments: FormatterCrash
-enhanced_enums/enum_as_supertype: FormatterCrash
-enhanced_enums/inference_in_constructor_parameters: FormatterCrash
-enhanced_enums/instantiated_generic_enum_types: FormatterCrash
-enhanced_enums/issue48084: FormatterCrash
-enhanced_enums/issue48181: FormatterCrash
-enhanced_enums/issue48232: FormatterCrash
-enhanced_enums/issue48303: FormatterCrash
-enhanced_enums/malformed_constructors: FormatterCrash
-enhanced_enums/members: FormatterCrash
-enhanced_enums/named_arguments: FormatterCrash
-enhanced_enums/named_arguments_anywhere/redirecting_constructor: FormatterCrash
-enhanced_enums/qualified_names_with_no_type_arguments: FormatterCrash
enhanced_enums/recovery_in_elements: FormatterCrash
-enhanced_enums/redirecting_initializers: FormatterCrash
-enhanced_enums/simple_fields: FormatterCrash
-enhanced_enums/simple_interfaces: FormatterCrash
-enhanced_enums/simple_mixins: FormatterCrash
-enhanced_enums/super_parameters/malformed_constructors: FormatterCrash
-enhanced_enums/supertype_resolved_before_checking: FormatterCrash
extension_types/basic_show: FormatterCrash
extension_types/call_not_get: FormatterCrash
extension_types/keyword_in_show_hide_element: FormatterCrash
@@ -231,22 +209,8 @@
regress/issue_39091_1: FormatterCrash
regress/issue_41265.crash: Crash
regress/issue_41265.crash: FormatterCrash
-super_parameters/circular_dependency_inference: FormatterCrash
-super_parameters/default_values: FormatterCrash
super_parameters/issue47741: FormatterCrash
super_parameters/issue47922: FormatterCrash
-super_parameters/issue47951: FormatterCrash
-super_parameters/issue48142: FormatterCrash
-super_parameters/issue48286: FormatterCrash
-super_parameters/simple: FormatterCrash
-super_parameters/simple_inference: FormatterCrash
-super_parameters/simple_named_super_parameters: FormatterCrash
-super_parameters/simple_positional_super_parameters: FormatterCrash
-super_parameters/super_parameters_with_types_and_default_values: FormatterCrash
-super_parameters/synthesized_super_constructor_with_parameters: FormatterCrash
-super_parameters/type_alias_in_supertype: FormatterCrash
-super_parameters/typed_super_parameter: FormatterCrash
-super_parameters/typed_super_parameters: FormatterCrash
triple_shift/invalid_operator: FormatterCrash
variance/class_type_parameter_modifier: FormatterCrash
variance/generic_covariance_sound_variance: FormatterCrash
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index 93c832a..cc0d964 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -616,7 +616,6 @@
// DiscoverBlocks computes parent_ and assigned_vars_ which are then used
// if/when computing SSA.
GrowableArray<intptr_t> parent_;
- GrowableArray<BitVector*> assigned_vars_;
intptr_t current_ssa_temp_index_;
intptr_t max_block_id_;
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 58b4a50..809c16c 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -182,7 +182,6 @@
private:
friend class FlowGraphPrinter;
- friend class FlowGraphDeserializer; // For setting reaching_type_ directly.
Definition* definition_;
Value* previous_use_;
@@ -1347,13 +1346,14 @@
class TemplateInstruction
: public CSETrait<Instruction, PureInstruction>::Base {
public:
+ using BaseClass = typename CSETrait<Instruction, PureInstruction>::Base;
+
explicit TemplateInstruction(intptr_t deopt_id = DeoptId::kNone)
- : CSETrait<Instruction, PureInstruction>::Base(deopt_id), inputs_() {}
+ : BaseClass(deopt_id), inputs_() {}
TemplateInstruction(const InstructionSource& source,
intptr_t deopt_id = DeoptId::kNone)
- : CSETrait<Instruction, PureInstruction>::Base(source, deopt_id),
- inputs_() {}
+ : BaseClass(source, deopt_id), inputs_() {}
virtual intptr_t InputCount() const { return N; }
virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
@@ -1616,14 +1616,8 @@
: Instruction(deopt_id),
block_id_(block_id),
try_index_(try_index),
- preorder_number_(-1),
- postorder_number_(-1),
stack_depth_(stack_depth),
- dominator_(nullptr),
- dominated_blocks_(1),
- last_instruction_(NULL),
- parallel_move_(nullptr),
- loop_info_(nullptr) {}
+ dominated_blocks_(1) {}
// Perform a depth first search to find OSR entry and
// link it to the given graph entry.
@@ -1632,8 +1626,6 @@
BitVector* block_marks);
private:
- friend class FlowGraphDeserializer; // Access to AddPredecessor().
-
virtual void RawSetInputAt(intptr_t i, Value* value) { UNREACHABLE(); }
virtual void ClearPredecessors() = 0;
@@ -1643,25 +1635,26 @@
intptr_t block_id_;
intptr_t try_index_;
- intptr_t preorder_number_;
- intptr_t postorder_number_;
+ intptr_t preorder_number_ = -1;
+ intptr_t postorder_number_ = -1;
// Expected stack depth on entry (for stack-based IR only).
intptr_t stack_depth_;
// Starting and ending lifetime positions for this block. Used by
// the linear scan register allocator.
- intptr_t start_pos_;
- intptr_t end_pos_;
- BlockEntryInstr* dominator_; // Immediate dominator, NULL for graph entry.
+ intptr_t start_pos_ = -1;
+ intptr_t end_pos_ = -1;
+ // Immediate dominator, nullptr for graph entry.
+ BlockEntryInstr* dominator_ = nullptr;
// TODO(fschneider): Optimize the case of one child to save space.
GrowableArray<BlockEntryInstr*> dominated_blocks_;
- Instruction* last_instruction_;
+ Instruction* last_instruction_ = nullptr;
// Parallel move that will be used by linear scan register allocator to
// connect live ranges at the start of the block.
- ParallelMoveInstr* parallel_move_;
+ ParallelMoveInstr* parallel_move_ = nullptr;
// Closest enveloping loop in loop hierarchy (nullptr at nesting depth 0).
- LoopInfo* loop_info_;
+ LoopInfo* loop_info_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(BlockEntryInstr);
};
@@ -1851,8 +1844,6 @@
PRINT_TO_SUPPORT
private:
- friend class FlowGraphDeserializer; // For the constructor with deopt_id arg.
-
GraphEntryInstr(const ParsedFunction& parsed_function,
intptr_t osr_id,
intptr_t deopt_id);
@@ -2523,12 +2514,13 @@
template <typename Impure, typename Pure> class CSETrait = NoCSE>
class TemplateDefinition : public CSETrait<Definition, PureDefinition>::Base {
public:
+ using BaseClass = typename CSETrait<Definition, PureDefinition>::Base;
+
explicit TemplateDefinition(intptr_t deopt_id = DeoptId::kNone)
- : CSETrait<Definition, PureDefinition>::Base(deopt_id), inputs_() {}
+ : BaseClass(deopt_id), inputs_() {}
TemplateDefinition(const InstructionSource& source,
intptr_t deopt_id = DeoptId::kNone)
- : CSETrait<Definition, PureDefinition>::Base(source, deopt_id),
- inputs_() {}
+ : BaseClass(source, deopt_id), inputs_() {}
virtual intptr_t InputCount() const { return N; }
virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
@@ -2551,7 +2543,6 @@
: block_(block),
inputs_(num_inputs),
representation_(kTagged),
- reaching_defs_(NULL),
is_alive_(false),
is_receiver_(kUnknownReceiver) {
for (intptr_t i = 0; i < num_inputs; ++i) {
@@ -2642,7 +2633,7 @@
JoinEntryInstr* block_;
GrowableArray<Value*> inputs_;
Representation representation_;
- BitVector* reaching_defs_;
+ BitVector* reaching_defs_ = nullptr;
bool is_alive_;
int8_t is_receiver_;
@@ -2958,10 +2949,9 @@
//
// This lowlevel instruction is non-inlinable since it makes assumptons about
// the frame. This is asserted via `inliner.cc::CalleeGraphValidator`.
-class TailCallInstr : public Instruction {
+class TailCallInstr : public TemplateInstruction<1, Throws, Pure> {
public:
- TailCallInstr(const Code& code, Value* arg_desc)
- : code_(code), arg_desc_(NULL) {
+ TailCallInstr(const Code& code, Value* arg_desc) : code_(code) {
SetInputAt(0, arg_desc);
}
@@ -2969,19 +2959,8 @@
const Code& code() const { return code_; }
- virtual intptr_t InputCount() const { return 1; }
- virtual Value* InputAt(intptr_t i) const {
- ASSERT(i == 0);
- return arg_desc_;
- }
- virtual void RawSetInputAt(intptr_t i, Value* value) {
- ASSERT(i == 0);
- arg_desc_ = value;
- }
-
// Two tailcalls can be canonicalized into one instruction if both have the
// same destination.
- virtual bool AllowsCSE() const { return true; }
virtual bool AttributesEqual(const Instruction& other) const {
return &other.AsTailCall()->code() == &code();
}
@@ -2989,14 +2968,14 @@
// Since no code after this instruction will be executed, there will be no
// side-effects for the following code.
virtual bool HasUnknownSideEffects() const { return false; }
- virtual bool MayThrow() const { return true; }
virtual bool ComputeCanDeoptimize() const { return false; }
PRINT_OPERANDS_TO_SUPPORT
private:
const Code& code_;
- Value* arg_desc_;
+
+ DISALLOW_COPY_AND_ASSIGN(TailCallInstr);
};
class PushArgumentInstr : public TemplateDefinition<1, NoThrow> {
@@ -5370,8 +5349,6 @@
DECLARE_INSTRUCTION(AllocateHandle)
- virtual intptr_t InputCount() const { return 1; }
- virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const;
virtual Representation representation() const { return kUnboxedIntPtr; }
virtual bool ComputeCanDeoptimize() const { return false; }
@@ -5393,8 +5370,6 @@
DECLARE_INSTRUCTION(RawStoreField)
- virtual intptr_t InputCount() const { return 2; }
- virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
virtual Representation RequiredInputRepresentation(intptr_t idx) const;
virtual bool ComputeCanDeoptimize() const { return false; }
virtual bool HasUnknownSideEffects() const { return false; }
@@ -9742,7 +9717,6 @@
private:
friend class ShallowIterator;
friend class compiler::BlockBuilder; // For Environment constructor.
- friend class FlowGraphDeserializer; // For constructor and deopt_id_.
class LazyDeoptPruningBits : public BitField<uintptr_t, uintptr_t, 0, 8> {};
class LazyDeoptToBeforeDeoptId
diff --git a/runtime/vm/compiler/backend/range_analysis.h b/runtime/vm/compiler/backend/range_analysis.h
index aa247c7..aa1f6b9 100644
--- a/runtime/vm/compiler/backend/range_analysis.h
+++ b/runtime/vm/compiler/backend/range_analysis.h
@@ -302,8 +302,6 @@
int64_t SmiLowerBound() const { return LowerBound(kRangeBoundarySmi); }
private:
- friend class FlowGraphDeserializer; // For setting fields directly.
-
RangeBoundary(Kind kind, int64_t value, int64_t offset)
: kind_(kind), value_(value), offset_(offset) {}
@@ -539,8 +537,6 @@
Range* result);
private:
- friend class FlowGraphDeserializer; // For setting min_/max_ directly.
-
RangeBoundary min_;
RangeBoundary max_;
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index 514c7ee..ab82fe2 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -343,8 +343,6 @@
Representation UnboxedRepresentation() const;
private:
- friend class FlowGraphDeserializer; // For GetNativeSlot.
-
Slot(Kind kind,
int8_t bits,
ClassIdTagType cid,
diff --git a/tests/language/enum/enhanced_enums_basic_test.dart b/tests/language/enum/enhanced_enums_basic_test.dart
index 2b29521..be97c45 100644
--- a/tests/language/enum/enhanced_enums_basic_test.dart
+++ b/tests/language/enum/enhanced_enums_basic_test.dart
@@ -104,8 +104,8 @@
Expect.equals(0, EnumAll.v1.instanceMethod());
Expect.identical(EnumAll.v4, EnumAll.v3 ^ EnumAll.v2);
- Expect.equals("EnumAll.v1:EnumMixin<num>:ObjectMixin:this",
- EnumAll.v1.thisAndSuper());
+ Expect.equals(
+ "EnumAll.v1:EnumMixin<num>:ObjectMixin:this", EnumAll.v1.thisAndSuper());
// Which can reference type parameters.
Expect.isTrue(EnumAll.v2.test(2)); // does `is T` with `T` being `int`.
@@ -157,13 +157,18 @@
// Also if using type parameters, mixins or interfaces.
// It only matters whether there is something after the values.
enum EnumNoSemicolon<T extends num> with ObjectMixin implements Interface {
- v1, v2, v3
+ v1,
+ v2,
+ v3
}
-
// Allows semicolon after values, even when not needed.
// Without trailing comma.
-enum EnumPlainSemicolon { v1, v2, v3; }
+enum EnumPlainSemicolon {
+ v1,
+ v2,
+ v3;
+}
// With trailing comma.
enum EnumPlainTrailingCommaSemicolon {
@@ -202,6 +207,7 @@
static late var sLateVarInit = v3;
static EnumAll? sVar;
static EnumAll sVarInit = v3;
+
/// Static getters, setters and methods
static EnumAll<int, int> get staticGetSet => v3;
static set staticGetSet(EnumAll<int, int> _) {}
@@ -210,10 +216,13 @@
// Constructors.
// Generative, non-redirecting, unnamed.
const EnumAll({T? y})
- : constructor = "unnamed", this.x = 0 as S, y = y ?? (0 as T);
+ : constructor = "unnamed",
+ this.x = 0 as S,
+ y = y ?? (0 as T);
// Generative, non-redirecting, named.
const EnumAll.named(this.x, {T? y, String? constructor})
- : constructor = constructor ?? "named", y = y ?? (0 as T);
+ : constructor = constructor ?? "named",
+ y = y ?? (0 as T);
// Generative, redirecting.
const EnumAll.renamed(S x, {T? y})
: this.named(x, y: y, constructor: "renamed");
@@ -266,6 +275,7 @@
Expect.fail("Unreachable");
return "not";
}
+
String get extension => "extension";
}
@@ -282,6 +292,7 @@
enum NewNamedConstructor {
v1;
+
const NewNamedConstructor.new();
}
@@ -301,13 +312,16 @@
v1<int>(1),
v2<num>(1),
v3<num>(1);
+
final T value;
const Canonical(this.value);
}
// Both `toString` and `index` are inherited from superclass.
enum OverrideEnum {
- v1, v2;
+ v1,
+ v2;
+
// Cannot override index
int get superIndex => super.index;
String toString() => "FakeString";
@@ -318,6 +332,7 @@
enum SelfRefEnum {
e1(null),
e2(e1);
+
final SelfRefEnum? previous;
const SelfRefEnum(this.previous);
}
@@ -343,9 +358,7 @@
String toString() => "${super.toString()}:EnumMixin<$T>";
}
-abstract class Interface {
-
-}
+abstract class Interface {}
abstract class GenericInterface<T> {
// Implemented by mixins.
diff --git a/tests/language/enum/enhanced_enums_subtype_error_test.dart b/tests/language/enum/enhanced_enums_subtype_error_test.dart
index ae0be18..728c227 100644
--- a/tests/language/enum/enhanced_enums_subtype_error_test.dart
+++ b/tests/language/enum/enhanced_enums_subtype_error_test.dart
@@ -150,7 +150,8 @@
// [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
}
-abstract class MixesInEnum with MyEnum { // It's not a mixin!
+// It's not a mixin!
+abstract class MixesInEnum with MyEnum {
// ^
// [cfe] 'MyEnum' is an enum and can't be extended or implemented.
// [cfe] Can't use 'MyEnum' as a mixin because it has constructors.
diff --git a/tests/language/enum/enum_test.dart b/tests/language/enum/enum_test.dart
index 4deb861..9678587 100644
--- a/tests/language/enum/enum_test.dart
+++ b/tests/language/enum/enum_test.dart
@@ -5,13 +5,18 @@
import 'package:expect/expect.dart';
enum Enum1 { _ }
+
enum Enum2 { A }
+
enum Enum3 { B, C }
+
enum Enum4 {
D,
E,
}
+
enum Enum5 { F, G, H }
+
enum _Enum6 { I, _J }
enum _IsNot { IsNot }
diff --git a/tests/language/enum/is_keyword_runtime_test.dart b/tests/language/enum/is_keyword_runtime_test.dart
index 2e9a471..3f24d63 100644
--- a/tests/language/enum/is_keyword_runtime_test.dart
+++ b/tests/language/enum/is_keyword_runtime_test.dart
@@ -8,6 +8,4 @@
// Test that `enum` is considered a keyword and therefore invalid as the name of
// declarations.
-main() {
-
-}
+main() {}
diff --git a/tests/language/enum/private_runtime_1_test.dart b/tests/language/enum/private_runtime_1_test.dart
index 34af126..27b4b74 100644
--- a/tests/language/enum/private_runtime_1_test.dart
+++ b/tests/language/enum/private_runtime_1_test.dart
@@ -21,5 +21,4 @@
main() {
Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
Expect.equals('Enum2._A,Enum2._B', Enum2.values.join(','));
-
}
diff --git a/tests/language/enum/private_runtime_test.dart b/tests/language/enum/private_runtime_test.dart
index adc8d7a..e479dfd 100644
--- a/tests/language/enum/private_runtime_test.dart
+++ b/tests/language/enum/private_runtime_test.dart
@@ -20,6 +20,4 @@
main() {
Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
-
-
}
diff --git a/tests/language/named_arguments_anywhere/all_kinds_test.dart b/tests/language/named_arguments_anywhere/all_kinds_test.dart
index 004796e..059f3e6 100644
--- a/tests/language/named_arguments_anywhere/all_kinds_test.dart
+++ b/tests/language/named_arguments_anywhere/all_kinds_test.dart
@@ -216,8 +216,8 @@
z: evaluate(false), w: evaluate(3.14));
});
runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
- a.property(evaluate(1),
- z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+ a.property(
+ evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
});
runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
a.property(
@@ -228,8 +228,8 @@
w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
});
runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
- a.property(evaluate(1),
- w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+ a.property(
+ evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
});
runAndCheckEvaluationOrder([1, 3.14, "2"], () {
a.property(evaluate(1), w: evaluate(3.14), evaluate("2"));
@@ -306,8 +306,8 @@
z: evaluate(false), w: evaluate(3.14));
});
runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
- A.redirFactory(evaluate(1),
- z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+ A.redirFactory(
+ evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
});
runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
A.redirFactory(
@@ -318,8 +318,8 @@
w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
});
runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
- A.redirFactory(evaluate(1),
- w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+ A.redirFactory(
+ evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
});
runAndCheckEvaluationOrder([1, 3.14, "2"], () {
A.redirFactory(evaluate(1), w: evaluate(3.14), evaluate("2"));
@@ -373,8 +373,8 @@
: super(evaluate(1), evaluate("2"),
z: evaluate(false), w: evaluate(3.14));
Test.super2()
- : super(evaluate(1),
- z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+ : super(
+ evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
Test.super3()
: super(
z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
@@ -382,8 +382,8 @@
: super(
w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
Test.super5()
- : super(evaluate(1),
- w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+ : super(
+ evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
Test.super6() : super(evaluate(1), w: evaluate(3.14), evaluate("2"));
test() {
@@ -392,8 +392,8 @@
z: evaluate(false), w: evaluate(3.14));
});
runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
- super.bar(evaluate(1),
- z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+ super.bar(
+ evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
});
runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
super.bar(
@@ -404,8 +404,8 @@
w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
});
runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
- super.bar(evaluate(1),
- w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+ super.bar(
+ evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
});
runAndCheckEvaluationOrder([1, 3.14, "2"], () {
super.bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
diff --git a/tests/language_2/enum/enum_test.dart b/tests/language_2/enum/enum_test.dart
index 73b3db6..4cb22a1 100644
--- a/tests/language_2/enum/enum_test.dart
+++ b/tests/language_2/enum/enum_test.dart
@@ -7,13 +7,18 @@
import 'package:expect/expect.dart';
enum Enum1 { _ }
+
enum Enum2 { A }
+
enum Enum3 { B, C }
+
enum Enum4 {
D,
E,
}
+
enum Enum5 { F, G, H }
+
enum _Enum6 { I, _J }
enum _IsNot { IsNot }
diff --git a/tests/language_2/enum/is_keyword_runtime_test.dart b/tests/language_2/enum/is_keyword_runtime_test.dart
index 8ea644f..4c8c400 100644
--- a/tests/language_2/enum/is_keyword_runtime_test.dart
+++ b/tests/language_2/enum/is_keyword_runtime_test.dart
@@ -10,6 +10,4 @@
// Test that `enum` is considered a keyword and therefore invalid as the name of
// declarations.
-main() {
-
-}
+main() {}
diff --git a/tests/language_2/enum/private_runtime_1_test.dart b/tests/language_2/enum/private_runtime_1_test.dart
index b2fbfee..9234818 100644
--- a/tests/language_2/enum/private_runtime_1_test.dart
+++ b/tests/language_2/enum/private_runtime_1_test.dart
@@ -23,5 +23,4 @@
main() {
Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
Expect.equals('Enum2._A,Enum2._B', Enum2.values.join(','));
-
}
diff --git a/tests/language_2/enum/private_runtime_test.dart b/tests/language_2/enum/private_runtime_test.dart
index ad44d80..ea9c19a 100644
--- a/tests/language_2/enum/private_runtime_test.dart
+++ b/tests/language_2/enum/private_runtime_test.dart
@@ -22,6 +22,4 @@
main() {
Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
-
-
}
diff --git a/tools/VERSION b/tools/VERSION
index f2bbd92..16ef2ea 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 174
+PRERELEASE 175
PRERELEASE_PATCH 0
\ No newline at end of file