Version 2.12.0-263.0.dev
Merge commit 'cc1cc0bb578e7372a40f3fd515fa37427f66e5ec' into 'dev'
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 947a966..5b7d558 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -7,11 +7,13 @@
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import '../analysis_abstract.dart';
import 'abstract_search_domain.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(ElementReferencesTest);
+ defineReflectiveTests(ElementReferencesWithNonFunctionTypeAliasesTest);
});
}
@@ -19,6 +21,8 @@
class ElementReferencesTest extends AbstractSearchDomainTest {
Element searchElement;
+ bool get hasNonFunctionTypeAliases => false;
+
void assertHasRef(SearchResultKind kind, String search, bool isPotential) {
assertHasResult(kind, search);
expect(result.isPotential, isPotential);
@@ -863,26 +867,36 @@
assertHasResult(SearchResultKind.REFERENCE, 'int b');
}
- Future<void> test_typeReference_functionType() async {
- addTestFile('''
-typedef F();
-main(F f) {
-}
-''');
- await findElementReferences('F()', false);
- expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS);
- expect(results, hasLength(1));
- assertHasResult(SearchResultKind.REFERENCE, 'F f');
- }
-
- Future<void> test_typeReference_genericTypeAlias_function() async {
+ Future<void> test_typeReference_typeAlias_functionType() async {
addTestFile('''
typedef F = Function();
main(F f) {
}
''');
await findElementReferences('F =', false);
- expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS);
+ expect(
+ searchElement.kind,
+ hasNonFunctionTypeAliases
+ ? ElementKind.TYPE_ALIAS
+ : ElementKind.FUNCTION_TYPE_ALIAS,
+ );
+ expect(results, hasLength(1));
+ assertHasResult(SearchResultKind.REFERENCE, 'F f');
+ }
+
+ Future<void> test_typeReference_typeAlias_legacy() async {
+ addTestFile('''
+typedef F();
+main(F f) {
+}
+''');
+ await findElementReferences('F()', false);
+ expect(
+ searchElement.kind,
+ hasNonFunctionTypeAliases
+ ? ElementKind.TYPE_ALIAS
+ : ElementKind.FUNCTION_TYPE_ALIAS,
+ );
expect(results, hasLength(1));
assertHasResult(SearchResultKind.REFERENCE, 'F f');
}
@@ -901,3 +915,28 @@
assertHasResult(SearchResultKind.REFERENCE, 'T m()');
}
}
+
+@reflectiveTest
+class ElementReferencesWithNonFunctionTypeAliasesTest
+ extends ElementReferencesTest with WithNonFunctionTypeAliasesMixin {
+ @override
+ bool get hasNonFunctionTypeAliases => true;
+
+ Future<void> test_typeReference_typeAlias_interfaceType() async {
+ addTestFile('''
+typedef A<T> = Map<int, T>;
+
+void(A<String> a) {}
+''');
+ // Can find `A`.
+ await findElementReferences('A<T> =', false);
+ expect(searchElement.kind, ElementKind.TYPE_ALIAS);
+ expect(results, hasLength(1));
+ assertHasResult(SearchResultKind.REFERENCE, 'A<String>');
+
+ // Can find in `A`.
+ await findElementReferences('int,', false);
+ expect(searchElement.kind, ElementKind.CLASS);
+ assertHasResult(SearchResultKind.REFERENCE, 'int,');
+ }
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart b/pkg/front_end/testcases/nnbd/duplicates_instance.dart
new file mode 100644
index 0000000..274496d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart
@@ -0,0 +1,144 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var result;
+
+class Class {
+ int instanceMethod() => 1;
+ int instanceMethod() => 2;
+
+ int get instanceGetter => 1;
+ int get instanceGetter => 2;
+
+ void set instanceSetter(value) {
+ result = 1;
+ }
+
+ void set instanceSetter(value) {
+ result = 2;
+ }
+
+ int instanceField = 1;
+ int instanceField = 2;
+
+ int instanceFieldAndSetter1 = 1;
+ void set instanceFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ void set instanceFieldAndSetter2(int value) {
+ result = 2;
+ }
+
+ int instanceFieldAndSetter2 = 1;
+
+ late final int instanceLateFinalFieldAndSetter1;
+ void set instanceLateFinalFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ void set instanceLateFinalFieldAndSetter2(int value) {
+ result = 2;
+ }
+
+ late final int instanceLateFinalFieldAndSetter2;
+
+ final int instanceDuplicateFieldAndSetter = 1;
+ final int instanceDuplicateFieldAndSetter = 2;
+ void set instanceDuplicateFieldAndSetter(int value) {
+ result = 3;
+ }
+
+ final int instanceFieldAndDuplicateSetter = 1;
+ void set instanceFieldAndDuplicateSetter(int value) {
+ result = 2;
+ }
+
+ void set instanceFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ final int instanceDuplicateFieldAndDuplicateSetter = 1;
+ final int instanceDuplicateFieldAndDuplicateSetter = 2;
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+ result = 4;
+ }
+
+ int instanceMethodAndSetter1() => 1;
+ void set instanceMethodAndSetter1(int value) {
+ result = 2;
+ }
+
+ void set instanceMethodAndSetter2(int value) {
+ result = 2;
+ }
+
+ int instanceMethodAndSetter2() => 1;
+}
+
+test() {
+ Class c = new Class();
+ c.instanceMethod();
+ (c.instanceMethod)();
+ c.instanceGetter;
+ c.instanceSetter = 0;
+ c.instanceField;
+ c.instanceField = 0;
+ c.instanceDuplicateFieldAndSetter;
+ c.instanceDuplicateFieldAndSetter = 0;
+ c.instanceFieldAndDuplicateSetter;
+ c.instanceFieldAndDuplicateSetter = 0;
+ c.instanceDuplicateFieldAndDuplicateSetter;
+ c.instanceDuplicateFieldAndDuplicateSetter = 0;
+}
+
+main() {
+ Class c = new Class();
+ c.instanceFieldAndSetter1 = 0;
+ expect(2, result);
+ expect(1, c.instanceFieldAndSetter1);
+
+ result = null;
+ c.instanceFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, c.instanceFieldAndSetter2);
+
+ result = null;
+ c.instanceLateFinalFieldAndSetter1 = 0;
+ expect(2, result);
+ throws(() => c.instanceLateFinalFieldAndSetter1);
+
+ result = null;
+ c.instanceLateFinalFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, c.instanceLateFinalFieldAndSetter2);
+
+ result = null;
+ expect(1, c.instanceMethodAndSetter1());
+ c.instanceMethodAndSetter1 = 0;
+ expect(2, result);
+
+ result = null;
+ expect(1, c.instanceMethodAndSetter2());
+ c.instanceMethodAndSetter2 = 0;
+ expect(2, result);
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(dynamic Function() f) {
+ try {
+ f();
+ } catch (e) {
+ print(e);
+ return;
+ }
+ throw 'Expected exception.';
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.outline.expect
new file mode 100644
index 0000000..4894f32
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.outline.expect
@@ -0,0 +1,142 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+// int instanceMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+// int instanceMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+// int get instanceGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+// int get instanceGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
+// void set instanceFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+// int instanceFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
+// void set instanceFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+// int instanceFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
+// void set instanceMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
+// int instanceMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
+// int instanceMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
+// void set instanceMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int instanceField;
+ field core::int instanceFieldAndSetter1;
+ field core::int instanceFieldAndSetter2;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter2;
+ final field core::int instanceDuplicateFieldAndSetter;
+ final field core::int instanceFieldAndDuplicateSetter;
+ final field core::int instanceDuplicateFieldAndDuplicateSetter;
+ synthetic constructor •() → self::Class
+ ;
+ method instanceMethod() → core::int
+ ;
+ get instanceGetter() → core::int
+ ;
+ set instanceSetter(dynamic value) → void
+ ;
+ set instanceFieldAndSetter1(core::int value) → void
+ ;
+ set instanceFieldAndSetter2(core::int value) → void
+ ;
+ set instanceLateFinalFieldAndSetter1(core::int value) → void
+ ;
+ set instanceLateFinalFieldAndSetter2(core::int value) → void
+ ;
+ set instanceDuplicateFieldAndSetter(core::int value) → void
+ ;
+ set instanceFieldAndDuplicateSetter(core::int value) → void
+ ;
+ set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void
+ ;
+ method instanceMethodAndSetter1() → core::int
+ ;
+ set instanceMethodAndSetter1(core::int value) → void
+ ;
+ set instanceMethodAndSetter2(core::int value) → void
+ ;
+ method instanceMethodAndSetter2() → core::int
+ ;
+}
+static field dynamic result;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+static method throws(() → dynamic f) → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
new file mode 100644
index 0000000..7fd4517
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.expect
@@ -0,0 +1,340 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+// int instanceMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+// int instanceMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+// int get instanceGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+// int get instanceGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
+// void set instanceFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+// int instanceFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
+// void set instanceFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+// int instanceFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
+// void set instanceMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
+// int instanceMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
+// int instanceMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
+// void set instanceMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: Can't use 'instanceMethod' because it is declared more than once.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: Can't use 'instanceMethod' because it is declared more than once.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: Can't use 'instanceGetter' because it is declared more than once.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: Can't use 'instanceSetter' because it is declared more than once.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: Can't use 'instanceDuplicateFieldAndSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: Can't use 'instanceFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int instanceField = null;
+ field core::int instanceFieldAndSetter1 = 1;
+ field core::int instanceFieldAndSetter2 = 1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter2;
+ final field core::int instanceDuplicateFieldAndSetter = null;
+ final field core::int instanceFieldAndDuplicateSetter = 1;
+ final field core::int instanceDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ method instanceMethod() → core::int
+ return 1;
+ get instanceGetter() → core::int
+ return 1;
+ set instanceSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ set instanceFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ set instanceFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ method instanceMethodAndSetter1() → core::int
+ return 1;
+ set instanceMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ method instanceMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ self::Class c = new self::Class::•();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+ c.instanceMethod();
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+ (c.instanceMethod)();
+ ^^^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+ c.instanceGetter;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+ c.instanceSetter = 0;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+ c.instanceField;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+ c.instanceField = 0;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+ c.instanceDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
+ c.{self::Class::instanceFieldAndDuplicateSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+ c.instanceFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::expect(1, c.{self::Class::instanceFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => c.{self::Class::instanceLateFinalFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+ c.{self::Class::instanceMethodAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+ c.{self::Class::instanceMethodAndSetter2} = 0;
+ self::expect(2, self::result);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
new file mode 100644
index 0000000..7fd4517
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.strong.transformed.expect
@@ -0,0 +1,340 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+// int instanceMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+// int instanceMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+// int get instanceGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+// int get instanceGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
+// void set instanceFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+// int instanceFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
+// void set instanceFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+// int instanceFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
+// void set instanceMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
+// int instanceMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
+// int instanceMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
+// void set instanceMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: Can't use 'instanceMethod' because it is declared more than once.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: Can't use 'instanceMethod' because it is declared more than once.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: Can't use 'instanceGetter' because it is declared more than once.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: Can't use 'instanceSetter' because it is declared more than once.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: Can't use 'instanceDuplicateFieldAndSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: Can't use 'instanceFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int instanceField = null;
+ field core::int instanceFieldAndSetter1 = 1;
+ field core::int instanceFieldAndSetter2 = 1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter2;
+ final field core::int instanceDuplicateFieldAndSetter = null;
+ final field core::int instanceFieldAndDuplicateSetter = 1;
+ final field core::int instanceDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ method instanceMethod() → core::int
+ return 1;
+ get instanceGetter() → core::int
+ return 1;
+ set instanceSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ set instanceFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ set instanceFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ method instanceMethodAndSetter1() → core::int
+ return 1;
+ set instanceMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ method instanceMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ self::Class c = new self::Class::•();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+ c.instanceMethod();
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+ (c.instanceMethod)();
+ ^^^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+ c.instanceGetter;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+ c.instanceSetter = 0;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+ c.instanceField;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+ c.instanceField = 0;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+ c.instanceDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
+ c.{self::Class::instanceFieldAndDuplicateSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+ c.instanceFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::expect(1, c.{self::Class::instanceFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => c.{self::Class::instanceLateFinalFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+ c.{self::Class::instanceMethodAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+ c.{self::Class::instanceMethodAndSetter2} = 0;
+ self::expect(2, self::result);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.textual_outline.expect
new file mode 100644
index 0000000..57d8da9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+var result;
+
+class Class {
+ int instanceMethod() => 1;
+ int instanceMethod() => 2;
+ int get instanceGetter => 1;
+ int get instanceGetter => 2;
+ void set instanceSetter(value) {}
+ void set instanceSetter(value) {}
+ int instanceField = 1;
+ int instanceField = 2;
+ int instanceFieldAndSetter1 = 1;
+ void set instanceFieldAndSetter1(int value) {}
+ void set instanceFieldAndSetter2(int value) {}
+ int instanceFieldAndSetter2 = 1;
+ late final int instanceLateFinalFieldAndSetter1;
+ void set instanceLateFinalFieldAndSetter1(int value) {}
+ void set instanceLateFinalFieldAndSetter2(int value) {}
+ late final int instanceLateFinalFieldAndSetter2;
+ final int instanceDuplicateFieldAndSetter = 1;
+ final int instanceDuplicateFieldAndSetter = 2;
+ void set instanceDuplicateFieldAndSetter(int value) {}
+ final int instanceFieldAndDuplicateSetter = 1;
+ void set instanceFieldAndDuplicateSetter(int value) {}
+ void set instanceFieldAndDuplicateSetter(int value) {}
+ final int instanceDuplicateFieldAndDuplicateSetter = 1;
+ final int instanceDuplicateFieldAndDuplicateSetter = 2;
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {}
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {}
+ int instanceMethodAndSetter1() => 1;
+ void set instanceMethodAndSetter1(int value) {}
+ void set instanceMethodAndSetter2(int value) {}
+ int instanceMethodAndSetter2() => 1;
+}
+
+test() {}
+main() {}
+expect(expected, actual) {}
+throws(dynamic Function() f) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..904d130
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.textual_outline_modelled.expect
@@ -0,0 +1,43 @@
+class Class {
+ int get instanceGetter => 1;
+ int get instanceGetter => 2;
+ int instanceField = 1;
+ int instanceField = 2;
+ int instanceFieldAndSetter1 = 1;
+ int instanceFieldAndSetter2 = 1;
+ int instanceMethod() => 1;
+ int instanceMethod() => 2;
+ void set instanceFieldAndSetter1(int value) {}
+ void set instanceFieldAndSetter2(int value) {}
+ void set instanceSetter(value) {}
+ void set instanceSetter(value) {}
+ ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+ final int instanceLateFinalFieldAndSetter1;
+ void set instanceLateFinalFieldAndSetter1(int value) {}
+ void set instanceLateFinalFieldAndSetter2(int value) {}
+ ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+ final int instanceDuplicateFieldAndDuplicateSetter = 1;
+ final int instanceDuplicateFieldAndDuplicateSetter = 2;
+ final int instanceDuplicateFieldAndSetter = 1;
+ final int instanceDuplicateFieldAndSetter = 2;
+ final int instanceFieldAndDuplicateSetter = 1;
+ final int instanceLateFinalFieldAndSetter2;
+ int instanceMethodAndSetter1() => 1;
+ int instanceMethodAndSetter2() => 1;
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {}
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {}
+ void set instanceDuplicateFieldAndSetter(int value) {}
+ void set instanceFieldAndDuplicateSetter(int value) {}
+ void set instanceFieldAndDuplicateSetter(int value) {}
+ void set instanceMethodAndSetter1(int value) {}
+ void set instanceMethodAndSetter2(int value) {}
+}
+expect(expected, actual) {}
+main() {}
+test() {}
+throws(dynamic Function() f) {}
+var result;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
new file mode 100644
index 0000000..7fd4517
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.expect
@@ -0,0 +1,340 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+// int instanceMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+// int instanceMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+// int get instanceGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+// int get instanceGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
+// void set instanceFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+// int instanceFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
+// void set instanceFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+// int instanceFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
+// void set instanceMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
+// int instanceMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
+// int instanceMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
+// void set instanceMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: Can't use 'instanceMethod' because it is declared more than once.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: Can't use 'instanceMethod' because it is declared more than once.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: Can't use 'instanceGetter' because it is declared more than once.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: Can't use 'instanceSetter' because it is declared more than once.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: Can't use 'instanceDuplicateFieldAndSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: Can't use 'instanceFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int instanceField = null;
+ field core::int instanceFieldAndSetter1 = 1;
+ field core::int instanceFieldAndSetter2 = 1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter2;
+ final field core::int instanceDuplicateFieldAndSetter = null;
+ final field core::int instanceFieldAndDuplicateSetter = 1;
+ final field core::int instanceDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ method instanceMethod() → core::int
+ return 1;
+ get instanceGetter() → core::int
+ return 1;
+ set instanceSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ set instanceFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ set instanceFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ method instanceMethodAndSetter1() → core::int
+ return 1;
+ set instanceMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ method instanceMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ self::Class c = new self::Class::•();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+ c.instanceMethod();
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+ (c.instanceMethod)();
+ ^^^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+ c.instanceGetter;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+ c.instanceSetter = 0;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+ c.instanceField;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+ c.instanceField = 0;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+ c.instanceDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
+ c.{self::Class::instanceFieldAndDuplicateSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+ c.instanceFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::expect(1, c.{self::Class::instanceFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => c.{self::Class::instanceLateFinalFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+ c.{self::Class::instanceMethodAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+ c.{self::Class::instanceMethodAndSetter2} = 0;
+ self::expect(2, self::result);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
new file mode 100644
index 0000000..7fd4517
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.transformed.expect
@@ -0,0 +1,340 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+// int instanceMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+// int instanceMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+// int get instanceGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+// int get instanceGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
+// void set instanceFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+// int instanceFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
+// void set instanceFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+// int instanceFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
+// void set instanceMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
+// int instanceMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
+// int instanceMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
+// void set instanceMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: Can't use 'instanceMethod' because it is declared more than once.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+// c.instanceMethod();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: Can't use 'instanceMethod' because it is declared more than once.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+// (c.instanceMethod)();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: Can't use 'instanceGetter' because it is declared more than once.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+// c.instanceGetter;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: Can't use 'instanceSetter' because it is declared more than once.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+// c.instanceSetter = 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+// c.instanceField;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: Can't use 'instanceField' because it is declared more than once.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+// c.instanceField = 0;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: Can't use 'instanceDuplicateFieldAndSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+// c.instanceDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: Can't use 'instanceFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+// c.instanceFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+// c.instanceDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int instanceField = null;
+ field core::int instanceFieldAndSetter1 = 1;
+ field core::int instanceFieldAndSetter2 = 1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter1;
+ late final [setter] field core::int instanceLateFinalFieldAndSetter2;
+ final field core::int instanceDuplicateFieldAndSetter = null;
+ final field core::int instanceFieldAndDuplicateSetter = 1;
+ final field core::int instanceDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ method instanceMethod() → core::int
+ return 1;
+ get instanceGetter() → core::int
+ return 1;
+ set instanceSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ set instanceFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ set instanceFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ method instanceMethodAndSetter1() → core::int
+ return 1;
+ set instanceMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ set instanceMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ method instanceMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ self::Class c = new self::Class::•();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+ c.instanceMethod();
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+ (c.instanceMethod)();
+ ^^^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+ c.instanceGetter;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+ c.instanceSetter = 0;
+ ^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+ c.instanceField;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+ c.instanceField = 0;
+ ^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+ c.instanceDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
+ c.{self::Class::instanceFieldAndDuplicateSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+ c.instanceFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+ c.instanceDuplicateFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::expect(1, c.{self::Class::instanceFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceFieldAndSetter2});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => c.{self::Class::instanceLateFinalFieldAndSetter1});
+ self::result = null;
+ c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
+ self::expect(null, self::result);
+ self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2});
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter1}());
+ c.{self::Class::instanceMethodAndSetter1} = 0;
+ self::expect(2, self::result);
+ self::result = null;
+ self::expect(1, c.{self::Class::instanceMethodAndSetter2}());
+ c.{self::Class::instanceMethodAndSetter2} = 0;
+ self::expect(2, self::result);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart
new file mode 100644
index 0000000..41ba326
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart
@@ -0,0 +1,153 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var result;
+
+extension Extension on int {
+ int instanceMethod() => 1;
+ int instanceMethod() => 2;
+
+ int get instanceGetter => 1;
+ int get instanceGetter => 2;
+
+ void set instanceSetter(value) {
+ result = 1;
+ }
+
+ void set instanceSetter(value) {
+ result = 2;
+ }
+
+ int instanceField = 1;
+ int instanceField = 2;
+
+ int instanceFieldAndSetter1 = 1;
+ void set instanceFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ void set instanceFieldAndSetter2(int value) {
+ result = 2;
+ }
+ int instanceFieldAndSetter2 = 1;
+
+ late final int instanceLateFinalFieldAndSetter1;
+ void set instanceLateFinalFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ void set instanceLateFinalFieldAndSetter2(int value) {
+ result = 2;
+ }
+ late final int instanceLateFinalFieldAndSetter2;
+
+ final int instanceDuplicateFieldAndSetter = 1;
+ final int instanceDuplicateFieldAndSetter = 2;
+ void set instanceDuplicateFieldAndSetter(int value) {
+ result = 3;
+ }
+
+ final int instanceFieldAndDuplicateSetter = 1;
+ void set instanceFieldAndDuplicateSetter(int value) {
+ result = 2;
+ }
+
+ void set instanceFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ final int instanceDuplicateFieldAndDuplicateSetter = 1;
+ final int instanceDuplicateFieldAndDuplicateSetter = 2;
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+ result = 4;
+ }
+
+ int instanceMethodAndSetter1() => 1;
+ void set instanceMethodAndSetter1(int value) {
+ result = 2;
+ }
+
+ void set instanceMethodAndSetter2(int value) {
+ result = 2;
+ }
+ int instanceMethodAndSetter2() => 1;
+}
+
+test() {
+ int c = 0;
+ c.instanceField;
+ c.instanceField = 0;
+ c.instanceFieldAndSetter1;
+ c.instanceFieldAndSetter2;
+ c.instanceLateFinalFieldAndSetter1;
+ c.instanceLateFinalFieldAndSetter2;
+ c.instanceDuplicateFieldAndSetter;
+ c.instanceFieldAndDuplicateSetter;
+ c.instanceDuplicateFieldAndDuplicateSetter;
+}
+
+main() {
+ int c = 0;
+
+ expect(1, c.instanceMethod());
+
+ expect(1, (c.instanceMethod)());
+
+ result = null;
+ expect(1, c.instanceGetter);
+ c.instanceSetter = 0;
+ expect(1, result);
+
+ result = null;
+ c.instanceFieldAndSetter1 = 0;
+ expect(2, result);
+
+ result = null;
+ c.instanceFieldAndSetter2 = 0;
+ expect(null, result);
+
+ result = null;
+ c.instanceLateFinalFieldAndSetter1 = 0;
+ expect(2, result);
+
+ result = null;
+ c.instanceLateFinalFieldAndSetter2 = 0;
+ expect(2, result);
+
+ result = null;
+ c.instanceDuplicateFieldAndSetter = 0;
+ expect(2, result);
+
+ result = null;
+ c.instanceDuplicateFieldAndDuplicateSetter = 0;
+ expect(2, result);
+
+ result = null;
+ expect(1, c.instanceMethodAndSetter1());
+ c.instanceMethodAndSetter1 = 0;
+ expect(2, result);
+
+ result = null;
+ expect(1, c.instanceMethodAndSetter2());
+ c.instanceMethodAndSetter2 = 0;
+ expect(2, result);
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(dynamic Function() f) {
+ try {
+ f();
+ } catch (e) {
+ print(e);
+ return;
+ }
+ throw 'Expected exception.';
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.outline.expect
new file mode 100644
index 0000000..bd4f3ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.outline.expect
@@ -0,0 +1,228 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+// int instanceMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+// int instanceMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+// int get instanceGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+// int get instanceGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+// void set instanceSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:22:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:23:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:23:7: Error: 'instanceField' is already declared in this scope.
+// int instanceField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:22:7: Context: Previous declaration of 'instanceField'.
+// int instanceField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:25:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int instanceFieldAndSetter1 = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:33:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int instanceFieldAndSetter2 = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:35:18: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int instanceLateFinalFieldAndSetter1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:43:18: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// late final int instanceLateFinalFieldAndSetter2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:45:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:46:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:46:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:45:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+// final int instanceDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:51:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int instanceFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:56:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:52:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+// void set instanceFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:60:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:61:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:61:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int instanceDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:60:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// final int instanceDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:66:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:62:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+// void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:26:12: Error: Conflicts with member 'instanceFieldAndSetter1'.
+// void set instanceFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+// int instanceFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:30:12: Error: Conflicts with member 'instanceFieldAndSetter2'.
+// void set instanceFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:33:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+// int instanceFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:71:12: Error: Conflicts with member 'instanceMethodAndSetter1'.
+// void set instanceMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:70:7: Error: Conflicts with setter 'instanceMethodAndSetter1'.
+// int instanceMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:75:12: Error: Conflicts with member 'instanceMethodAndSetter2'.
+// void set instanceMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:78:7: Error: Conflicts with setter 'instanceMethodAndSetter2'.
+// int instanceMethodAndSetter2() => 1;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+ method instanceMethod = self::Extension|instanceMethod;
+ tearoff instanceMethod = self::Extension|get#instanceMethod;
+ get instanceGetter = self::Extension|get#instanceGetter;
+ field instanceField = self::Extension|instanceField;
+ field instanceFieldAndSetter1 = self::Extension|instanceFieldAndSetter1;
+ field instanceFieldAndSetter2 = self::Extension|instanceFieldAndSetter2;
+ field instanceLateFinalFieldAndSetter1 = self::Extension|instanceLateFinalFieldAndSetter1;
+ field instanceLateFinalFieldAndSetter2 = self::Extension|instanceLateFinalFieldAndSetter2;
+ field instanceDuplicateFieldAndSetter = self::Extension|instanceDuplicateFieldAndSetter;
+ field instanceFieldAndDuplicateSetter = self::Extension|instanceFieldAndDuplicateSetter;
+ field instanceDuplicateFieldAndDuplicateSetter = self::Extension|instanceDuplicateFieldAndDuplicateSetter;
+ method instanceMethodAndSetter1 = self::Extension|instanceMethodAndSetter1;
+ tearoff instanceMethodAndSetter1 = self::Extension|get#instanceMethodAndSetter1;
+ method instanceMethodAndSetter2 = self::Extension|instanceMethodAndSetter2;
+ tearoff instanceMethodAndSetter2 = self::Extension|get#instanceMethodAndSetter2;
+ set instanceSetter = self::Extension|set#instanceSetter;
+ set instanceFieldAndSetter1 = self::Extension|set#instanceFieldAndSetter1;
+ set instanceFieldAndSetter2 = self::Extension|set#instanceFieldAndSetter2;
+ set instanceLateFinalFieldAndSetter1 = self::Extension|set#instanceLateFinalFieldAndSetter1;
+ set instanceLateFinalFieldAndSetter2 = self::Extension|set#instanceLateFinalFieldAndSetter2;
+ set instanceDuplicateFieldAndSetter = self::Extension|set#instanceDuplicateFieldAndSetter;
+ set instanceFieldAndDuplicateSetter = self::Extension|set#instanceFieldAndDuplicateSetter;
+ set instanceDuplicateFieldAndDuplicateSetter = self::Extension|set#instanceDuplicateFieldAndDuplicateSetter;
+ set instanceMethodAndSetter1 = self::Extension|set#instanceMethodAndSetter1;
+ set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|instanceField;
+static field core::int Extension|instanceFieldAndSetter1;
+static field core::int Extension|instanceFieldAndSetter2;
+late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2;
+static final field core::int Extension|instanceDuplicateFieldAndSetter;
+static final field core::int Extension|instanceFieldAndDuplicateSetter;
+static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter;
+static method Extension|instanceMethod(lowered final core::int #this) → core::int
+ ;
+static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int
+ return () → core::int => self::Extension|instanceMethod(#this);
+static method Extension|get#instanceGetter(lowered final core::int #this) → core::int
+ ;
+static method Extension|set#instanceSetter(lowered final core::int #this, dynamic value) → void
+ ;
+static method Extension|set#instanceFieldAndSetter1(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceFieldAndSetter2(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceLateFinalFieldAndSetter1(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceLateFinalFieldAndSetter2(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceDuplicateFieldAndSetter(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceFieldAndDuplicateSetter(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceDuplicateFieldAndDuplicateSetter(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|instanceMethodAndSetter1(lowered final core::int #this) → core::int
+ ;
+static method Extension|get#instanceMethodAndSetter1(lowered final core::int #this) → () → core::int
+ return () → core::int => self::Extension|instanceMethodAndSetter1(#this);
+static method Extension|set#instanceMethodAndSetter1(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|set#instanceMethodAndSetter2(lowered final core::int #this, core::int value) → void
+ ;
+static method Extension|instanceMethodAndSetter2(lowered final core::int #this) → core::int
+ ;
+static method Extension|get#instanceMethodAndSetter2(lowered final core::int #this) → () → core::int
+ return () → core::int => self::Extension|instanceMethodAndSetter2(#this);
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+static method throws(() → dynamic f) → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.textual_outline.expect
new file mode 100644
index 0000000..a945e40
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+var result;
+extension Extension on int {
+ int instanceMethod() => 1;
+ int instanceMethod() => 2;
+ int get instanceGetter => 1;
+ int get instanceGetter => 2;
+ void set instanceSetter(value) {}
+ void set instanceSetter(value) {}
+ int instanceField = 1;
+ int instanceField = 2;
+ int instanceFieldAndSetter1 = 1;
+ void set instanceFieldAndSetter1(int value) {}
+ void set instanceFieldAndSetter2(int value) {}
+ int instanceFieldAndSetter2 = 1;
+ late
+ final int instanceLateFinalFieldAndSetter1;
+ void set instanceLateFinalFieldAndSetter1(int value) {}
+ void set instanceLateFinalFieldAndSetter2(int value) {}
+ late
+ final int instanceLateFinalFieldAndSetter2;
+ final int instanceDuplicateFieldAndSetter = 1;
+ final int instanceDuplicateFieldAndSetter = 2;
+ void set instanceDuplicateFieldAndSetter(int value) {}
+ final int instanceFieldAndDuplicateSetter = 1;
+ void set instanceFieldAndDuplicateSetter(int value) {}
+ void set instanceFieldAndDuplicateSetter(int value) {}
+ final int instanceDuplicateFieldAndDuplicateSetter = 1;
+ final int instanceDuplicateFieldAndDuplicateSetter = 2;
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {}
+ void set instanceDuplicateFieldAndDuplicateSetter(int value) {}
+ int instanceMethodAndSetter1() => 1;
+ void set instanceMethodAndSetter1(int value) {}
+ void set instanceMethodAndSetter2(int value) {}
+ int instanceMethodAndSetter2() => 1;
+}
+test() {}
+main() {}
+expect(expected, actual) {}
+throws(dynamic Function() f) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart b/pkg/front_end/testcases/nnbd/duplicates_static.dart
new file mode 100644
index 0000000..601f605
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart
@@ -0,0 +1,139 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var result;
+
+class Class {
+ static int staticMethod() => 1;
+ static int staticMethod() => 2;
+
+ static int get staticGetter => 1;
+ static int get staticGetter => 2;
+
+ static void set staticSetter(value) {
+ result = 1;
+ }
+
+ static void set staticSetter(value) {
+ result = 2;
+ }
+
+ static int staticField = 1;
+ static int staticField = 2;
+
+ static int staticFieldAndSetter1 = 1;
+ static void set staticFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ static void set staticFieldAndSetter2(int value) {
+ result = 2;
+ }
+
+ static int staticFieldAndSetter2 = 1;
+
+ static late final int staticLateFinalFieldAndSetter1;
+ static void set staticLateFinalFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ static void set staticLateFinalFieldAndSetter2(int value) {
+ result = 2;
+ }
+
+ static late final int staticLateFinalFieldAndSetter2;
+
+ static final int staticDuplicateFieldAndSetter = 1;
+ static final int staticDuplicateFieldAndSetter = 2;
+ static void set staticDuplicateFieldAndSetter(int value) {
+ result = 3;
+ }
+
+ static final int staticFieldAndDuplicateSetter = 1;
+ static void set staticFieldAndDuplicateSetter(int value) {
+ result = 2;
+ }
+
+ static void set staticFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ static final int staticDuplicateFieldAndDuplicateSetter = 1;
+ static final int staticDuplicateFieldAndDuplicateSetter = 2;
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+ result = 4;
+ }
+
+ static int staticMethodAndSetter1() => 1;
+ static void set staticMethodAndSetter1(int value) {
+ result = 2;
+ }
+
+ static void set staticMethodAndSetter2(int value) {
+ result = 2;
+ }
+
+ static int staticMethodAndSetter2() => 1;
+}
+
+test() {
+ Class.staticMethod();
+ (Class.staticMethod)();
+ Class.staticGetter;
+ Class.staticSetter = 0;
+ Class.staticField;
+ Class.staticField = 0;
+ Class.staticDuplicateFieldAndSetter;
+ Class.staticDuplicateFieldAndSetter = 0;
+ Class.staticFieldAndDuplicateSetter;
+ Class.staticFieldAndDuplicateSetter = 0;
+ Class.staticDuplicateFieldAndDuplicateSetter;
+ Class.staticDuplicateFieldAndDuplicateSetter = 0;
+ Class.staticMethodAndSetter1 = 0;
+ Class.staticMethodAndSetter2 = 0;
+}
+
+main() {
+ result = null;
+ Class.staticFieldAndSetter1 = 0;
+ expect(null, result);
+ expect(0, Class.staticFieldAndSetter1);
+
+ result = null;
+ Class.staticFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, Class.staticFieldAndSetter2);
+
+ result = null;
+ Class.staticLateFinalFieldAndSetter1 = 0;
+ expect(null, result);
+ expect(0, Class.staticLateFinalFieldAndSetter1);
+
+ result = null;
+ Class.staticLateFinalFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, Class.staticLateFinalFieldAndSetter2);
+
+ expect(1, Class.staticMethodAndSetter1());
+
+ expect(1, Class.staticMethodAndSetter2());
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(dynamic Function() f) {
+ try {
+ f();
+ } catch (e) {
+ print(e);
+ return;
+ }
+ throw 'Expected exception.';
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.outline.expect
new file mode 100644
index 0000000..777b4c0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.outline.expect
@@ -0,0 +1,158 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
+// static void set staticMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
+// static int staticMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static field core::int staticField;
+ static field core::int staticFieldAndSetter1;
+ static field core::int staticFieldAndSetter2;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter2;
+ static final field core::int staticDuplicateFieldAndSetter;
+ static final field core::int staticFieldAndDuplicateSetter;
+ static final field core::int staticDuplicateFieldAndDuplicateSetter;
+ synthetic constructor •() → self::Class
+ ;
+ static method staticMethod() → core::int
+ ;
+ static get staticGetter() → core::int
+ ;
+ static set staticSetter(dynamic value) → void
+ ;
+ static set staticFieldAndSetter1(core::int value) → void
+ ;
+ static set staticFieldAndSetter2(core::int value) → void
+ ;
+ static set staticLateFinalFieldAndSetter1(core::int value) → void
+ ;
+ static set staticLateFinalFieldAndSetter2(core::int value) → void
+ ;
+ static set staticDuplicateFieldAndSetter(core::int value) → void
+ ;
+ static set staticFieldAndDuplicateSetter(core::int value) → void
+ ;
+ static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void
+ ;
+ static method staticMethodAndSetter1() → core::int
+ ;
+ static set staticMethodAndSetter1(core::int value) → void
+ ;
+ static set staticMethodAndSetter2(core::int value) → void
+ ;
+ static method staticMethodAndSetter2() → core::int
+ ;
+}
+static field dynamic result;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+static method throws(() → dynamic f) → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect
new file mode 100644
index 0000000..a977d92
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.expect
@@ -0,0 +1,305 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
+// static void set staticMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
+// static int staticMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+// Class.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Class.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+// Class.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:9: Error: Can't use 'staticSetter' because it is declared more than once.
+// Class.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+// Class.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+// Class.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Class.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+// Class.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+// Class.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static field core::int staticField = null;
+ static field core::int staticFieldAndSetter1 = 1;
+ static field core::int staticFieldAndSetter2 = 1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter2;
+ static final field core::int staticDuplicateFieldAndSetter = null;
+ static final field core::int staticFieldAndDuplicateSetter = 1;
+ static final field core::int staticDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ static method staticMethod() → core::int
+ return 1;
+ static get staticGetter() → core::int
+ return 1;
+ static set staticSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ static set staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static set staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static method staticMethodAndSetter1() → core::int
+ return 1;
+ static set staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static method staticMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+ Class.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Class.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+ Class.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+ Class.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+ Class.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+ Class.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Class::staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Class.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+ Class.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+ Class.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Class::staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter1);
+ self::result = null;
+ self::Class::staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter2);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Class::staticMethodAndSetter1());
+ self::expect(1, self::Class::staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect
new file mode 100644
index 0000000..a977d92
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.strong.transformed.expect
@@ -0,0 +1,305 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
+// static void set staticMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
+// static int staticMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+// Class.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Class.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+// Class.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:9: Error: Can't use 'staticSetter' because it is declared more than once.
+// Class.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+// Class.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+// Class.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Class.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+// Class.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+// Class.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static field core::int staticField = null;
+ static field core::int staticFieldAndSetter1 = 1;
+ static field core::int staticFieldAndSetter2 = 1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter2;
+ static final field core::int staticDuplicateFieldAndSetter = null;
+ static final field core::int staticFieldAndDuplicateSetter = 1;
+ static final field core::int staticDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ static method staticMethod() → core::int
+ return 1;
+ static get staticGetter() → core::int
+ return 1;
+ static set staticSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ static set staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static set staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static method staticMethodAndSetter1() → core::int
+ return 1;
+ static set staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static method staticMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+ Class.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Class.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+ Class.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+ Class.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+ Class.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+ Class.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Class::staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Class.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+ Class.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+ Class.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Class::staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter1);
+ self::result = null;
+ self::Class::staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter2);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Class::staticMethodAndSetter1());
+ self::expect(1, self::Class::staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.textual_outline.expect
new file mode 100644
index 0000000..d898cdf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+var result;
+class Class {
+ static int staticMethod() => 1;
+ static int staticMethod() => 2;
+ static int get staticGetter => 1;
+ static int get staticGetter => 2;
+ static void set staticSetter(value) {}
+ static void set staticSetter(value) {}
+ static int staticField = 1;
+ static int staticField = 2;
+ static int staticFieldAndSetter1 = 1;
+ static void set staticFieldAndSetter1(int value) {}
+ static void set staticFieldAndSetter2(int value) {}
+ static int staticFieldAndSetter2 = 1;
+ static late ;
+ final int staticLateFinalFieldAndSetter1;
+ static void set staticLateFinalFieldAndSetter1(int value) {}
+ static void set staticLateFinalFieldAndSetter2(int value) {}
+ static late ;
+ final int staticLateFinalFieldAndSetter2;
+ static final int staticDuplicateFieldAndSetter = 1;
+ static final int staticDuplicateFieldAndSetter = 2;
+ static void set staticDuplicateFieldAndSetter(int value) {}
+ static final int staticFieldAndDuplicateSetter = 1;
+ static void set staticFieldAndDuplicateSetter(int value) {}
+ static void set staticFieldAndDuplicateSetter(int value) {}
+ static final int staticDuplicateFieldAndDuplicateSetter = 1;
+ static final int staticDuplicateFieldAndDuplicateSetter = 2;
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
+ static int staticMethodAndSetter1() => 1;
+ static void set staticMethodAndSetter1(int value) {}
+ static void set staticMethodAndSetter2(int value) {}
+ static int staticMethodAndSetter2() => 1;
+}
+test() {}
+main() {}
+expect(expected, actual) {}
+throws(dynamic Function() f) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect
new file mode 100644
index 0000000..a977d92
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.expect
@@ -0,0 +1,305 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
+// static void set staticMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
+// static int staticMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+// Class.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Class.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+// Class.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:9: Error: Can't use 'staticSetter' because it is declared more than once.
+// Class.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+// Class.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+// Class.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Class.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+// Class.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+// Class.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static field core::int staticField = null;
+ static field core::int staticFieldAndSetter1 = 1;
+ static field core::int staticFieldAndSetter2 = 1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter2;
+ static final field core::int staticDuplicateFieldAndSetter = null;
+ static final field core::int staticFieldAndDuplicateSetter = 1;
+ static final field core::int staticDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ static method staticMethod() → core::int
+ return 1;
+ static get staticGetter() → core::int
+ return 1;
+ static set staticSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ static set staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static set staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static method staticMethodAndSetter1() → core::int
+ return 1;
+ static set staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static method staticMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+ Class.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Class.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+ Class.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+ Class.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+ Class.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+ Class.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Class::staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Class.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+ Class.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+ Class.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Class::staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter1);
+ self::result = null;
+ self::Class::staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter2);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Class::staticMethodAndSetter1());
+ self::expect(1, self::Class::staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect
new file mode 100644
index 0000000..a977d92
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.transformed.expect
@@ -0,0 +1,305 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
+// static void set staticMethodAndSetter1(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
+// static int staticMethodAndSetter2() => 1;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+// Class.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Class.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+// Class.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:9: Error: Can't use 'staticSetter' because it is declared more than once.
+// Class.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+// Class.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:9: Error: Can't use 'staticField' because it is declared more than once.
+// Class.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+// Class.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Class.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+// Class.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+// Class.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+// Class.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ static field core::int staticField = null;
+ static field core::int staticFieldAndSetter1 = 1;
+ static field core::int staticFieldAndSetter2 = 1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter1;
+ late static final [setter] field core::int staticLateFinalFieldAndSetter2;
+ static final field core::int staticDuplicateFieldAndSetter = null;
+ static final field core::int staticFieldAndDuplicateSetter = 1;
+ static final field core::int staticDuplicateFieldAndDuplicateSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ static method staticMethod() → core::int
+ return 1;
+ static get staticGetter() → core::int
+ return 1;
+ static set staticSetter(dynamic value) → void {
+ self::result = 1;
+ }
+ static set staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static set staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+ }
+ static method staticMethodAndSetter1() → core::int
+ return 1;
+ static set staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+ }
+ static set staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+ }
+ static method staticMethodAndSetter2() → core::int
+ return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+ Class.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Class.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+ Class.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+ Class.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+ Class.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+ Class.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Class::staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Class.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Class.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+ Class.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+ Class.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+ Class.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Class::staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter1);
+ self::result = null;
+ self::Class::staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticFieldAndSetter2);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Class::staticLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Class::staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Class::staticMethodAndSetter1());
+ self::expect(1, self::Class::staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart
new file mode 100644
index 0000000..a0d4145
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart
@@ -0,0 +1,139 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var result;
+
+extension Extension on int {
+ static int staticMethod() => 1;
+ static int staticMethod() => 2;
+
+ static int get staticGetter => 1;
+ static int get staticGetter => 2;
+
+ static void set staticSetter(value) {
+ result = 1;
+ }
+
+ static void set staticSetter(value) {
+ result = 2;
+ }
+
+ static int staticField = 1;
+ static int staticField = 2;
+
+ static int staticFieldAndSetter1 = 1;
+ static void set staticFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ static void set staticFieldAndSetter2(int value) {
+ result = 2;
+ }
+
+ static int staticFieldAndSetter2 = 1;
+
+ static late final int staticLateFinalFieldAndSetter1;
+ static void set staticLateFinalFieldAndSetter1(int value) {
+ result = 2;
+ }
+
+ static void set staticLateFinalFieldAndSetter2(int value) {
+ result = 2;
+ }
+
+ static late final int staticLateFinalFieldAndSetter2;
+
+ static final int staticDuplicateFieldAndSetter = 1;
+ static final int staticDuplicateFieldAndSetter = 2;
+ static void set staticDuplicateFieldAndSetter(int value) {
+ result = 3;
+ }
+
+ static final int staticFieldAndDuplicateSetter = 1;
+ static void set staticFieldAndDuplicateSetter(int value) {
+ result = 2;
+ }
+
+ static void set staticFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ static final int staticDuplicateFieldAndDuplicateSetter = 1;
+ static final int staticDuplicateFieldAndDuplicateSetter = 2;
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+ result = 3;
+ }
+
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+ result = 4;
+ }
+
+ static int staticMethodAndSetter1() => 1;
+ static void set staticMethodAndSetter1(int value) {
+ result = 2;
+ }
+
+ static void set staticMethodAndSetter2(int value) {
+ result = 2;
+ }
+
+ static int staticMethodAndSetter2() => 1;
+}
+
+test() {
+ Extension.staticMethod();
+ (Extension.staticMethod)();
+ Extension.staticGetter;
+ Extension.staticSetter = 0;
+ Extension.staticField;
+ Extension.staticField = 0;
+ Extension.staticDuplicateFieldAndSetter;
+ Extension.staticDuplicateFieldAndSetter = 0;
+ Extension.staticFieldAndDuplicateSetter;
+ Extension.staticFieldAndDuplicateSetter = 0;
+ Extension.staticDuplicateFieldAndDuplicateSetter;
+ Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+ Extension.staticMethodAndSetter1 = 0;
+ Extension.staticMethodAndSetter2 = 0;
+}
+
+main() {
+ result = null;
+ Extension.staticFieldAndSetter1 = 0;
+ expect(null, result);
+ expect(0, Extension.staticFieldAndSetter1);
+
+ result = null;
+ Extension.staticFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, Extension.staticFieldAndSetter2);
+
+ result = null;
+ Extension.staticLateFinalFieldAndSetter1 = 0;
+ expect(null, result);
+ expect(0, Extension.staticLateFinalFieldAndSetter1);
+
+ result = null;
+ Extension.staticLateFinalFieldAndSetter2 = 0;
+ expect(2, result);
+ throws(() => Extension.staticLateFinalFieldAndSetter2);
+
+ expect(1, Extension.staticMethodAndSetter1());
+
+ expect(1, Extension.staticMethodAndSetter2());
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(dynamic Function() f) {
+ try {
+ f();
+ } catch (e) {
+ print(e);
+ return;
+ }
+ throw 'Expected exception.';
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.outline.expect
new file mode 100644
index 0000000..21ee0cd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.outline.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+ static method staticMethod = self::Extension|staticMethod;
+ static get staticGetter = get self::Extension|staticGetter;
+ static field staticField = self::Extension|staticField;
+ static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
+ static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
+ static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
+ static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
+ static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
+ static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
+ static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
+ static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
+ static set staticSetter = set self::Extension|staticSetter;
+ static set staticFieldAndSetter1 = set self::Extension|staticFieldAndSetter1;
+ static set staticFieldAndSetter2 = set self::Extension|staticFieldAndSetter2;
+ static set staticLateFinalFieldAndSetter1 = set self::Extension|staticLateFinalFieldAndSetter1;
+ static set staticLateFinalFieldAndSetter2 = set self::Extension|staticLateFinalFieldAndSetter2;
+ static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
+ static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
+ static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
+ static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|staticField;
+static field core::int Extension|staticFieldAndSetter1;
+static field core::int Extension|staticFieldAndSetter2;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
+static final field core::int Extension|staticDuplicateFieldAndSetter;
+static final field core::int Extension|staticFieldAndDuplicateSetter;
+static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
+static method Extension|staticMethod() → core::int
+ ;
+static get Extension|staticGetter() → core::int
+ ;
+static set Extension|staticSetter(dynamic value) → void
+ ;
+static set Extension|staticFieldAndSetter1(core::int value) → void
+ ;
+static set Extension|staticFieldAndSetter2(core::int value) → void
+ ;
+static set Extension|staticLateFinalFieldAndSetter1(core::int value) → void
+ ;
+static set Extension|staticLateFinalFieldAndSetter2(core::int value) → void
+ ;
+static set Extension|staticDuplicateFieldAndSetter(core::int value) → void
+ ;
+static set Extension|staticFieldAndDuplicateSetter(core::int value) → void
+ ;
+static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void
+ ;
+static method Extension|staticMethodAndSetter1() → core::int
+ ;
+static set Extension|staticMethodAndSetter1(core::int value) → void
+ ;
+static set Extension|staticMethodAndSetter2(core::int value) → void
+ ;
+static method Extension|staticMethodAndSetter2() → core::int
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+static method throws(() → dynamic f) → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect
new file mode 100644
index 0000000..f3a7da5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.expect
@@ -0,0 +1,310 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+// Extension.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Extension.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+// Extension.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:13: Error: Can't use 'staticSetter' because it is declared more than once.
+// Extension.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+// Extension.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+// Extension.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Extension.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+// Extension.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+// Extension.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+ static method staticMethod = self::Extension|staticMethod;
+ static get staticGetter = get self::Extension|staticGetter;
+ static field staticField = self::Extension|staticField;
+ static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
+ static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
+ static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
+ static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
+ static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
+ static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
+ static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
+ static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
+ static set staticSetter = set self::Extension|staticSetter;
+ static set staticFieldAndSetter1 = set self::Extension|staticFieldAndSetter1;
+ static set staticFieldAndSetter2 = set self::Extension|staticFieldAndSetter2;
+ static set staticLateFinalFieldAndSetter1 = set self::Extension|staticLateFinalFieldAndSetter1;
+ static set staticLateFinalFieldAndSetter2 = set self::Extension|staticLateFinalFieldAndSetter2;
+ static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
+ static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
+ static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
+ static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|staticField;
+static field core::int Extension|staticFieldAndSetter1 = 1;
+static field core::int Extension|staticFieldAndSetter2 = 1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
+static final field core::int Extension|staticDuplicateFieldAndSetter;
+static final field core::int Extension|staticFieldAndDuplicateSetter = 1;
+static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
+static method Extension|staticMethod() → core::int
+ return 1;
+static get Extension|staticGetter() → core::int
+ return 1;
+static set Extension|staticSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set Extension|staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set Extension|staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method Extension|staticMethodAndSetter1() → core::int
+ return 1;
+static set Extension|staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method Extension|staticMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+ Extension.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Extension.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+ Extension.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+ Extension.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+ Extension.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+ Extension.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Extension|staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Extension.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+ Extension.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+ Extension.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Extension|staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter2);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter2 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::Extension|staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Extension|staticMethodAndSetter1());
+ self::expect(1, self::Extension|staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect
new file mode 100644
index 0000000..f3a7da5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.strong.transformed.expect
@@ -0,0 +1,310 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+// Extension.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Extension.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+// Extension.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:13: Error: Can't use 'staticSetter' because it is declared more than once.
+// Extension.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+// Extension.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+// Extension.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Extension.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+// Extension.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+// Extension.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+ static method staticMethod = self::Extension|staticMethod;
+ static get staticGetter = get self::Extension|staticGetter;
+ static field staticField = self::Extension|staticField;
+ static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
+ static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
+ static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
+ static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
+ static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
+ static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
+ static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
+ static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
+ static set staticSetter = set self::Extension|staticSetter;
+ static set staticFieldAndSetter1 = set self::Extension|staticFieldAndSetter1;
+ static set staticFieldAndSetter2 = set self::Extension|staticFieldAndSetter2;
+ static set staticLateFinalFieldAndSetter1 = set self::Extension|staticLateFinalFieldAndSetter1;
+ static set staticLateFinalFieldAndSetter2 = set self::Extension|staticLateFinalFieldAndSetter2;
+ static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
+ static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
+ static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
+ static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|staticField;
+static field core::int Extension|staticFieldAndSetter1 = 1;
+static field core::int Extension|staticFieldAndSetter2 = 1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
+static final field core::int Extension|staticDuplicateFieldAndSetter;
+static final field core::int Extension|staticFieldAndDuplicateSetter = 1;
+static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
+static method Extension|staticMethod() → core::int
+ return 1;
+static get Extension|staticGetter() → core::int
+ return 1;
+static set Extension|staticSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set Extension|staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set Extension|staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method Extension|staticMethodAndSetter1() → core::int
+ return 1;
+static set Extension|staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method Extension|staticMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+ Extension.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Extension.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+ Extension.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+ Extension.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+ Extension.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+ Extension.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Extension|staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Extension.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+ Extension.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+ Extension.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Extension|staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter2);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter2 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::Extension|staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Extension|staticMethodAndSetter1());
+ self::expect(1, self::Extension|staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.textual_outline.expect
new file mode 100644
index 0000000..f6bcecd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+var result;
+extension Extension on int {
+ static int staticMethod() => 1;
+ static int staticMethod() => 2;
+ static int get staticGetter => 1;
+ static int get staticGetter => 2;
+ static void set staticSetter(value) {}
+ static void set staticSetter(value) {}
+ static int staticField = 1;
+ static int staticField = 2;
+ static int staticFieldAndSetter1 = 1;
+ static void set staticFieldAndSetter1(int value) {}
+ static void set staticFieldAndSetter2(int value) {}
+ static int staticFieldAndSetter2 = 1;
+ static late ;
+ final int staticLateFinalFieldAndSetter1;
+ static void set staticLateFinalFieldAndSetter1(int value) {}
+ static void set staticLateFinalFieldAndSetter2(int value) {}
+ static late ;
+ final int staticLateFinalFieldAndSetter2;
+ static final int staticDuplicateFieldAndSetter = 1;
+ static final int staticDuplicateFieldAndSetter = 2;
+ static void set staticDuplicateFieldAndSetter(int value) {}
+ static final int staticFieldAndDuplicateSetter = 1;
+ static void set staticFieldAndDuplicateSetter(int value) {}
+ static void set staticFieldAndDuplicateSetter(int value) {}
+ static final int staticDuplicateFieldAndDuplicateSetter = 1;
+ static final int staticDuplicateFieldAndDuplicateSetter = 2;
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
+ static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
+ static int staticMethodAndSetter1() => 1;
+ static void set staticMethodAndSetter1(int value) {}
+ static void set staticMethodAndSetter2(int value) {}
+ static int staticMethodAndSetter2() => 1;
+}
+test() {}
+main() {}
+expect(expected, actual) {}
+throws(dynamic Function() f) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect
new file mode 100644
index 0000000..f3a7da5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.expect
@@ -0,0 +1,310 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+// Extension.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Extension.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+// Extension.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:13: Error: Can't use 'staticSetter' because it is declared more than once.
+// Extension.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+// Extension.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+// Extension.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Extension.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+// Extension.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+// Extension.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+ static method staticMethod = self::Extension|staticMethod;
+ static get staticGetter = get self::Extension|staticGetter;
+ static field staticField = self::Extension|staticField;
+ static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
+ static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
+ static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
+ static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
+ static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
+ static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
+ static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
+ static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
+ static set staticSetter = set self::Extension|staticSetter;
+ static set staticFieldAndSetter1 = set self::Extension|staticFieldAndSetter1;
+ static set staticFieldAndSetter2 = set self::Extension|staticFieldAndSetter2;
+ static set staticLateFinalFieldAndSetter1 = set self::Extension|staticLateFinalFieldAndSetter1;
+ static set staticLateFinalFieldAndSetter2 = set self::Extension|staticLateFinalFieldAndSetter2;
+ static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
+ static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
+ static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
+ static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|staticField;
+static field core::int Extension|staticFieldAndSetter1 = 1;
+static field core::int Extension|staticFieldAndSetter2 = 1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
+static final field core::int Extension|staticDuplicateFieldAndSetter;
+static final field core::int Extension|staticFieldAndDuplicateSetter = 1;
+static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
+static method Extension|staticMethod() → core::int
+ return 1;
+static get Extension|staticGetter() → core::int
+ return 1;
+static set Extension|staticSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set Extension|staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set Extension|staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method Extension|staticMethodAndSetter1() → core::int
+ return 1;
+static set Extension|staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method Extension|staticMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+ Extension.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Extension.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+ Extension.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+ Extension.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+ Extension.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+ Extension.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Extension|staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Extension.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+ Extension.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+ Extension.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Extension|staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter2);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter2 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::Extension|staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Extension|staticMethodAndSetter1());
+ self::expect(1, self::Extension|staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect
new file mode 100644
index 0000000..f3a7da5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.transformed.expect
@@ -0,0 +1,310 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+// static int staticMethod() => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
+// static int staticMethod() => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+// static int get staticGetter => 2;
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
+// static int get staticGetter => 1;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
+// static void set staticSetter(value) {
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
+// static int staticField = 2;
+// ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
+// static int staticField = 1;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+// static final int staticDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+// static void set staticFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static final int staticDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static final int staticDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+// static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with member 'staticFieldAndSetter1'.
+// static void set staticFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+// static int staticFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with member 'staticFieldAndSetter2'.
+// static void set staticFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+// static int staticFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+// static void set staticMethodAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+// static int staticMethodAndSetter1() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+// static void set staticMethodAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+// static int staticMethodAndSetter2() => 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+// Extension.staticMethod();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+// (Extension.staticMethod)();
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+// Extension.staticGetter;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:13: Error: Can't use 'staticSetter' because it is declared more than once.
+// Extension.staticSetter = 0;
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+// Extension.staticSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:13: Error: Can't use 'staticField' because it is declared more than once.
+// Extension.staticField = 0;
+// ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+// Extension.staticField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+// Extension.staticFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+// Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+// Extension.staticMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+// Extension.staticMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+ static method staticMethod = self::Extension|staticMethod;
+ static get staticGetter = get self::Extension|staticGetter;
+ static field staticField = self::Extension|staticField;
+ static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
+ static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
+ static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
+ static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
+ static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
+ static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
+ static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
+ static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
+ static set staticSetter = set self::Extension|staticSetter;
+ static set staticFieldAndSetter1 = set self::Extension|staticFieldAndSetter1;
+ static set staticFieldAndSetter2 = set self::Extension|staticFieldAndSetter2;
+ static set staticLateFinalFieldAndSetter1 = set self::Extension|staticLateFinalFieldAndSetter1;
+ static set staticLateFinalFieldAndSetter2 = set self::Extension|staticLateFinalFieldAndSetter2;
+ static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
+ static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
+ static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
+ static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
+ static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|staticField;
+static field core::int Extension|staticFieldAndSetter1 = 1;
+static field core::int Extension|staticFieldAndSetter2 = 1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
+static final field core::int Extension|staticDuplicateFieldAndSetter;
+static final field core::int Extension|staticFieldAndDuplicateSetter = 1;
+static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
+static method Extension|staticMethod() → core::int
+ return 1;
+static get Extension|staticGetter() → core::int
+ return 1;
+static set Extension|staticSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set Extension|staticFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set Extension|staticFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method Extension|staticMethodAndSetter1() → core::int
+ return 1;
+static set Extension|staticMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set Extension|staticMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method Extension|staticMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+ Extension.staticMethod();
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+ (Extension.staticMethod)();
+ ^^^^^^^^^^^^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+ Extension.staticGetter;
+ ^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+ Extension.staticSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+ Extension.staticField;
+ ^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+ Extension.staticField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndSetter = 0;
+ ^";
+ self::Extension|staticFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+ Extension.staticFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ Extension.staticDuplicateFieldAndDuplicateSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+ Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+ Extension.staticMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+ Extension.staticMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::Extension|staticFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticFieldAndSetter2);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::Extension|staticLateFinalFieldAndSetter1);
+ self::result = null;
+ self::Extension|staticLateFinalFieldAndSetter2 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::Extension|staticLateFinalFieldAndSetter2);
+ self::expect(1, self::Extension|staticMethodAndSetter1());
+ self::expect(1, self::Extension|staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart
new file mode 100644
index 0000000..f66cc15
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart
@@ -0,0 +1,137 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var result;
+
+int topLevelMethod() => 1;
+int topLevelMethod() => 2;
+
+int get topLevelGetter => 1;
+int get topLevelGetter => 2;
+
+void set topLevelSetter(value) {
+ result = 1;
+}
+
+void set topLevelSetter(value) {
+ result = 2;
+}
+
+int topLevelField = 1;
+int topLevelField = 2;
+
+int topLevelFieldAndSetter1 = 1;
+void set topLevelFieldAndSetter1(int value) {
+ result = 2;
+}
+
+void set topLevelFieldAndSetter2(int value) {
+ result = 2;
+}
+
+int topLevelFieldAndSetter2 = 1;
+
+late final int topLevelLateFinalFieldAndSetter1;
+void set topLevelLateFinalFieldAndSetter1(int value) {
+ result = 2;
+}
+
+void set topLevelLateFinalFieldAndSetter2(int value) {
+ result = 2;
+}
+
+late final int topLevelLateFinalFieldAndSetter2;
+
+final int topLevelDuplicateFieldAndSetter = 1;
+final int topLevelDuplicateFieldAndSetter = 2;
+void set topLevelDuplicateFieldAndSetter(int value) {
+ result = 3;
+}
+
+final int topLevelFieldAndDuplicateSetter = 1;
+void set topLevelFieldAndDuplicateSetter(int value) {
+ result = 2;
+}
+
+void set topLevelFieldAndDuplicateSetter(int value) {
+ result = 3;
+}
+
+final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+ result = 3;
+}
+
+void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+ result = 4;
+}
+
+int topLevelMethodAndSetter1() => 1;
+void set topLevelMethodAndSetter1(int value) {
+ result = 2;
+}
+
+void set topLevelMethodAndSetter2(int value) {
+ result = 2;
+}
+
+int topLevelMethodAndSetter2() => 1;
+
+test() {
+ topLevelMethod();
+ (topLevelMethod)();
+ topLevelGetter;
+ topLevelSetter = 0;
+ topLevelField;
+ topLevelField = 0;
+ topLevelDuplicateFieldAndSetter;
+ topLevelDuplicateFieldAndSetter = 0;
+ topLevelFieldAndDuplicateSetter;
+ topLevelFieldAndDuplicateSetter = 0;
+ topLevelDuplicateFieldAndDuplicateSetter;
+ topLevelDuplicateFieldAndDuplicateSetter = 0;
+ topLevelMethodAndSetter1 = 0;
+ topLevelMethodAndSetter2 = 0;
+}
+
+main() {
+ result = null;
+ topLevelFieldAndSetter1 = 0;
+ expect(null, result);
+ expect(0, topLevelFieldAndSetter1);
+
+ result = null;
+ topLevelFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, topLevelFieldAndSetter2);
+
+ result = null;
+ topLevelLateFinalFieldAndSetter1 = 0;
+ expect(2, result);
+ throws(() => topLevelLateFinalFieldAndSetter1);
+
+ result = null;
+ topLevelLateFinalFieldAndSetter2 = 0;
+ expect(null, result);
+ expect(0, topLevelLateFinalFieldAndSetter2);
+
+ expect(1, topLevelMethodAndSetter1());
+
+ expect(1, topLevelMethodAndSetter2());
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
+
+throws(dynamic Function() f) {
+ try {
+ f();
+ } catch (e) {
+ print(e);
+ return;
+ }
+ throw 'Expected exception.';
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.outline.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.outline.expect
new file mode 100644
index 0000000..c394d09
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.outline.expect
@@ -0,0 +1,131 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
+// int topLevelMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
+// int topLevelMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
+// int get topLevelGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
+// int get topLevelGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
+// int topLevelField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
+// int topLevelField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
+// final int topLevelDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with member 'topLevelFieldAndSetter1'.
+// void set topLevelFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
+// int topLevelFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with member 'topLevelFieldAndSetter2'.
+// void set topLevelFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
+// int topLevelFieldAndSetter2 = 1;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic result;
+static field core::int topLevelField;
+static field core::int topLevelFieldAndSetter1;
+static field core::int topLevelFieldAndSetter2;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
+static final field core::int topLevelDuplicateFieldAndSetter;
+static final field core::int topLevelFieldAndDuplicateSetter;
+static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static const field dynamic _exports# = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}" /*isLegacy, from null */;
+static method topLevelMethod() → core::int
+ ;
+static get topLevelGetter() → core::int
+ ;
+static set topLevelSetter(dynamic value) → void
+ ;
+static set topLevelFieldAndSetter1(core::int value) → void
+ ;
+static set topLevelFieldAndSetter2(core::int value) → void
+ ;
+static set topLevelLateFinalFieldAndSetter1(core::int value) → void
+ ;
+static set topLevelLateFinalFieldAndSetter2(core::int value) → void
+ ;
+static set topLevelDuplicateFieldAndSetter(core::int value) → void
+ ;
+static set topLevelFieldAndDuplicateSetter(core::int value) → void
+ ;
+static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void
+ ;
+static method topLevelMethodAndSetter1() → core::int
+ ;
+static set topLevelMethodAndSetter1(core::int value) → void
+ ;
+static set topLevelMethodAndSetter2(core::int value) → void
+ ;
+static method topLevelMethodAndSetter2() → core::int
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
+static method throws(() → dynamic f) → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
new file mode 100644
index 0000000..c79ae01
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.expect
@@ -0,0 +1,265 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
+// int topLevelMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
+// int topLevelMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
+// int get topLevelGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
+// int get topLevelGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
+// int topLevelField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
+// int topLevelField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
+// final int topLevelDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with member 'topLevelFieldAndSetter1'.
+// void set topLevelFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
+// int topLevelFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with member 'topLevelFieldAndSetter2'.
+// void set topLevelFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
+// int topLevelFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// topLevelMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// (topLevelMethod)();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// topLevelGetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// topLevelSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// topLevelField;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// topLevelField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// topLevelDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// topLevelFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndDuplicateSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// topLevelDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// topLevelMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// topLevelMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic result;
+static field core::int topLevelField;
+static field core::int topLevelFieldAndSetter1 = 1;
+static field core::int topLevelFieldAndSetter2 = 1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
+static final field core::int topLevelDuplicateFieldAndSetter;
+static final field core::int topLevelFieldAndDuplicateSetter = 1;
+static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethod() → core::int
+ return 1;
+static get topLevelGetter() → core::int
+ return 1;
+static set topLevelSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set topLevelFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set topLevelFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method topLevelMethodAndSetter1() → core::int
+ return 1;
+static set topLevelMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method topLevelMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ topLevelMethod();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ (topLevelMethod)();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+ topLevelGetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+ topLevelSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+ topLevelField;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+ topLevelField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+ topLevelDuplicateFieldAndSetter = 0;
+ ^";
+ self::topLevelFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+ topLevelFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndDuplicateSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+ topLevelDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+ topLevelMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+ topLevelMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::topLevelFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter1);
+ self::result = null;
+ self::topLevelFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter2);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter1 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::topLevelLateFinalFieldAndSetter1);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelLateFinalFieldAndSetter2);
+ self::expect(1, self::topLevelMethodAndSetter1());
+ self::expect(1, self::topLevelMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
+
+constants {
+ #C1 = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
new file mode 100644
index 0000000..c79ae01
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.strong.transformed.expect
@@ -0,0 +1,265 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
+// int topLevelMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
+// int topLevelMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
+// int get topLevelGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
+// int get topLevelGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
+// int topLevelField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
+// int topLevelField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
+// final int topLevelDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with member 'topLevelFieldAndSetter1'.
+// void set topLevelFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
+// int topLevelFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with member 'topLevelFieldAndSetter2'.
+// void set topLevelFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
+// int topLevelFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// topLevelMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// (topLevelMethod)();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// topLevelGetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// topLevelSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// topLevelField;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// topLevelField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// topLevelDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// topLevelFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndDuplicateSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// topLevelDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// topLevelMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// topLevelMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic result;
+static field core::int topLevelField;
+static field core::int topLevelFieldAndSetter1 = 1;
+static field core::int topLevelFieldAndSetter2 = 1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
+static final field core::int topLevelDuplicateFieldAndSetter;
+static final field core::int topLevelFieldAndDuplicateSetter = 1;
+static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethod() → core::int
+ return 1;
+static get topLevelGetter() → core::int
+ return 1;
+static set topLevelSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set topLevelFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set topLevelFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method topLevelMethodAndSetter1() → core::int
+ return 1;
+static set topLevelMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method topLevelMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ topLevelMethod();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ (topLevelMethod)();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+ topLevelGetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+ topLevelSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+ topLevelField;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+ topLevelField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+ topLevelDuplicateFieldAndSetter = 0;
+ ^";
+ self::topLevelFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+ topLevelFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndDuplicateSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+ topLevelDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+ topLevelMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+ topLevelMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::topLevelFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter1);
+ self::result = null;
+ self::topLevelFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter2);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter1 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::topLevelLateFinalFieldAndSetter1);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelLateFinalFieldAndSetter2);
+ self::expect(1, self::topLevelMethodAndSetter1());
+ self::expect(1, self::topLevelMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
+
+constants {
+ #C1 = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect
new file mode 100644
index 0000000..20b935d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline.expect
@@ -0,0 +1,35 @@
+var result;
+int topLevelMethod() => 1;
+int topLevelMethod() => 2;
+int get topLevelGetter => 1;
+int get topLevelGetter => 2;
+void set topLevelSetter(value) {}
+void set topLevelSetter(value) {}
+int topLevelField = 1;
+int topLevelField = 2;
+int topLevelFieldAndSetter1 = 1;
+void set topLevelFieldAndSetter1(int value) {}
+void set topLevelFieldAndSetter2(int value) {}
+int topLevelFieldAndSetter2 = 1;
+late final int topLevelLateFinalFieldAndSetter1;
+void set topLevelLateFinalFieldAndSetter1(int value) {}
+void set topLevelLateFinalFieldAndSetter2(int value) {}
+late final int topLevelLateFinalFieldAndSetter2;
+final int topLevelDuplicateFieldAndSetter = 1;
+final int topLevelDuplicateFieldAndSetter = 2;
+void set topLevelDuplicateFieldAndSetter(int value) {}
+final int topLevelFieldAndDuplicateSetter = 1;
+void set topLevelFieldAndDuplicateSetter(int value) {}
+void set topLevelFieldAndDuplicateSetter(int value) {}
+final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+void set topLevelDuplicateFieldAndDuplicateSetter(int value) {}
+void set topLevelDuplicateFieldAndDuplicateSetter(int value) {}
+int topLevelMethodAndSetter1() => 1;
+void set topLevelMethodAndSetter1(int value) {}
+void set topLevelMethodAndSetter2(int value) {}
+int topLevelMethodAndSetter2() => 1;
+test() {}
+main() {}
+expect(expected, actual) {}
+throws(dynamic Function() f) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bb9a9a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.textual_outline_modelled.expect
@@ -0,0 +1,41 @@
+expect(expected, actual) {}
+final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+final int topLevelDuplicateFieldAndSetter = 1;
+final int topLevelDuplicateFieldAndSetter = 2;
+final int topLevelFieldAndDuplicateSetter = 1;
+final int topLevelLateFinalFieldAndSetter1;
+final int topLevelLateFinalFieldAndSetter2;
+int get topLevelGetter => 1;
+int get topLevelGetter => 2;
+int topLevelField = 1;
+int topLevelField = 2;
+int topLevelFieldAndSetter1 = 1;
+int topLevelFieldAndSetter2 = 1;
+int topLevelMethod() => 1;
+int topLevelMethod() => 2;
+void set topLevelLateFinalFieldAndSetter1(int value) {}
+void set topLevelLateFinalFieldAndSetter2(int value) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+throws(dynamic Function() f) {}
+var result;
+void set topLevelDuplicateFieldAndSetter(int value) {}
+void set topLevelFieldAndDuplicateSetter(int value) {}
+void set topLevelFieldAndDuplicateSetter(int value) {}
+void set topLevelFieldAndSetter1(int value) {}
+void set topLevelFieldAndSetter2(int value) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+int topLevelMethodAndSetter1() => 1;
+int topLevelMethodAndSetter2() => 1;
+main() {}
+test() {}
+void set topLevelDuplicateFieldAndDuplicateSetter(int value) {}
+void set topLevelDuplicateFieldAndDuplicateSetter(int value) {}
+void set topLevelMethodAndSetter1(int value) {}
+void set topLevelMethodAndSetter2(int value) {}
+void set topLevelSetter(value) {}
+void set topLevelSetter(value) {}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
new file mode 100644
index 0000000..c79ae01
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.expect
@@ -0,0 +1,265 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
+// int topLevelMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
+// int topLevelMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
+// int get topLevelGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
+// int get topLevelGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
+// int topLevelField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
+// int topLevelField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
+// final int topLevelDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with member 'topLevelFieldAndSetter1'.
+// void set topLevelFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
+// int topLevelFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with member 'topLevelFieldAndSetter2'.
+// void set topLevelFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
+// int topLevelFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// topLevelMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// (topLevelMethod)();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// topLevelGetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// topLevelSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// topLevelField;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// topLevelField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// topLevelDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// topLevelFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndDuplicateSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// topLevelDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// topLevelMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// topLevelMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic result;
+static field core::int topLevelField;
+static field core::int topLevelFieldAndSetter1 = 1;
+static field core::int topLevelFieldAndSetter2 = 1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
+static final field core::int topLevelDuplicateFieldAndSetter;
+static final field core::int topLevelFieldAndDuplicateSetter = 1;
+static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethod() → core::int
+ return 1;
+static get topLevelGetter() → core::int
+ return 1;
+static set topLevelSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set topLevelFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set topLevelFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method topLevelMethodAndSetter1() → core::int
+ return 1;
+static set topLevelMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method topLevelMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ topLevelMethod();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ (topLevelMethod)();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+ topLevelGetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+ topLevelSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+ topLevelField;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+ topLevelField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+ topLevelDuplicateFieldAndSetter = 0;
+ ^";
+ self::topLevelFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+ topLevelFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndDuplicateSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+ topLevelDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+ topLevelMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+ topLevelMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::topLevelFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter1);
+ self::result = null;
+ self::topLevelFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter2);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter1 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::topLevelLateFinalFieldAndSetter1);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelLateFinalFieldAndSetter2);
+ self::expect(1, self::topLevelMethodAndSetter1());
+ self::expect(1, self::topLevelMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
+
+constants {
+ #C1 = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
new file mode 100644
index 0000000..c79ae01
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.transformed.expect
@@ -0,0 +1,265 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
+// int topLevelMethod() => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
+// int topLevelMethod() => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
+// int get topLevelGetter => 2;
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
+// int get topLevelGetter => 1;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
+// void set topLevelSetter(value) {
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
+// int topLevelField = 2;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
+// int topLevelField = 1;
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
+// final int topLevelDuplicateFieldAndSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with member 'topLevelFieldAndSetter1'.
+// void set topLevelFieldAndSetter1(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
+// int topLevelFieldAndSetter1 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with member 'topLevelFieldAndSetter2'.
+// void set topLevelFieldAndSetter2(int value) {
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
+// int topLevelFieldAndSetter2 = 1;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// topLevelMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// (topLevelMethod)();
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+// topLevelGetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+// topLevelSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+// topLevelField;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+// topLevelField = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+// topLevelDuplicateFieldAndSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+// topLevelFieldAndDuplicateSetter = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+// topLevelDuplicateFieldAndDuplicateSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+// topLevelDuplicateFieldAndDuplicateSetter = 0;
+// ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+// topLevelMethodAndSetter1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+// topLevelMethodAndSetter2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic result;
+static field core::int topLevelField;
+static field core::int topLevelFieldAndSetter1 = 1;
+static field core::int topLevelFieldAndSetter2 = 1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
+static final field core::int topLevelDuplicateFieldAndSetter;
+static final field core::int topLevelFieldAndDuplicateSetter = 1;
+static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethod() → core::int
+ return 1;
+static get topLevelGetter() → core::int
+ return 1;
+static set topLevelSetter(dynamic value) → void {
+ self::result = 1;
+}
+static set topLevelFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelLateFinalFieldAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndSetter(core::int value) → void {
+ self::result = 3;
+}
+static set topLevelFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void {
+ self::result = 3;
+}
+static method topLevelMethodAndSetter1() → core::int
+ return 1;
+static set topLevelMethodAndSetter1(core::int value) → void {
+ self::result = 2;
+}
+static set topLevelMethodAndSetter2(core::int value) → void {
+ self::result = 2;
+}
+static method topLevelMethodAndSetter2() → core::int
+ return 1;
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:83:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ topLevelMethod();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+ (topLevelMethod)();
+ ^".call();
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:85:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+ topLevelGetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:18: Error: Can't assign to this.
+ topLevelSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:3: Error: Can't use 'topLevelField' because it is declared more than once.
+ topLevelField;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:17: Error: Can't assign to this.
+ topLevelField = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:35: Error: Can't assign to this.
+ topLevelDuplicateFieldAndSetter = 0;
+ ^";
+ self::topLevelFieldAndDuplicateSetter;
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:92:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+ topLevelFieldAndDuplicateSetter = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+ topLevelDuplicateFieldAndDuplicateSetter;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:94:44: Error: Can't assign to this.
+ topLevelDuplicateFieldAndDuplicateSetter = 0;
+ ^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+ topLevelMethodAndSetter1 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+ topLevelMethodAndSetter2 = 0;
+ ^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+ self::result = null;
+ self::topLevelFieldAndSetter1 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter1);
+ self::result = null;
+ self::topLevelFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelFieldAndSetter2);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter1 = 0;
+ self::expect(2, self::result);
+ self::throws(() → core::int => self::topLevelLateFinalFieldAndSetter1);
+ self::result = null;
+ self::topLevelLateFinalFieldAndSetter2 = 0;
+ self::expect(null, self::result);
+ self::expect(0, self::topLevelLateFinalFieldAndSetter2);
+ self::expect(1, self::topLevelMethodAndSetter1());
+ self::expect(1, self::topLevelMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+ try {
+ f.call();
+ }
+ on core::Object catch(final core::Object e) {
+ core::print(e);
+ return;
+ }
+ throw "Expected exception.";
+}
+
+constants {
+ #C1 = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart b/pkg/front_end/testcases/nnbd/field_vs_setter.dart
new file mode 100644
index 0000000..c310b47
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart
@@ -0,0 +1,84 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+int? topLevelFieldAndSetter;
+void set topLevelFieldAndSetter(int? value) {}
+
+late final int? topLevelLateFinalFieldAndSetter;
+void set topLevelLateFinalFieldAndSetter(int? value) {}
+
+class Class {
+ int? instanceFieldAndSetter;
+ void set instanceFieldAndSetter(int? value) {}
+
+ late final int? instanceLateFinalFieldAndSetter;
+ void set instanceLateFinalFieldAndSetter(int? value) {}
+
+ static int? staticFieldAndSetter;
+ static void set staticFieldAndSetter(int? value) {}
+
+ static late final int? staticLateFinalFieldAndSetter;
+ static void set staticLateFinalFieldAndSetter(int? value) {}
+
+ static int? staticFieldAndInstanceSetter;
+ void set staticFieldAndInstanceSetter(int? value) {}
+
+ int? instanceFieldAndStaticSetter;
+ static void set instanceFieldAndStaticSetter(int? value) {}
+}
+
+extension Extension on int? {
+ int? extensionInstanceFieldAndSetter;
+ void set extensionInstanceFieldAndSetter(int? value) {}
+
+ static int? extensionStaticFieldAndSetter;
+ static void set extensionStaticFieldAndSetter(int? value) {}
+
+ static late final int? extensionStaticLateFinalFieldAndSetter;
+ static void set extensionStaticFieldAndSetter(int? value) {}
+
+ static int? extensionStaticFieldAndInstanceSetter;
+ void set extensionStaticFieldAndInstanceSetter(int? value) {}
+
+ int? extensionInstanceFieldAndStaticSetter;
+ static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+}
+
+test() {
+ topLevelFieldAndSetter = topLevelFieldAndSetter;
+ topLevelLateFinalFieldAndSetter = topLevelLateFinalFieldAndSetter;
+
+ var c = new Class();
+
+ c.instanceFieldAndSetter = c.instanceFieldAndSetter;
+ c.instanceLateFinalFieldAndSetter = c.instanceLateFinalFieldAndSetter;
+
+ Class.staticFieldAndSetter = Class.staticFieldAndSetter;
+ Class.staticLateFinalFieldAndSetter = Class.staticLateFinalFieldAndSetter;
+
+ c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
+ Class.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
+
+ Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+ c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+
+ Extension.extensionStaticFieldAndSetter =
+ Extension.extensionStaticFieldAndSetter;
+ Extension.extensionStaticLateFinalFieldAndSetter =
+ Extension.extensionStaticLateFinalFieldAndSetter;
+
+ 0.extensionStaticFieldAndInstanceSetter =
+ Extension.extensionStaticFieldAndInstanceSetter;
+ Extension.extensionStaticFieldAndInstanceSetter =
+ Extension.extensionStaticFieldAndInstanceSetter;
+
+ Extension.extensionInstanceFieldAndStaticSetter =
+ 0.extensionInstanceFieldAndStaticSetter;
+ 0.extensionInstanceFieldAndStaticSetter =
+ 0.extensionInstanceFieldAndStaticSetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.outline.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.outline.expect
new file mode 100644
index 0000000..b5f626d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.outline.expect
@@ -0,0 +1,166 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: 'extensionStaticFieldAndSetter' is already declared in this scope.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:36:19: Context: Previous declaration of 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:13:12: Error: Conflicts with member 'instanceFieldAndSetter'.
+// void set instanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:8: Error: Conflicts with setter 'instanceFieldAndSetter'.
+// int? instanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:19:19: Error: Conflicts with member 'staticFieldAndSetter'.
+// static void set staticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:18:15: Error: Conflicts with setter 'staticFieldAndSetter'.
+// static int? staticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Error: Conflicts with member 'staticFieldAndInstanceSetter'.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: Conflicts with setter 'staticFieldAndInstanceSetter'.
+// static int? staticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: Conflicts with member 'instanceFieldAndStaticSetter'.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Error: Conflicts with setter 'instanceFieldAndStaticSetter'.
+// int? instanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: Conflicts with member 'extensionInstanceFieldAndSetter'.
+// void set extensionInstanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Conflicts with setter 'extensionInstanceFieldAndSetter'.
+// int? extensionInstanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: Conflicts with member 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:15: Error: Conflicts with setter 'extensionStaticFieldAndSetter'.
+// static int? extensionStaticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:42:12: Error: Conflicts with member 'extensionStaticFieldAndInstanceSetter'.
+// void set extensionStaticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:41:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceSetter'.
+// static int? extensionStaticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:45:19: Error: Conflicts with member 'extensionInstanceFieldAndStaticSetter'.
+// static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticSetter'.
+// int? extensionInstanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:6:10: Error: Conflicts with member 'topLevelFieldAndSetter'.
+// void set topLevelFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:5:6: Error: Conflicts with setter 'topLevelFieldAndSetter'.
+// int? topLevelFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: This static member conflicts with an instance member.
+// static int? staticFieldAndInstanceSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Context: This is the instance member.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: This static member conflicts with an instance member.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Context: This is the instance member.
+// int? instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int? instanceFieldAndSetter;
+ late final [setter] field core::int? instanceLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndSetter;
+ late static final [setter] field core::int? staticLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndInstanceSetter;
+ field core::int? instanceFieldAndStaticSetter;
+ synthetic constructor •() → self::Class
+ ;
+ set instanceFieldAndSetter(core::int? value) → void
+ ;
+ set instanceLateFinalFieldAndSetter(core::int? value) → void
+ ;
+ static set staticFieldAndSetter(core::int? value) → void
+ ;
+ static set staticLateFinalFieldAndSetter(core::int? value) → void
+ ;
+ set staticFieldAndInstanceSetter(core::int? value) → void
+ ;
+ static set instanceFieldAndStaticSetter(core::int? value) → void
+ ;
+}
+extension Extension on core::int? {
+ field extensionInstanceFieldAndSetter = self::Extension|extensionInstanceFieldAndSetter;
+ static field extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ static field extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ static field extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ field extensionInstanceFieldAndStaticSetter = self::Extension|extensionInstanceFieldAndStaticSetter;
+ set extensionInstanceFieldAndSetter = self::Extension|set#extensionInstanceFieldAndSetter;
+ static set extensionStaticFieldAndSetter = set self::Extension|extensionStaticFieldAndSetter;
+ set extensionStaticFieldAndInstanceSetter = self::Extension|set#extensionStaticFieldAndInstanceSetter;
+ static set extensionInstanceFieldAndStaticSetter = set self::Extension|extensionInstanceFieldAndStaticSetter;
+}
+static field core::int? topLevelFieldAndSetter;
+late static final [setter] field core::int? topLevelLateFinalFieldAndSetter;
+static field core::int? Extension|extensionInstanceFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndSetter;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticSetter;
+static set topLevelFieldAndSetter(core::int? value) → void
+ ;
+static set topLevelLateFinalFieldAndSetter(core::int? value) → void
+ ;
+static method Extension|set#extensionInstanceFieldAndSetter(lowered final core::int? #this, core::int? value) → void
+ ;
+static set Extension|extensionStaticFieldAndSetter(core::int? value) → void
+ ;
+static method Extension|set#extensionStaticFieldAndInstanceSetter(lowered final core::int? #this, core::int? value) → void
+ ;
+static set Extension|extensionInstanceFieldAndStaticSetter(core::int? value) → void
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
new file mode 100644
index 0000000..3ac89ba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
@@ -0,0 +1,211 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: 'extensionStaticFieldAndSetter' is already declared in this scope.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:36:19: Context: Previous declaration of 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:13:12: Error: Conflicts with member 'instanceFieldAndSetter'.
+// void set instanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:8: Error: Conflicts with setter 'instanceFieldAndSetter'.
+// int? instanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:19:19: Error: Conflicts with member 'staticFieldAndSetter'.
+// static void set staticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:18:15: Error: Conflicts with setter 'staticFieldAndSetter'.
+// static int? staticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Error: Conflicts with member 'staticFieldAndInstanceSetter'.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: Conflicts with setter 'staticFieldAndInstanceSetter'.
+// static int? staticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: Conflicts with member 'instanceFieldAndStaticSetter'.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Error: Conflicts with setter 'instanceFieldAndStaticSetter'.
+// int? instanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: Conflicts with member 'extensionInstanceFieldAndSetter'.
+// void set extensionInstanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Conflicts with setter 'extensionInstanceFieldAndSetter'.
+// int? extensionInstanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: Conflicts with member 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:15: Error: Conflicts with setter 'extensionStaticFieldAndSetter'.
+// static int? extensionStaticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:42:12: Error: Conflicts with member 'extensionStaticFieldAndInstanceSetter'.
+// void set extensionStaticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:41:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceSetter'.
+// static int? extensionStaticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:45:19: Error: Conflicts with member 'extensionInstanceFieldAndStaticSetter'.
+// static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticSetter'.
+// int? extensionInstanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:6:10: Error: Conflicts with member 'topLevelFieldAndSetter'.
+// void set topLevelFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:5:6: Error: Conflicts with setter 'topLevelFieldAndSetter'.
+// int? topLevelFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: This static member conflicts with an instance member.
+// static int? staticFieldAndInstanceSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Context: This is the instance member.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: This static member conflicts with an instance member.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Context: This is the instance member.
+// int? instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+// c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:81:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int? instanceFieldAndSetter = null;
+ late final [setter] field core::int? instanceLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndSetter = null;
+ late static final [setter] field core::int? staticLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndInstanceSetter = null;
+ field core::int? instanceFieldAndStaticSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ set instanceFieldAndSetter(core::int? value) → void {}
+ set instanceLateFinalFieldAndSetter(core::int? value) → void {}
+ static set staticFieldAndSetter(core::int? value) → void {}
+ static set staticLateFinalFieldAndSetter(core::int? value) → void {}
+ set staticFieldAndInstanceSetter(core::int? value) → void {}
+ static set instanceFieldAndStaticSetter(core::int? value) → void {}
+}
+extension Extension on core::int? {
+ field extensionInstanceFieldAndSetter = self::Extension|extensionInstanceFieldAndSetter;
+ static field extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ static field extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ static field extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ field extensionInstanceFieldAndStaticSetter = self::Extension|extensionInstanceFieldAndStaticSetter;
+ set extensionInstanceFieldAndSetter = self::Extension|set#extensionInstanceFieldAndSetter;
+ static set extensionStaticFieldAndSetter = set self::Extension|extensionStaticFieldAndSetter;
+ set extensionStaticFieldAndInstanceSetter = self::Extension|set#extensionStaticFieldAndInstanceSetter;
+ static set extensionInstanceFieldAndStaticSetter = set self::Extension|extensionInstanceFieldAndStaticSetter;
+}
+static field core::int? topLevelFieldAndSetter;
+late static final [setter] field core::int? topLevelLateFinalFieldAndSetter;
+static field core::int? Extension|extensionInstanceFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndSetter;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticSetter;
+static set topLevelFieldAndSetter(core::int? value) → void {}
+static set topLevelLateFinalFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionInstanceFieldAndSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionStaticFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionStaticFieldAndInstanceSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionInstanceFieldAndStaticSetter(core::int? value) → void {}
+static method test() → dynamic {
+ self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
+ self::topLevelLateFinalFieldAndSetter = self::topLevelLateFinalFieldAndSetter;
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
+ c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
+ self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
+ self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
+ c.{self::Class::staticFieldAndInstanceSetter} = self::Class::staticFieldAndInstanceSetter;
+ self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
+ self::Class::instanceFieldAndStaticSetter = c.{self::Class::instanceFieldAndStaticSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+ c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionInstanceFieldAndSetter(0, invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?);
+ self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ self::Extension|set#extensionStaticFieldAndInstanceSetter(0, self::Extension|extensionStaticFieldAndInstanceSetter);
+ self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ self::Extension|extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
new file mode 100644
index 0000000..92d9d15
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
@@ -0,0 +1,211 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: 'extensionStaticFieldAndSetter' is already declared in this scope.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:36:19: Context: Previous declaration of 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:13:12: Error: Conflicts with member 'instanceFieldAndSetter'.
+// void set instanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:8: Error: Conflicts with setter 'instanceFieldAndSetter'.
+// int? instanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:19:19: Error: Conflicts with member 'staticFieldAndSetter'.
+// static void set staticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:18:15: Error: Conflicts with setter 'staticFieldAndSetter'.
+// static int? staticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Error: Conflicts with member 'staticFieldAndInstanceSetter'.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: Conflicts with setter 'staticFieldAndInstanceSetter'.
+// static int? staticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: Conflicts with member 'instanceFieldAndStaticSetter'.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Error: Conflicts with setter 'instanceFieldAndStaticSetter'.
+// int? instanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: Conflicts with member 'extensionInstanceFieldAndSetter'.
+// void set extensionInstanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Conflicts with setter 'extensionInstanceFieldAndSetter'.
+// int? extensionInstanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: Conflicts with member 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:15: Error: Conflicts with setter 'extensionStaticFieldAndSetter'.
+// static int? extensionStaticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:42:12: Error: Conflicts with member 'extensionStaticFieldAndInstanceSetter'.
+// void set extensionStaticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:41:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceSetter'.
+// static int? extensionStaticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:45:19: Error: Conflicts with member 'extensionInstanceFieldAndStaticSetter'.
+// static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticSetter'.
+// int? extensionInstanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:6:10: Error: Conflicts with member 'topLevelFieldAndSetter'.
+// void set topLevelFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:5:6: Error: Conflicts with setter 'topLevelFieldAndSetter'.
+// int? topLevelFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: This static member conflicts with an instance member.
+// static int? staticFieldAndInstanceSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Context: This is the instance member.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: This static member conflicts with an instance member.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Context: This is the instance member.
+// int? instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+// c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:81:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int? instanceFieldAndSetter = null;
+ late final [setter] field core::int? instanceLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndSetter = null;
+ late static final [setter] field core::int? staticLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndInstanceSetter = null;
+ field core::int? instanceFieldAndStaticSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ set instanceFieldAndSetter(core::int? value) → void {}
+ set instanceLateFinalFieldAndSetter(core::int? value) → void {}
+ static set staticFieldAndSetter(core::int? value) → void {}
+ static set staticLateFinalFieldAndSetter(core::int? value) → void {}
+ set staticFieldAndInstanceSetter(core::int? value) → void {}
+ static set instanceFieldAndStaticSetter(core::int? value) → void {}
+}
+extension Extension on core::int? {
+ field extensionInstanceFieldAndSetter = self::Extension|extensionInstanceFieldAndSetter;
+ static field extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ static field extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ static field extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ field extensionInstanceFieldAndStaticSetter = self::Extension|extensionInstanceFieldAndStaticSetter;
+ set extensionInstanceFieldAndSetter = self::Extension|set#extensionInstanceFieldAndSetter;
+ static set extensionStaticFieldAndSetter = set self::Extension|extensionStaticFieldAndSetter;
+ set extensionStaticFieldAndInstanceSetter = self::Extension|set#extensionStaticFieldAndInstanceSetter;
+ static set extensionInstanceFieldAndStaticSetter = set self::Extension|extensionInstanceFieldAndStaticSetter;
+}
+static field core::int? topLevelFieldAndSetter;
+late static final [setter] field core::int? topLevelLateFinalFieldAndSetter;
+static field core::int? Extension|extensionInstanceFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndSetter;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticSetter;
+static set topLevelFieldAndSetter(core::int? value) → void {}
+static set topLevelLateFinalFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionInstanceFieldAndSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionStaticFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionStaticFieldAndInstanceSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionInstanceFieldAndStaticSetter(core::int? value) → void {}
+static method test() → dynamic {
+ self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
+ self::topLevelLateFinalFieldAndSetter = self::topLevelLateFinalFieldAndSetter;
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
+ c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
+ self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
+ self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
+ c.{self::Class::staticFieldAndInstanceSetter} = self::Class::staticFieldAndInstanceSetter;
+ self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
+ self::Class::instanceFieldAndStaticSetter = c.{self::Class::instanceFieldAndStaticSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+ c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionInstanceFieldAndSetter(0, invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
+ self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ self::Extension|set#extensionStaticFieldAndInstanceSetter(0, self::Extension|extensionStaticFieldAndInstanceSetter);
+ self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ self::Extension|extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..9be3ed0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.textual_outline.expect
@@ -0,0 +1,36 @@
+int? topLevelFieldAndSetter;
+void set topLevelFieldAndSetter(int? value) {}
+late
+final int? topLevelLateFinalFieldAndSetter;
+void set topLevelLateFinalFieldAndSetter(int? value) {}
+class Class {
+ int? instanceFieldAndSetter;
+ void set instanceFieldAndSetter(int? value) {}
+ late
+ final int? instanceLateFinalFieldAndSetter;
+ void set instanceLateFinalFieldAndSetter(int? value) {}
+ static int? staticFieldAndSetter;
+ static void set staticFieldAndSetter(int? value) {}
+ static late ;
+ final int? staticLateFinalFieldAndSetter;
+ static void set staticLateFinalFieldAndSetter(int? value) {}
+ static int? staticFieldAndInstanceSetter;
+ void set staticFieldAndInstanceSetter(int? value) {}
+ int? instanceFieldAndStaticSetter;
+ static void set instanceFieldAndStaticSetter(int? value) {}
+}
+extension Extension on int? {
+ int? extensionInstanceFieldAndSetter;
+ void set extensionInstanceFieldAndSetter(int? value) {}
+ static int? extensionStaticFieldAndSetter;
+ static void set extensionStaticFieldAndSetter(int? value) {}
+ static late ;
+ final int? extensionStaticLateFinalFieldAndSetter;
+ static void set extensionStaticFieldAndSetter(int? value) {}
+ static int? extensionStaticFieldAndInstanceSetter;
+ void set extensionStaticFieldAndInstanceSetter(int? value) {}
+ int? extensionInstanceFieldAndStaticSetter;
+ static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
new file mode 100644
index 0000000..3ac89ba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
@@ -0,0 +1,211 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: 'extensionStaticFieldAndSetter' is already declared in this scope.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:36:19: Context: Previous declaration of 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:13:12: Error: Conflicts with member 'instanceFieldAndSetter'.
+// void set instanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:8: Error: Conflicts with setter 'instanceFieldAndSetter'.
+// int? instanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:19:19: Error: Conflicts with member 'staticFieldAndSetter'.
+// static void set staticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:18:15: Error: Conflicts with setter 'staticFieldAndSetter'.
+// static int? staticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Error: Conflicts with member 'staticFieldAndInstanceSetter'.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: Conflicts with setter 'staticFieldAndInstanceSetter'.
+// static int? staticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: Conflicts with member 'instanceFieldAndStaticSetter'.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Error: Conflicts with setter 'instanceFieldAndStaticSetter'.
+// int? instanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: Conflicts with member 'extensionInstanceFieldAndSetter'.
+// void set extensionInstanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Conflicts with setter 'extensionInstanceFieldAndSetter'.
+// int? extensionInstanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: Conflicts with member 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:15: Error: Conflicts with setter 'extensionStaticFieldAndSetter'.
+// static int? extensionStaticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:42:12: Error: Conflicts with member 'extensionStaticFieldAndInstanceSetter'.
+// void set extensionStaticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:41:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceSetter'.
+// static int? extensionStaticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:45:19: Error: Conflicts with member 'extensionInstanceFieldAndStaticSetter'.
+// static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticSetter'.
+// int? extensionInstanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:6:10: Error: Conflicts with member 'topLevelFieldAndSetter'.
+// void set topLevelFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:5:6: Error: Conflicts with setter 'topLevelFieldAndSetter'.
+// int? topLevelFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: This static member conflicts with an instance member.
+// static int? staticFieldAndInstanceSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Context: This is the instance member.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: This static member conflicts with an instance member.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Context: This is the instance member.
+// int? instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+// c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:81:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int? instanceFieldAndSetter = null;
+ late final [setter] field core::int? instanceLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndSetter = null;
+ late static final [setter] field core::int? staticLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndInstanceSetter = null;
+ field core::int? instanceFieldAndStaticSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ set instanceFieldAndSetter(core::int? value) → void {}
+ set instanceLateFinalFieldAndSetter(core::int? value) → void {}
+ static set staticFieldAndSetter(core::int? value) → void {}
+ static set staticLateFinalFieldAndSetter(core::int? value) → void {}
+ set staticFieldAndInstanceSetter(core::int? value) → void {}
+ static set instanceFieldAndStaticSetter(core::int? value) → void {}
+}
+extension Extension on core::int? {
+ field extensionInstanceFieldAndSetter = self::Extension|extensionInstanceFieldAndSetter;
+ static field extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ static field extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ static field extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ field extensionInstanceFieldAndStaticSetter = self::Extension|extensionInstanceFieldAndStaticSetter;
+ set extensionInstanceFieldAndSetter = self::Extension|set#extensionInstanceFieldAndSetter;
+ static set extensionStaticFieldAndSetter = set self::Extension|extensionStaticFieldAndSetter;
+ set extensionStaticFieldAndInstanceSetter = self::Extension|set#extensionStaticFieldAndInstanceSetter;
+ static set extensionInstanceFieldAndStaticSetter = set self::Extension|extensionInstanceFieldAndStaticSetter;
+}
+static field core::int? topLevelFieldAndSetter;
+late static final [setter] field core::int? topLevelLateFinalFieldAndSetter;
+static field core::int? Extension|extensionInstanceFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndSetter;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticSetter;
+static set topLevelFieldAndSetter(core::int? value) → void {}
+static set topLevelLateFinalFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionInstanceFieldAndSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionStaticFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionStaticFieldAndInstanceSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionInstanceFieldAndStaticSetter(core::int? value) → void {}
+static method test() → dynamic {
+ self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
+ self::topLevelLateFinalFieldAndSetter = self::topLevelLateFinalFieldAndSetter;
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
+ c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
+ self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
+ self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
+ c.{self::Class::staticFieldAndInstanceSetter} = self::Class::staticFieldAndInstanceSetter;
+ self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
+ self::Class::instanceFieldAndStaticSetter = c.{self::Class::instanceFieldAndStaticSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+ c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionInstanceFieldAndSetter(0, invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?);
+ self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ self::Extension|set#extensionStaticFieldAndInstanceSetter(0, self::Extension|extensionStaticFieldAndInstanceSetter);
+ self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ self::Extension|extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
new file mode 100644
index 0000000..92d9d15
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
@@ -0,0 +1,211 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: 'extensionStaticFieldAndSetter' is already declared in this scope.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:36:19: Context: Previous declaration of 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+// int? extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:13:12: Error: Conflicts with member 'instanceFieldAndSetter'.
+// void set instanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:8: Error: Conflicts with setter 'instanceFieldAndSetter'.
+// int? instanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:19:19: Error: Conflicts with member 'staticFieldAndSetter'.
+// static void set staticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:18:15: Error: Conflicts with setter 'staticFieldAndSetter'.
+// static int? staticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Error: Conflicts with member 'staticFieldAndInstanceSetter'.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: Conflicts with setter 'staticFieldAndInstanceSetter'.
+// static int? staticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: Conflicts with member 'instanceFieldAndStaticSetter'.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Error: Conflicts with setter 'instanceFieldAndStaticSetter'.
+// int? instanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: Conflicts with member 'extensionInstanceFieldAndSetter'.
+// void set extensionInstanceFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:8: Error: Conflicts with setter 'extensionInstanceFieldAndSetter'.
+// int? extensionInstanceFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:19: Error: Conflicts with member 'extensionStaticFieldAndSetter'.
+// static void set extensionStaticFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:15: Error: Conflicts with setter 'extensionStaticFieldAndSetter'.
+// static int? extensionStaticFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:42:12: Error: Conflicts with member 'extensionStaticFieldAndInstanceSetter'.
+// void set extensionStaticFieldAndInstanceSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:41:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceSetter'.
+// static int? extensionStaticFieldAndInstanceSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:45:19: Error: Conflicts with member 'extensionInstanceFieldAndStaticSetter'.
+// static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticSetter'.
+// int? extensionInstanceFieldAndStaticSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:6:10: Error: Conflicts with member 'topLevelFieldAndSetter'.
+// void set topLevelFieldAndSetter(int? value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:5:6: Error: Conflicts with setter 'topLevelFieldAndSetter'.
+// int? topLevelFieldAndSetter;
+// ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:15: Error: This static member conflicts with an instance member.
+// static int? staticFieldAndInstanceSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:12: Context: This is the instance member.
+// void set staticFieldAndInstanceSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:19: Error: This static member conflicts with an instance member.
+// static void set instanceFieldAndStaticSetter(int? value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:27:8: Context: This is the instance member.
+// int? instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+// c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:81:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+// 0.extensionInstanceFieldAndStaticSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+ field core::int? instanceFieldAndSetter = null;
+ late final [setter] field core::int? instanceLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndSetter = null;
+ late static final [setter] field core::int? staticLateFinalFieldAndSetter;
+ static field core::int? staticFieldAndInstanceSetter = null;
+ field core::int? instanceFieldAndStaticSetter = null;
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ set instanceFieldAndSetter(core::int? value) → void {}
+ set instanceLateFinalFieldAndSetter(core::int? value) → void {}
+ static set staticFieldAndSetter(core::int? value) → void {}
+ static set staticLateFinalFieldAndSetter(core::int? value) → void {}
+ set staticFieldAndInstanceSetter(core::int? value) → void {}
+ static set instanceFieldAndStaticSetter(core::int? value) → void {}
+}
+extension Extension on core::int? {
+ field extensionInstanceFieldAndSetter = self::Extension|extensionInstanceFieldAndSetter;
+ static field extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ static field extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ static field extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ field extensionInstanceFieldAndStaticSetter = self::Extension|extensionInstanceFieldAndStaticSetter;
+ set extensionInstanceFieldAndSetter = self::Extension|set#extensionInstanceFieldAndSetter;
+ static set extensionStaticFieldAndSetter = set self::Extension|extensionStaticFieldAndSetter;
+ set extensionStaticFieldAndInstanceSetter = self::Extension|set#extensionStaticFieldAndInstanceSetter;
+ static set extensionInstanceFieldAndStaticSetter = set self::Extension|extensionInstanceFieldAndStaticSetter;
+}
+static field core::int? topLevelFieldAndSetter;
+late static final [setter] field core::int? topLevelLateFinalFieldAndSetter;
+static field core::int? Extension|extensionInstanceFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndSetter;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticSetter;
+static set topLevelFieldAndSetter(core::int? value) → void {}
+static set topLevelLateFinalFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionInstanceFieldAndSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionStaticFieldAndSetter(core::int? value) → void {}
+static method Extension|set#extensionStaticFieldAndInstanceSetter(lowered final core::int? #this, core::int? value) → void {}
+static set Extension|extensionInstanceFieldAndStaticSetter(core::int? value) → void {}
+static method test() → dynamic {
+ self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
+ self::topLevelLateFinalFieldAndSetter = self::topLevelLateFinalFieldAndSetter;
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter};
+ c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter};
+ self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
+ self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
+ c.{self::Class::staticFieldAndInstanceSetter} = self::Class::staticFieldAndInstanceSetter;
+ self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
+ self::Class::instanceFieldAndStaticSetter = c.{self::Class::instanceFieldAndStaticSetter};
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:64:5: Error: The setter 'instanceFieldAndStaticSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndStaticSetter'.
+ c.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionInstanceFieldAndSetter(0, invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
+ self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+ self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+ self::Extension|set#extensionStaticFieldAndInstanceSetter(0, self::Extension|extensionStaticFieldAndInstanceSetter);
+ self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+ self::Extension|extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter;
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+ 0.extensionInstanceFieldAndStaticSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart
new file mode 100644
index 0000000..f7edbd4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+topLevelMethodAndSetter() {}
+void set topLevelMethodAndSetter(value) {}
+
+typedef typedefAndSetter = Function();
+void set topLevelMethodAndSetter(value) {}
+
+class classAndSetter {}
+
+void set classAndSetter(value) {}
+
+class Class {
+ instanceMethodAndSetter() {}
+ void set instanceMethodAndSetter(value) {}
+
+ static staticMethodAndSetter() {}
+ static void set staticMethodAndSetter(value) {}
+
+ instanceMethodAndStaticSetter() {}
+ static void set instanceMethodAndStaticSetter(value) {}
+
+ static staticMethodAndInstanceSetter() {}
+ void set staticMethodAndInstanceSetter(value) {}
+
+ Class() {}
+ void set Class(value) {}
+}
+
+extension Extension on int? {
+ extensionInstanceMethodAndSetter() {}
+ void set extensionInstanceMethodAndSetter(value) {}
+
+ static extensionStaticMethodAndSetter() {}
+ static void set extensionStaticMethodAndSetter(value) {}
+
+ extensionInstanceMethodAndStaticSetter() {}
+ static void set extensionInstanceMethodAndStaticSetter(value) {}
+
+ static extensionStaticMethodAndInstanceSetter() {}
+ void set extensionStaticMethodAndInstanceSetter(value) {}
+}
+
+test() {
+ topLevelMethodAndSetter = topLevelMethodAndSetter();
+ typedefAndSetter = typedefAndSetter();
+ classAndSetter = classAndSetter();
+
+ var c = new Class();
+
+ c.instanceMethodAndSetter = c.instanceMethodAndSetter();
+
+ Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+
+ c.staticMethodAndInstanceSetter = Class.staticMethodAndInstanceSetter();
+
+ Class.instanceMethodAndStaticSetter = c.instanceMethodAndStaticSetter();
+
+ c.Class = c.Class;
+
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+
+ Extension.extensionStaticMethodAndSetter =
+ Extension.extensionStaticMethodAndSetter();
+
+ 0.extensionStaticMethodAndInstanceSetter =
+ Extension.extensionStaticMethodAndInstanceSetter();
+
+ Extension.extensionInstanceMethodAndStaticSetter =
+ 0.extensionInstanceMethodAndStaticSetter();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.outline.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.outline.expect
new file mode 100644
index 0000000..cb7f98c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.outline.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: 'topLevelMethodAndSetter' is already declared in this scope.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Context: Previous declaration of 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:29:12: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+// void set Class(value) {}
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart: Error: 'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: Conflicts with member 'staticMethodAndSetter'.
+// static void set staticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Error: Conflicts with setter 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:34:12: Error: Conflicts with member 'extensionInstanceMethodAndSetter'.
+// void set extensionInstanceMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:33:3: Error: Conflicts with setter 'extensionInstanceMethodAndSetter'.
+// extensionInstanceMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:37:19: Error: Conflicts with member 'extensionStaticMethodAndSetter'.
+// static void set extensionStaticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:36:10: Error: Conflicts with setter 'extensionStaticMethodAndSetter'.
+// static extensionStaticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:40:19: Error: Conflicts with member 'extensionInstanceMethodAndStaticSetter'.
+// static void set extensionInstanceMethodAndStaticSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:39:3: Error: Conflicts with setter 'extensionInstanceMethodAndStaticSetter'.
+// extensionInstanceMethodAndStaticSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:43:12: Error: Conflicts with member 'extensionStaticMethodAndInstanceSetter'.
+// void set extensionStaticMethodAndInstanceSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:42:10: Error: Conflicts with setter 'extensionStaticMethodAndInstanceSetter'.
+// static extensionStaticMethodAndInstanceSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:17:12: Error: 'instanceMethodAndSetter' is already declared in this scope.
+// void set instanceMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:16:3: Context: Previous declaration of 'instanceMethodAndSetter'.
+// instanceMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: 'staticMethodAndSetter' is already declared in this scope.
+// static void set staticMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Context: Previous declaration of 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:23:19: Error: This static member conflicts with an instance member.
+// static void set instanceMethodAndStaticSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:22:3: Context: This is the instance member.
+// instanceMethodAndStaticSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:25:10: Error: This static member conflicts with an instance member.
+// static staticMethodAndInstanceSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:26:12: Context: This is the instance member.
+// void set staticMethodAndInstanceSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef typedefAndSetter = () → dynamic;
+class classAndSetter extends core::Object {
+ synthetic constructor •() → self::classAndSetter
+ ;
+}
+class Class extends core::Object {
+ constructor •() → self::Class
+ ;
+ method instanceMethodAndSetter() → dynamic
+ ;
+ set instanceMethodAndSetter(dynamic value) → void
+ ;
+ static method staticMethodAndSetter() → dynamic
+ ;
+ static set staticMethodAndSetter(dynamic value) → void
+ ;
+ method instanceMethodAndStaticSetter() → dynamic
+ ;
+ static set instanceMethodAndStaticSetter(dynamic value) → void
+ ;
+ static method staticMethodAndInstanceSetter() → dynamic
+ ;
+ set staticMethodAndInstanceSetter(dynamic value) → void
+ ;
+ set Class(dynamic value) → void
+ ;
+}
+extension Extension on core::int? {
+ method extensionInstanceMethodAndSetter = self::Extension|extensionInstanceMethodAndSetter;
+ tearoff extensionInstanceMethodAndSetter = self::Extension|get#extensionInstanceMethodAndSetter;
+ static method extensionStaticMethodAndSetter = self::Extension|extensionStaticMethodAndSetter;
+ method extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter;
+ tearoff extensionInstanceMethodAndStaticSetter = self::Extension|get#extensionInstanceMethodAndStaticSetter;
+ static method extensionStaticMethodAndInstanceSetter = self::Extension|extensionStaticMethodAndInstanceSetter;
+ set extensionInstanceMethodAndSetter = self::Extension|set#extensionInstanceMethodAndSetter;
+ static set extensionStaticMethodAndSetter = set self::Extension|extensionStaticMethodAndSetter;
+ static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
+ set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
+}
+static const field dynamic _exports# = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}" /*isLegacy, from null */;
+static method topLevelMethodAndSetter() → dynamic
+ ;
+static set topLevelMethodAndSetter(dynamic value) → void
+ ;
+static set classAndSetter(dynamic value) → void
+ ;
+static method Extension|extensionInstanceMethodAndSetter(lowered final core::int? #this) → dynamic
+ ;
+static method Extension|get#extensionInstanceMethodAndSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndSetter(#this);
+static method Extension|set#extensionInstanceMethodAndSetter(lowered final core::int? #this, dynamic value) → void
+ ;
+static method Extension|extensionStaticMethodAndSetter() → dynamic
+ ;
+static set Extension|extensionStaticMethodAndSetter(dynamic value) → void
+ ;
+static method Extension|extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → dynamic
+ ;
+static method Extension|get#extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndStaticSetter(#this);
+static set Extension|extensionInstanceMethodAndStaticSetter(dynamic value) → void
+ ;
+static method Extension|extensionStaticMethodAndInstanceSetter() → dynamic
+ ;
+static method Extension|set#extensionStaticMethodAndInstanceSetter(lowered final core::int? #this, dynamic value) → void
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
new file mode 100644
index 0000000..03ffb8f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.expect
@@ -0,0 +1,208 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: 'topLevelMethodAndSetter' is already declared in this scope.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Context: Previous declaration of 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:29:12: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+// void set Class(value) {}
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart: Error: 'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: Conflicts with member 'staticMethodAndSetter'.
+// static void set staticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Error: Conflicts with setter 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:34:12: Error: Conflicts with member 'extensionInstanceMethodAndSetter'.
+// void set extensionInstanceMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:33:3: Error: Conflicts with setter 'extensionInstanceMethodAndSetter'.
+// extensionInstanceMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:37:19: Error: Conflicts with member 'extensionStaticMethodAndSetter'.
+// static void set extensionStaticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:36:10: Error: Conflicts with setter 'extensionStaticMethodAndSetter'.
+// static extensionStaticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:40:19: Error: Conflicts with member 'extensionInstanceMethodAndStaticSetter'.
+// static void set extensionInstanceMethodAndStaticSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:39:3: Error: Conflicts with setter 'extensionInstanceMethodAndStaticSetter'.
+// extensionInstanceMethodAndStaticSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:43:12: Error: Conflicts with member 'extensionStaticMethodAndInstanceSetter'.
+// void set extensionStaticMethodAndInstanceSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:42:10: Error: Conflicts with setter 'extensionStaticMethodAndInstanceSetter'.
+// static extensionStaticMethodAndInstanceSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:17:12: Error: 'instanceMethodAndSetter' is already declared in this scope.
+// void set instanceMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:16:3: Context: Previous declaration of 'instanceMethodAndSetter'.
+// instanceMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: 'staticMethodAndSetter' is already declared in this scope.
+// static void set staticMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Context: Previous declaration of 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:23:19: Error: This static member conflicts with an instance member.
+// static void set instanceMethodAndStaticSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:22:3: Context: This is the instance member.
+// instanceMethodAndStaticSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:25:10: Error: This static member conflicts with an instance member.
+// static staticMethodAndInstanceSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:26:12: Context: This is the instance member.
+// void set staticMethodAndInstanceSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+// topLevelMethodAndSetter = topLevelMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+// classAndSetter = classAndSetter();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+// Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+// Extension.extensionStaticMethodAndSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+// c.Class = c.Class;
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef typedefAndSetter = () → dynamic;
+class classAndSetter extends core::Object {
+ synthetic constructor •() → self::classAndSetter
+ : super core::Object::•()
+ ;
+}
+class Class extends core::Object {
+ constructor •() → self::Class
+ : super core::Object::•() {}
+ method instanceMethodAndSetter() → dynamic {}
+ set instanceMethodAndSetter(dynamic value) → void {}
+ static method staticMethodAndSetter() → dynamic {}
+ static set staticMethodAndSetter(dynamic value) → void {}
+ method instanceMethodAndStaticSetter() → dynamic {}
+ static set instanceMethodAndStaticSetter(dynamic value) → void {}
+ static method staticMethodAndInstanceSetter() → dynamic {}
+ set staticMethodAndInstanceSetter(dynamic value) → void {}
+ set Class(dynamic value) → void {}
+}
+extension Extension on core::int? {
+ method extensionInstanceMethodAndSetter = self::Extension|extensionInstanceMethodAndSetter;
+ tearoff extensionInstanceMethodAndSetter = self::Extension|get#extensionInstanceMethodAndSetter;
+ static method extensionStaticMethodAndSetter = self::Extension|extensionStaticMethodAndSetter;
+ method extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter;
+ tearoff extensionInstanceMethodAndStaticSetter = self::Extension|get#extensionInstanceMethodAndStaticSetter;
+ static method extensionStaticMethodAndInstanceSetter = self::Extension|extensionStaticMethodAndInstanceSetter;
+ set extensionInstanceMethodAndSetter = self::Extension|set#extensionInstanceMethodAndSetter;
+ static set extensionStaticMethodAndSetter = set self::Extension|extensionStaticMethodAndSetter;
+ static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
+ set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
+}
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethodAndSetter() → dynamic {}
+static set topLevelMethodAndSetter(dynamic value) → void {}
+static set classAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndSetter(#this);
+static method Extension|set#extensionInstanceMethodAndSetter(lowered final core::int? #this, dynamic value) → void {}
+static method Extension|extensionStaticMethodAndSetter() → dynamic {}
+static set Extension|extensionStaticMethodAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndStaticSetter(#this);
+static set Extension|extensionInstanceMethodAndStaticSetter(dynamic value) → void {}
+static method Extension|extensionStaticMethodAndInstanceSetter() → dynamic {}
+static method Extension|set#extensionStaticMethodAndInstanceSetter(lowered final core::int? #this, dynamic value) → void {}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+ topLevelMethodAndSetter = topLevelMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+ typedefAndSetter = typedefAndSetter();
+ ^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+ classAndSetter = classAndSetter();
+ ^^^^^^^^^^^^^^";
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+ Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
+ self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+ c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+ c.Class = c.Class;
+ ^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+ Extension.extensionStaticMethodAndSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionStaticMethodAndInstanceSetter(0, self::Extension|extensionStaticMethodAndInstanceSetter());
+ self::Extension|extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter(0);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
new file mode 100644
index 0000000..03ffb8f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.strong.transformed.expect
@@ -0,0 +1,208 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: 'topLevelMethodAndSetter' is already declared in this scope.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Context: Previous declaration of 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:29:12: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+// void set Class(value) {}
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart: Error: 'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: Conflicts with member 'staticMethodAndSetter'.
+// static void set staticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Error: Conflicts with setter 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:34:12: Error: Conflicts with member 'extensionInstanceMethodAndSetter'.
+// void set extensionInstanceMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:33:3: Error: Conflicts with setter 'extensionInstanceMethodAndSetter'.
+// extensionInstanceMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:37:19: Error: Conflicts with member 'extensionStaticMethodAndSetter'.
+// static void set extensionStaticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:36:10: Error: Conflicts with setter 'extensionStaticMethodAndSetter'.
+// static extensionStaticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:40:19: Error: Conflicts with member 'extensionInstanceMethodAndStaticSetter'.
+// static void set extensionInstanceMethodAndStaticSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:39:3: Error: Conflicts with setter 'extensionInstanceMethodAndStaticSetter'.
+// extensionInstanceMethodAndStaticSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:43:12: Error: Conflicts with member 'extensionStaticMethodAndInstanceSetter'.
+// void set extensionStaticMethodAndInstanceSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:42:10: Error: Conflicts with setter 'extensionStaticMethodAndInstanceSetter'.
+// static extensionStaticMethodAndInstanceSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:17:12: Error: 'instanceMethodAndSetter' is already declared in this scope.
+// void set instanceMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:16:3: Context: Previous declaration of 'instanceMethodAndSetter'.
+// instanceMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: 'staticMethodAndSetter' is already declared in this scope.
+// static void set staticMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Context: Previous declaration of 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:23:19: Error: This static member conflicts with an instance member.
+// static void set instanceMethodAndStaticSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:22:3: Context: This is the instance member.
+// instanceMethodAndStaticSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:25:10: Error: This static member conflicts with an instance member.
+// static staticMethodAndInstanceSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:26:12: Context: This is the instance member.
+// void set staticMethodAndInstanceSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+// topLevelMethodAndSetter = topLevelMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+// classAndSetter = classAndSetter();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+// Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+// Extension.extensionStaticMethodAndSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+// c.Class = c.Class;
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef typedefAndSetter = () → dynamic;
+class classAndSetter extends core::Object {
+ synthetic constructor •() → self::classAndSetter
+ : super core::Object::•()
+ ;
+}
+class Class extends core::Object {
+ constructor •() → self::Class
+ : super core::Object::•() {}
+ method instanceMethodAndSetter() → dynamic {}
+ set instanceMethodAndSetter(dynamic value) → void {}
+ static method staticMethodAndSetter() → dynamic {}
+ static set staticMethodAndSetter(dynamic value) → void {}
+ method instanceMethodAndStaticSetter() → dynamic {}
+ static set instanceMethodAndStaticSetter(dynamic value) → void {}
+ static method staticMethodAndInstanceSetter() → dynamic {}
+ set staticMethodAndInstanceSetter(dynamic value) → void {}
+ set Class(dynamic value) → void {}
+}
+extension Extension on core::int? {
+ method extensionInstanceMethodAndSetter = self::Extension|extensionInstanceMethodAndSetter;
+ tearoff extensionInstanceMethodAndSetter = self::Extension|get#extensionInstanceMethodAndSetter;
+ static method extensionStaticMethodAndSetter = self::Extension|extensionStaticMethodAndSetter;
+ method extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter;
+ tearoff extensionInstanceMethodAndStaticSetter = self::Extension|get#extensionInstanceMethodAndStaticSetter;
+ static method extensionStaticMethodAndInstanceSetter = self::Extension|extensionStaticMethodAndInstanceSetter;
+ set extensionInstanceMethodAndSetter = self::Extension|set#extensionInstanceMethodAndSetter;
+ static set extensionStaticMethodAndSetter = set self::Extension|extensionStaticMethodAndSetter;
+ static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
+ set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
+}
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethodAndSetter() → dynamic {}
+static set topLevelMethodAndSetter(dynamic value) → void {}
+static set classAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndSetter(#this);
+static method Extension|set#extensionInstanceMethodAndSetter(lowered final core::int? #this, dynamic value) → void {}
+static method Extension|extensionStaticMethodAndSetter() → dynamic {}
+static set Extension|extensionStaticMethodAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndStaticSetter(#this);
+static set Extension|extensionInstanceMethodAndStaticSetter(dynamic value) → void {}
+static method Extension|extensionStaticMethodAndInstanceSetter() → dynamic {}
+static method Extension|set#extensionStaticMethodAndInstanceSetter(lowered final core::int? #this, dynamic value) → void {}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+ topLevelMethodAndSetter = topLevelMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+ typedefAndSetter = typedefAndSetter();
+ ^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+ classAndSetter = classAndSetter();
+ ^^^^^^^^^^^^^^";
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+ Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
+ self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+ c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+ c.Class = c.Class;
+ ^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+ Extension.extensionStaticMethodAndSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionStaticMethodAndInstanceSetter(0, self::Extension|extensionStaticMethodAndInstanceSetter());
+ self::Extension|extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter(0);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..9886982
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+topLevelMethodAndSetter() {}
+void set topLevelMethodAndSetter(value) {}
+typedef typedefAndSetter = Function();
+void set topLevelMethodAndSetter(value) {}
+class classAndSetter {}
+void set classAndSetter(value) {}
+class Class {
+ instanceMethodAndSetter() {}
+ void set instanceMethodAndSetter(value) {}
+ static staticMethodAndSetter() {}
+ static void set staticMethodAndSetter(value) {}
+ instanceMethodAndStaticSetter() {}
+ static void set instanceMethodAndStaticSetter(value) {}
+ static staticMethodAndInstanceSetter() {}
+ void set staticMethodAndInstanceSetter(value) {}
+ Class() {}
+ void set Class(value) {}
+}
+extension Extension on int? {
+ extensionInstanceMethodAndSetter() {}
+ void set extensionInstanceMethodAndSetter(value) {}
+ static extensionStaticMethodAndSetter() {}
+ static void set extensionStaticMethodAndSetter(value) {}
+ extensionInstanceMethodAndStaticSetter() {}
+ static void set extensionInstanceMethodAndStaticSetter(value) {}
+ static extensionStaticMethodAndInstanceSetter() {}
+ void set extensionStaticMethodAndInstanceSetter(value) {}
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
new file mode 100644
index 0000000..03ffb8f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.expect
@@ -0,0 +1,208 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: 'topLevelMethodAndSetter' is already declared in this scope.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Context: Previous declaration of 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:29:12: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+// void set Class(value) {}
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart: Error: 'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: Conflicts with member 'staticMethodAndSetter'.
+// static void set staticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Error: Conflicts with setter 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:34:12: Error: Conflicts with member 'extensionInstanceMethodAndSetter'.
+// void set extensionInstanceMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:33:3: Error: Conflicts with setter 'extensionInstanceMethodAndSetter'.
+// extensionInstanceMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:37:19: Error: Conflicts with member 'extensionStaticMethodAndSetter'.
+// static void set extensionStaticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:36:10: Error: Conflicts with setter 'extensionStaticMethodAndSetter'.
+// static extensionStaticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:40:19: Error: Conflicts with member 'extensionInstanceMethodAndStaticSetter'.
+// static void set extensionInstanceMethodAndStaticSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:39:3: Error: Conflicts with setter 'extensionInstanceMethodAndStaticSetter'.
+// extensionInstanceMethodAndStaticSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:43:12: Error: Conflicts with member 'extensionStaticMethodAndInstanceSetter'.
+// void set extensionStaticMethodAndInstanceSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:42:10: Error: Conflicts with setter 'extensionStaticMethodAndInstanceSetter'.
+// static extensionStaticMethodAndInstanceSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:17:12: Error: 'instanceMethodAndSetter' is already declared in this scope.
+// void set instanceMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:16:3: Context: Previous declaration of 'instanceMethodAndSetter'.
+// instanceMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: 'staticMethodAndSetter' is already declared in this scope.
+// static void set staticMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Context: Previous declaration of 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:23:19: Error: This static member conflicts with an instance member.
+// static void set instanceMethodAndStaticSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:22:3: Context: This is the instance member.
+// instanceMethodAndStaticSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:25:10: Error: This static member conflicts with an instance member.
+// static staticMethodAndInstanceSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:26:12: Context: This is the instance member.
+// void set staticMethodAndInstanceSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+// topLevelMethodAndSetter = topLevelMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+// classAndSetter = classAndSetter();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+// Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+// Extension.extensionStaticMethodAndSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+// c.Class = c.Class;
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef typedefAndSetter = () → dynamic;
+class classAndSetter extends core::Object {
+ synthetic constructor •() → self::classAndSetter
+ : super core::Object::•()
+ ;
+}
+class Class extends core::Object {
+ constructor •() → self::Class
+ : super core::Object::•() {}
+ method instanceMethodAndSetter() → dynamic {}
+ set instanceMethodAndSetter(dynamic value) → void {}
+ static method staticMethodAndSetter() → dynamic {}
+ static set staticMethodAndSetter(dynamic value) → void {}
+ method instanceMethodAndStaticSetter() → dynamic {}
+ static set instanceMethodAndStaticSetter(dynamic value) → void {}
+ static method staticMethodAndInstanceSetter() → dynamic {}
+ set staticMethodAndInstanceSetter(dynamic value) → void {}
+ set Class(dynamic value) → void {}
+}
+extension Extension on core::int? {
+ method extensionInstanceMethodAndSetter = self::Extension|extensionInstanceMethodAndSetter;
+ tearoff extensionInstanceMethodAndSetter = self::Extension|get#extensionInstanceMethodAndSetter;
+ static method extensionStaticMethodAndSetter = self::Extension|extensionStaticMethodAndSetter;
+ method extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter;
+ tearoff extensionInstanceMethodAndStaticSetter = self::Extension|get#extensionInstanceMethodAndStaticSetter;
+ static method extensionStaticMethodAndInstanceSetter = self::Extension|extensionStaticMethodAndInstanceSetter;
+ set extensionInstanceMethodAndSetter = self::Extension|set#extensionInstanceMethodAndSetter;
+ static set extensionStaticMethodAndSetter = set self::Extension|extensionStaticMethodAndSetter;
+ static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
+ set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
+}
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethodAndSetter() → dynamic {}
+static set topLevelMethodAndSetter(dynamic value) → void {}
+static set classAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndSetter(#this);
+static method Extension|set#extensionInstanceMethodAndSetter(lowered final core::int? #this, dynamic value) → void {}
+static method Extension|extensionStaticMethodAndSetter() → dynamic {}
+static set Extension|extensionStaticMethodAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndStaticSetter(#this);
+static set Extension|extensionInstanceMethodAndStaticSetter(dynamic value) → void {}
+static method Extension|extensionStaticMethodAndInstanceSetter() → dynamic {}
+static method Extension|set#extensionStaticMethodAndInstanceSetter(lowered final core::int? #this, dynamic value) → void {}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+ topLevelMethodAndSetter = topLevelMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+ typedefAndSetter = typedefAndSetter();
+ ^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+ classAndSetter = classAndSetter();
+ ^^^^^^^^^^^^^^";
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+ Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
+ self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+ c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+ c.Class = c.Class;
+ ^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+ Extension.extensionStaticMethodAndSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionStaticMethodAndInstanceSetter(0, self::Extension|extensionStaticMethodAndInstanceSetter());
+ self::Extension|extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter(0);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
new file mode 100644
index 0000000..03ffb8f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.transformed.expect
@@ -0,0 +1,208 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: 'topLevelMethodAndSetter' is already declared in this scope.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Context: Previous declaration of 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:29:12: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+// void set Class(value) {}
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart: Error: 'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: Conflicts with member 'staticMethodAndSetter'.
+// static void set staticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Error: Conflicts with setter 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:34:12: Error: Conflicts with member 'extensionInstanceMethodAndSetter'.
+// void set extensionInstanceMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:33:3: Error: Conflicts with setter 'extensionInstanceMethodAndSetter'.
+// extensionInstanceMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:37:19: Error: Conflicts with member 'extensionStaticMethodAndSetter'.
+// static void set extensionStaticMethodAndSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:36:10: Error: Conflicts with setter 'extensionStaticMethodAndSetter'.
+// static extensionStaticMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:40:19: Error: Conflicts with member 'extensionInstanceMethodAndStaticSetter'.
+// static void set extensionInstanceMethodAndStaticSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:39:3: Error: Conflicts with setter 'extensionInstanceMethodAndStaticSetter'.
+// extensionInstanceMethodAndStaticSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:43:12: Error: Conflicts with member 'extensionStaticMethodAndInstanceSetter'.
+// void set extensionStaticMethodAndInstanceSetter(value) {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:42:10: Error: Conflicts with setter 'extensionStaticMethodAndInstanceSetter'.
+// static extensionStaticMethodAndInstanceSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:17:12: Error: 'instanceMethodAndSetter' is already declared in this scope.
+// void set instanceMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:16:3: Context: Previous declaration of 'instanceMethodAndSetter'.
+// instanceMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: 'staticMethodAndSetter' is already declared in this scope.
+// static void set staticMethodAndSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Context: Previous declaration of 'staticMethodAndSetter'.
+// static staticMethodAndSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:23:19: Error: This static member conflicts with an instance member.
+// static void set instanceMethodAndStaticSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:22:3: Context: This is the instance member.
+// instanceMethodAndStaticSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:25:10: Error: This static member conflicts with an instance member.
+// static staticMethodAndInstanceSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:26:12: Context: This is the instance member.
+// void set staticMethodAndInstanceSetter(value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+// topLevelMethodAndSetter = topLevelMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Method not found: 'typedefAndSetter'.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+// typedefAndSetter = typedefAndSetter();
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+// classAndSetter = classAndSetter();
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+// Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+// Extension.extensionStaticMethodAndSetter =
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+// - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+// c.Class = c.Class;
+// ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+// 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef typedefAndSetter = () → dynamic;
+class classAndSetter extends core::Object {
+ synthetic constructor •() → self::classAndSetter
+ : super core::Object::•()
+ ;
+}
+class Class extends core::Object {
+ constructor •() → self::Class
+ : super core::Object::•() {}
+ method instanceMethodAndSetter() → dynamic {}
+ set instanceMethodAndSetter(dynamic value) → void {}
+ static method staticMethodAndSetter() → dynamic {}
+ static set staticMethodAndSetter(dynamic value) → void {}
+ method instanceMethodAndStaticSetter() → dynamic {}
+ static set instanceMethodAndStaticSetter(dynamic value) → void {}
+ static method staticMethodAndInstanceSetter() → dynamic {}
+ set staticMethodAndInstanceSetter(dynamic value) → void {}
+ set Class(dynamic value) → void {}
+}
+extension Extension on core::int? {
+ method extensionInstanceMethodAndSetter = self::Extension|extensionInstanceMethodAndSetter;
+ tearoff extensionInstanceMethodAndSetter = self::Extension|get#extensionInstanceMethodAndSetter;
+ static method extensionStaticMethodAndSetter = self::Extension|extensionStaticMethodAndSetter;
+ method extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter;
+ tearoff extensionInstanceMethodAndStaticSetter = self::Extension|get#extensionInstanceMethodAndStaticSetter;
+ static method extensionStaticMethodAndInstanceSetter = self::Extension|extensionStaticMethodAndInstanceSetter;
+ set extensionInstanceMethodAndSetter = self::Extension|set#extensionInstanceMethodAndSetter;
+ static set extensionStaticMethodAndSetter = set self::Extension|extensionStaticMethodAndSetter;
+ static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
+ set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
+}
+static const field dynamic _exports# = #C1 /*isLegacy, from null */;
+static method topLevelMethodAndSetter() → dynamic {}
+static set topLevelMethodAndSetter(dynamic value) → void {}
+static set classAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndSetter(#this);
+static method Extension|set#extensionInstanceMethodAndSetter(lowered final core::int? #this, dynamic value) → void {}
+static method Extension|extensionStaticMethodAndSetter() → dynamic {}
+static set Extension|extensionStaticMethodAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → () → dynamic
+ return () → dynamic => self::Extension|extensionInstanceMethodAndStaticSetter(#this);
+static set Extension|extensionInstanceMethodAndStaticSetter(dynamic value) → void {}
+static method Extension|extensionStaticMethodAndInstanceSetter() → dynamic {}
+static method Extension|set#extensionStaticMethodAndInstanceSetter(lowered final core::int? #this, dynamic value) → void {}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+ topLevelMethodAndSetter = topLevelMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+ typedefAndSetter = typedefAndSetter();
+ ^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+ classAndSetter = classAndSetter();
+ ^^^^^^^^^^^^^^";
+ self::Class c = new self::Class::•();
+ c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}();
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+ Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^";
+ c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
+ self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}();
+ c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+ c.Class = c.Class;
+ ^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+ 0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+ Extension.extensionStaticMethodAndSetter =
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+ self::Extension|set#extensionStaticMethodAndInstanceSetter(0, self::Extension|extensionStaticMethodAndInstanceSetter());
+ self::Extension|extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter(0);
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index bbb5c64..10f576d 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -169,6 +169,7 @@
inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError
late_lowering/covariant_late_field: TypeCheckError
nnbd/covariant_late_field: TypeCheckError
+nnbd/duplicates_instance_extension: VerificationError
nnbd/getter_vs_setter_type: TypeCheckError
nnbd/issue41180: RuntimeError # Strong mode runtime checking fails due to mixed strong mode.
nnbd/issue42603: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index c21c124..ca60b99 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -169,6 +169,7 @@
inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError
late_lowering/covariant_late_field: TypeCheckError
nnbd/covariant_late_field: TypeCheckError
+nnbd/duplicates_instance_extension: VerificationError
nnbd/getter_vs_setter_type: TypeCheckError
nnbd/issue41180: RuntimeError
nnbd/issue42603: TypeCheckError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index add6cbb..a6f248c 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -108,6 +108,11 @@
late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
nnbd/abstract_field_errors: FormatterCrash
nnbd/covariant_late_field: FormatterCrash
+nnbd/duplicates_instance: FormatterCrash
+nnbd/duplicates_instance_extension: FormatterCrash
+nnbd/duplicates_static: FormatterCrash
+nnbd/duplicates_static_extension: FormatterCrash
+nnbd/field_vs_setter: FormatterCrash
nnbd/forbidden_supers: FormatterCrash
nnbd/getter_vs_setter_type_late: FormatterCrash
nnbd/inheritance_from_opt_in: FormatterCrash
@@ -119,6 +124,7 @@
nnbd/later: FormatterCrash
nnbd/no_null_shorting_explicit_extension: FormatterCrash
nnbd/no_null_shorting_extension: FormatterCrash
+nnbd/nonfield_vs_setter: FormatterCrash
nnbd/non_nullable_field_initialization: FormatterCrash
nnbd/opt_out: FormatterCrash
nnbd/potentially_non_nullable_field: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 731df3e..6efa9d9 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -57,6 +57,7 @@
general_nnbd_opt_out/void_methods: RuntimeError
late_lowering/covariant_late_field: TypeCheckError
nnbd/covariant_late_field: TypeCheckError
+nnbd/duplicates_instance_extension: VerificationError
nnbd/getter_vs_setter_type: TypeCheckError
nnbd/issue42603: TypeCheckError
nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
diff --git a/pkg/vm_service/test/get_stack_test.dart b/pkg/vm_service/test/get_stack_test.dart
index f1ba6f1..28c5001 100644
--- a/pkg/vm_service/test/get_stack_test.dart
+++ b/pkg/vm_service/test/get_stack_test.dart
@@ -52,11 +52,12 @@
// Before the first await.
hasStoppedAtBreakpoint,
stoppedAtLine(LINE_A),
+ // At LINE_A we're still running sync. so no asyncCausalFrames.
(VmService service, IsolateRef isolateRef) async {
final result = await service.getStack(isolateRef.id!);
expect(result.frames, hasLength(16));
- expect(result.asyncCausalFrames, hasLength(16));
+ expect(result.asyncCausalFrames, isNull);
expect(result.awaiterFrames, hasLength(16));
expectFrames(result.frames, [
@@ -73,20 +74,6 @@
[equals('Regular'), endsWith(' testMain')],
]);
- expectFrames(result.asyncCausalFrames, [
- [equals('Regular'), endsWith(' func10')],
- [equals('Regular'), endsWith(' func9')],
- [equals('Regular'), endsWith(' func8')],
- [equals('Regular'), endsWith(' func7')],
- [equals('Regular'), endsWith(' func6')],
- [equals('Regular'), endsWith(' func5')],
- [equals('Regular'), endsWith(' func4')],
- [equals('Regular'), endsWith(' func3')],
- [equals('Regular'), endsWith(' func2')],
- [equals('Regular'), endsWith(' func1')],
- [equals('Regular'), endsWith(' testMain')],
- ]);
-
expectFrames(result.awaiterFrames, [
[equals('AsyncActivation'), endsWith(' func10')],
[equals('AsyncActivation'), endsWith(' func9')],
@@ -101,10 +88,10 @@
[equals('AsyncActivation'), endsWith(' testMain')],
]);
},
- // After resuming the continuation - i.e. running async.
resumeIsolate,
hasStoppedAtBreakpoint,
stoppedAtLine(LINE_B),
+ // After resuming the continuation - i.e. running async.
(VmService service, IsolateRef isolateRef) async {
final result = await service.getStack(isolateRef.id!);
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 50283d3..41fb6f8 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -758,6 +758,22 @@
return NewDartExceptionWithMessage(kCoreLibURL, "_InternalError", message);
}
+Dart_Handle DartUtils::NewStringFormatted(const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ intptr_t len = vsnprintf(NULL, 0, format, args);
+ va_end(args);
+
+ char* buffer = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 1));
+ MSAN_UNPOISON(buffer, (len + 1));
+ va_list args2;
+ va_start(args2, format);
+ vsnprintf(buffer, (len + 1), format, args2);
+ va_end(args2);
+
+ return NewString(buffer);
+}
+
bool DartUtils::SetOriginalWorkingDirectory() {
// If we happen to re-initialize the Dart VM multiple times, make sure to free
// the old string (allocated by getcwd()) before setting a new one.
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 66da23f..f7f1d8d 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -195,13 +195,16 @@
const char* message,
Dart_Handle os_error);
- // Create a new Dart String object from a C String.
+ // Create a new Dart String object from a UTF8 encoded C String.
static Dart_Handle NewString(const char* str) {
ASSERT(str != NULL);
return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str),
strlen(str));
}
+ // Create a new Dart String object from a formatted string.
+ static Dart_Handle NewStringFormatted(const char* format, ...);
+
// Allocate length bytes for a C string with Dart_ScopeAllocate.
static char* ScopedCString(intptr_t length) {
char* result = NULL;
diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc
index 727b18f..914a5f8 100644
--- a/runtime/bin/process.cc
+++ b/runtime/bin/process.cc
@@ -164,13 +164,29 @@
result =
DartUtils::SetIntegerField(status_handle, "_errorCode", error_code);
ThrowIfError(result);
- Dart_Handle val = DartUtils::NewString(os_error_message != NULL
- ? os_error_message
- : "Cannot get error message");
+
+ const char* error_message = (os_error_message != NULL)
+ ? os_error_message
+ : "Failed to get error message";
+ Dart_Handle val = DartUtils::NewString(error_message);
if (Dart_IsError(val)) {
- // If conversion of the OS error message to a Dart string fails, fall back
- // on a stock message.
- val = DartUtils::NewString("OS error message was a not a utf8 string.");
+ // Try to clean the message from non-ASCII characters.
+ const intptr_t len = strlen(error_message);
+ char* ascii_message =
+ reinterpret_cast<char*>(Dart_ScopeAllocate(len + 1));
+ for (intptr_t i = 0; i < len; i++) {
+ if (static_cast<uint8_t>(error_message[i]) < 0x80) {
+ ascii_message[i] = error_message[i];
+ } else {
+ ascii_message[i] = '?';
+ }
+ }
+ ascii_message[len] = '\0';
+
+ val = DartUtils::NewStringFormatted(
+ "Failed to start %s. OS returned an error (code %d) which can't be "
+ "fully converted to Dart string (%s): %s",
+ path, error_code, Dart_GetError(val), ascii_message);
}
result = Dart_SetField(status_handle, DartUtils::NewString("_errorMessage"),
val);
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index dc8d500..7c81637 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -399,6 +399,8 @@
}
private:
+ static constexpr int kErrorBufferSize = 1024;
+
int CreatePipes() {
int result;
result = TEMP_FAILURE_RETRY(pipe2(exec_control_, O_CLOEXEC));
@@ -705,9 +707,8 @@
}
void SetChildOsErrorMessage() {
- const int kBufferSize = 1024;
- char* error_message = DartUtils::ScopedCString(kBufferSize);
- Utils::StrError(errno, error_message, kBufferSize);
+ char* error_message = DartUtils::ScopedCString(kErrorBufferSize);
+ Utils::StrError(errno, error_message, kErrorBufferSize);
*os_error_message_ = error_message;
}
@@ -715,9 +716,9 @@
// In the case of failure in the child process write the errno and
// the OS error message to the exec control pipe and exit.
int child_errno = errno;
- const int kBufferSize = 1024;
- char error_buf[kBufferSize];
- char* os_error_message = Utils::StrError(errno, error_buf, kBufferSize);
+ char error_buf[kErrorBufferSize];
+ char* os_error_message =
+ Utils::StrError(errno, error_buf, kErrorBufferSize);
int bytes_written = FDUtils::WriteToBlocking(exec_control_[1], &child_errno,
sizeof(child_errno));
if (bytes_written == sizeof(child_errno)) {
@@ -741,11 +742,10 @@
}
void ReadChildError() {
- const int kMaxMessageSize = 256;
- char* message = DartUtils::ScopedCString(kMaxMessageSize);
+ char* message = DartUtils::ScopedCString(kErrorBufferSize);
if (message != NULL) {
- FDUtils::ReadFromBlocking(exec_control_[0], message, kMaxMessageSize);
- message[kMaxMessageSize - 1] = '\0';
+ FDUtils::ReadFromBlocking(exec_control_[0], message, kErrorBufferSize);
+ message[kErrorBufferSize - 1] = '\0';
*os_error_message_ = message;
} else {
// Could not get error message. It will be NULL.
diff --git a/runtime/observatory/tests/service/causal_async_stack_presence_test.dart b/runtime/observatory/tests/service/causal_async_stack_presence_test.dart
index 3a90e4a..01331cd 100644
--- a/runtime/observatory/tests/service/causal_async_stack_presence_test.dart
+++ b/runtime/observatory/tests/service/causal_async_stack_presence_test.dart
@@ -11,8 +11,8 @@
import 'test_helper.dart';
const LINE_C = 19;
-const LINE_A = 24;
-const LINE_B = 30;
+const LINE_A = 25;
+const LINE_B = 31;
foobar() {
debugger();
@@ -20,6 +20,7 @@
}
helper() async {
+ await 0; // Yield. The rest will run async.
debugger();
print('helper'); // LINE_A.
foobar();
@@ -36,6 +37,7 @@
(Isolate isolate) async {
ServiceMap stack = await isolate.getStack();
// No causal frames because we are in a completely synchronous stack.
+ // Async function hasn't yielded yet.
expect(stack['asyncCausalFrames'], isNull);
},
resumeIsolate,
@@ -43,7 +45,7 @@
stoppedAtLine(LINE_A),
(Isolate isolate) async {
ServiceMap stack = await isolate.getStack();
- // Has causal frames (we are inside an async function)
+ // Async function has yielded once, so it's now running async.
expect(stack['asyncCausalFrames'], isNotNull);
},
resumeIsolate,
diff --git a/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart b/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart
index 4d3e448..9b605cb 100644
--- a/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart
+++ b/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart
@@ -39,7 +39,7 @@
(Isolate isolate) async {
ServiceMap stack = await isolate.getStack();
// No causal frames because we are in a completely synchronous stack.
- expect(stack['asyncCausalFrames'], isNotNull);
+ expect(stack['asyncCausalFrames'], isNull);
},
resumeIsolate,
hasStoppedAtBreakpoint,
diff --git a/runtime/observatory_2/tests/service_2/causal_async_stack_presence_test.dart b/runtime/observatory_2/tests/service_2/causal_async_stack_presence_test.dart
index f52f4a1..cd9ef6a 100644
--- a/runtime/observatory_2/tests/service_2/causal_async_stack_presence_test.dart
+++ b/runtime/observatory_2/tests/service_2/causal_async_stack_presence_test.dart
@@ -11,8 +11,8 @@
import 'test_helper.dart';
const LINE_C = 19;
-const LINE_A = 24;
-const LINE_B = 30;
+const LINE_A = 25;
+const LINE_B = 31;
foobar() {
debugger();
@@ -20,6 +20,7 @@
}
helper() async {
+ await 0; // Yield. The rest will run async.
debugger();
print('helper'); // LINE_A.
foobar();
diff --git a/runtime/observatory_2/tests/service_2/causal_async_star_stack_presence_test.dart b/runtime/observatory_2/tests/service_2/causal_async_star_stack_presence_test.dart
index 7fb385a..8acf40d 100644
--- a/runtime/observatory_2/tests/service_2/causal_async_star_stack_presence_test.dart
+++ b/runtime/observatory_2/tests/service_2/causal_async_star_stack_presence_test.dart
@@ -39,7 +39,7 @@
(Isolate isolate) async {
ServiceMap stack = await isolate.getStack();
// No causal frames because we are in a completely synchronous stack.
- expect(stack['asyncCausalFrames'], isNotNull);
+ expect(stack['asyncCausalFrames'], isNull);
},
resumeIsolate,
hasStoppedAtBreakpoint,
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index fdebc07..16deb64 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -40,7 +40,7 @@
}
// ----
-// Scenario: None of the async functions yieled before the throw:
+// Scenario: None of the async functions yielded before the throw:
// ----
Future<void> noYields() async {
await noYields2();
@@ -178,12 +178,22 @@
return Future.sync(throwAsync).whenComplete(() => 'nop');
}
+// ----
+// Scenario: Future.then:
+// ----
+
+Future futureThen() {
+ return Future.value(0).then((value) {
+ throwSync();
+ });
+}
+
// Helpers:
// We want lines that either start with a frame index or an async gap marker.
final _lineRE = RegExp(r'^(?:#(?<number>\d+)|<asynchronous suspension>)');
-void assertStack(List<String> expects, StackTrace stackTrace,
+Future<void> assertStack(List<String> expects, StackTrace stackTrace,
[String? debugInfoFilename]) async {
final original = await Stream.value(stackTrace.toString())
.transform(const LineSplitter())
@@ -253,7 +263,7 @@
await f();
Expect.fail('No exception thrown!');
} on String catch (e, s) {
- assertStack(expectedStack, s, debugInfoFilename);
+ return assertStack(expectedStack, s, debugInfoFilename);
}
}
@@ -267,7 +277,7 @@
await f().then((e) => Expect.fail('No exception thrown!'));
Expect.fail('No exception thrown!');
} on String catch (e, s) {
- assertStack(expectedStack, s, debugInfoFilename);
+ return assertStack(expectedStack, s, debugInfoFilename);
}
}
@@ -278,7 +288,7 @@
await f().catchError((e, s) {
stackTrace = s;
});
- assertStack(expectedStack, stackTrace, debugInfoFilename);
+ return assertStack(expectedStack, stackTrace, debugInfoFilename);
}
// ----
@@ -287,342 +297,262 @@
// For: --no-lazy-async-stacks
Future<void> doTestsNoCausalNoLazy([String? debugInfoFilename]) async {
- final allYieldExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'^#2 _RootZone.runUnary ',
- r'^#3 _FutureListener.handleValue ',
- r'^#4 Future._propagateToListeners.handleValueCallback ',
- r'^#5 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#7 _microtaskLoop ',
- r'^#8 _startMicrotaskLoop ',
- r'^#9 _runPendingImmediateCallback ',
- r'^#10 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(allYield, allYieldExpected, debugInfoFilename);
- await doTestAwaitThen(allYield, allYieldExpected, debugInfoFilename);
- await doTestAwaitCatchError(allYield, allYieldExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'^#2 _RootZone.runUnary ',
+ r'^#3 _FutureListener.handleValue ',
+ r'^#4 Future._propagateToListeners.handleValueCallback ',
+ r'^#5 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#7 _microtaskLoop ',
+ r'^#8 _startMicrotaskLoop ',
+ r'^#9 _runPendingImmediateCallback ',
+ r'^#10 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(allYield, expected, debugInfoFilename);
+ await doTestAwaitThen(allYield, expected, debugInfoFilename);
+ await doTestAwaitCatchError(allYield, expected, debugInfoFilename);
+ }
- final noYieldsExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
- r'^#2 noYields3 \(.*/utils.dart:53(:23)?\)$',
- r'^#3 noYields2 \(.*/utils.dart:50(:9)?\)$',
- r'^#4 noYields2 \(.*/utils.dart:49(:23)?\)$',
- r'^#5 noYields \(.*/utils.dart:46(:9)?\)$',
- r'^#6 noYields \(.*/utils.dart:45(:22)?\)$',
- ];
- await doTestAwait(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#7 doTestAwait ',
- r'^#8 doTestAwait ',
- r'^#9 doTestsNoCausalNoLazy ',
- r'^#10 _RootZone.runUnary ',
- r'^#11 _FutureListener.handleValue ',
- r'^#12 Future._propagateToListeners.handleValueCallback ',
- r'^#13 Future._propagateToListeners ',
- r'^#14 Future._completeWithValue ',
- r'^#15 _completeOnAsyncReturn ',
- r'^#16 doTestAwaitCatchError ',
- r'^#17 _RootZone.runUnary ',
- r'^#18 _FutureListener.handleValue ',
- r'^#19 Future._propagateToListeners.handleValueCallback ',
- r'^#20 Future._propagateToListeners ',
- r'^#21 Future._completeError ',
- r'^#22 _completeOnAsyncError ',
- r'^#23 allYield ',
- r'^#24 _asyncErrorWrapperHelper.errorCallback ',
- r'^#25 _RootZone.runBinary ',
- r'^#26 _FutureListener.handleError ',
- r'^#27 Future._propagateToListeners.handleError ',
- r'^#28 Future._propagateToListeners ',
- r'^#29 Future._completeError ',
- r'^#30 _completeOnAsyncError ',
- r'^#31 allYield2 ',
- r'^#32 _asyncErrorWrapperHelper.errorCallback ',
- r'^#33 _RootZone.runBinary ',
- r'^#34 _FutureListener.handleError ',
- r'^#35 Future._propagateToListeners.handleError ',
- r'^#36 Future._propagateToListeners ',
- r'^#37 Future._completeError ',
- r'^#38 _completeOnAsyncError ',
- r'^#39 allYield3 ',
- r'^#40 _RootZone.runUnary ',
- r'^#41 _FutureListener.handleValue ',
- r'^#42 Future._propagateToListeners.handleValueCallback ',
- r'^#43 Future._propagateToListeners ',
- r'^#44 Future._addListener.<anonymous closure> ',
- r'^#45 _microtaskLoop ',
- r'^#46 _startMicrotaskLoop ',
- r'^#47 _runPendingImmediateCallback ',
- r'^#48 _RawReceivePortImpl._handleMessage ',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#7 doTestAwaitThen ',
- r'^#8 doTestAwaitThen ',
- r'^#9 doTestsNoCausalNoLazy ',
- r'^#10 _RootZone.runUnary ',
- r'^#11 _FutureListener.handleValue ',
- r'^#12 Future._propagateToListeners.handleValueCallback ',
- r'^#13 Future._propagateToListeners ',
- r'^#14 Future._completeWithValue ',
- r'^#15 _completeOnAsyncReturn ',
- r'^#16 doTestAwait ',
- r'^#17 _asyncErrorWrapperHelper.errorCallback ',
- r'^#18 _RootZone.runBinary ',
- r'^#19 _FutureListener.handleError ',
- r'^#20 Future._propagateToListeners.handleError ',
- r'^#21 Future._propagateToListeners ',
- r'^#22 Future._completeError ',
- r'^#23 _completeOnAsyncError ',
- r'^#24 noYields ',
- r'^#25 _asyncErrorWrapperHelper.errorCallback ',
- r'^#26 _RootZone.runBinary ',
- r'^#27 _FutureListener.handleError ',
- r'^#28 Future._propagateToListeners.handleError ',
- r'^#29 Future._propagateToListeners ',
- r'^#30 Future._completeError ',
- r'^#31 _completeOnAsyncError ',
- r'^#32 noYields2 ',
- r'^#33 _asyncErrorWrapperHelper.errorCallback ',
- r'^#34 _RootZone.runBinary ',
- r'^#35 _FutureListener.handleError ',
- r'^#36 Future._propagateToListeners.handleError ',
- r'^#37 Future._propagateToListeners ',
- r'^#38 Future._completeError ',
- r'^#39 Future._asyncCompleteError.<anonymous closure> ',
- r'^#40 _microtaskLoop ',
- r'^#41 _startMicrotaskLoop ',
- r'^#42 _runPendingImmediateCallback ',
- r'^#43 _RawReceivePortImpl._handleMessage ',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#7 doTestAwaitCatchError ',
- r'^#8 doTestAwaitCatchError ',
- r'^#9 doTestsNoCausalNoLazy ',
- r'^#10 _RootZone.runUnary ',
- r'^#11 _FutureListener.handleValue ',
- r'^#12 Future._propagateToListeners.handleValueCallback ',
- r'^#13 Future._propagateToListeners ',
- r'^#14 Future._completeWithValue ',
- r'^#15 _completeOnAsyncReturn ',
- r'^#16 doTestAwaitThen ',
- r'^#17 _asyncErrorWrapperHelper.errorCallback ',
- r'^#18 _RootZone.runBinary ',
- r'^#19 _FutureListener.handleError ',
- r'^#20 Future._propagateToListeners.handleError ',
- r'^#21 Future._propagateToListeners ',
- r'^#22 Future._completeError ',
- r'^#23 _completeOnAsyncError ',
- r'^#24 noYields ',
- r'^#25 _asyncErrorWrapperHelper.errorCallback ',
- r'^#26 _RootZone.runBinary ',
- r'^#27 _FutureListener.handleError ',
- r'^#28 Future._propagateToListeners.handleError ',
- r'^#29 Future._propagateToListeners ',
- r'^#30 Future._completeError ',
- r'^#31 _completeOnAsyncError ',
- r'^#32 noYields2 ',
- r'^#33 _asyncErrorWrapperHelper.errorCallback ',
- r'^#34 _RootZone.runBinary ',
- r'^#35 _FutureListener.handleError ',
- r'^#36 Future._propagateToListeners.handleError ',
- r'^#37 Future._propagateToListeners ',
- r'^#38 Future._completeError ',
- r'^#39 Future._asyncCompleteError.<anonymous closure> ',
- r'^#40 _microtaskLoop ',
- r'^#41 _startMicrotaskLoop ',
- r'^#42 _runPendingImmediateCallback ',
- r'^#43 _RawReceivePortImpl._handleMessage ',
- ],
- debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
+ r'^#2 noYields3 \(.*/utils.dart:53(:23)?\)$',
+ r'^#3 noYields2 \(.*/utils.dart:50(:9)?\)$',
+ r'^#4 noYields2 \(.*/utils.dart:49(:23)?\)$',
+ r'^#5 noYields \(.*/utils.dart:46(:9)?\)$',
+ r'^#6 noYields \(.*/utils.dart:45(:22)?\)$',
+ ];
+ final postfix = const <String>[
+ r'^#9 doTestsNoCausalNoLazy ',
+ r'^#10 _RootZone.runUnary ',
+ r'^#11 _FutureListener.handleValue ',
+ r'^#12 Future._propagateToListeners.handleValueCallback ',
+ r'^#13 Future._propagateToListeners ',
+ r'^#14 Future._addListener.<anonymous closure> ',
+ r'^#15 _microtaskLoop ',
+ r'^#16 _startMicrotaskLoop ',
+ r'^#17 _runPendingImmediateCallback ',
+ r'^#18 _RawReceivePortImpl._handleMessage ',
+ ];
+ await 0; // Don't let the `await do..`s chain together.
+ await doTestAwait(
+ noYields,
+ expected +
+ const <String>[
+ r'^#7 doTestAwait ',
+ r'^#8 doTestAwait ',
+ ] +
+ postfix,
+ debugInfoFilename);
+ await 0; // Don't let the `await do..`s chain together.
+ await doTestAwaitThen(
+ noYields,
+ expected +
+ const <String>[
+ r'^#7 doTestAwaitThen ',
+ r'^#8 doTestAwaitThen ',
+ ] +
+ postfix,
+ debugInfoFilename);
+ await 0; // Don't let the `await do..`s chain together.
+ await doTestAwaitCatchError(
+ noYields,
+ expected +
+ const <String>[
+ r'^#7 doTestAwaitCatchError ',
+ r'^#8 doTestAwaitCatchError ',
+ ] +
+ postfix,
+ debugInfoFilename);
+ }
- final mixedYieldsExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(mixedYields, mixedYieldsExpected, debugInfoFilename);
- await doTestAwaitThen(mixedYields, mixedYieldsExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- mixedYields, mixedYieldsExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(mixedYields, expected, debugInfoFilename);
+ await doTestAwaitThen(mixedYields, expected, debugInfoFilename);
+ await doTestAwaitCatchError(mixedYields, expected, debugInfoFilename);
+ }
- final syncSuffixExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(syncSuffix, syncSuffixExpected, debugInfoFilename);
- await doTestAwaitThen(syncSuffix, syncSuffixExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- syncSuffix, syncSuffixExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(syncSuffix, expected, debugInfoFilename);
+ await doTestAwaitThen(syncSuffix, expected, debugInfoFilename);
+ await doTestAwaitCatchError(syncSuffix, expected, debugInfoFilename);
+ }
- final nonAsyncNoStackExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
- await doTestAwaitThen(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(nonAsyncNoStack, expected, debugInfoFilename);
+ await doTestAwaitThen(nonAsyncNoStack, expected, debugInfoFilename);
+ await doTestAwaitCatchError(nonAsyncNoStack, expected, debugInfoFilename);
+ }
- final asyncStarThrowSyncExpected = const <String>[
- r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
- r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
- r'^#2 _RootZone.runUnary \(.+\)$',
- r'^#3 _FutureListener.handleValue \(.+\)$',
- r'^#4 Future._propagateToListeners.handleValueCallback \(.+\)$',
- r'^#5 Future._propagateToListeners \(.+\)$',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> \(.+\)$',
- r'^#7 _microtaskLoop \(.+\)$',
- r'^#8 _startMicrotaskLoop \(.+\)$',
- r'^#9 _runPendingImmediateCallback \(.+\)$',
- r'^#10 _RawReceivePortImpl._handleMessage \(.+\)$',
- ];
- await doTestAwait(awaitEveryAsyncStarThrowSync, asyncStarThrowSyncExpected,
- debugInfoFilename);
- await doTestAwaitThen(awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected, debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
+ r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+ r'^#2 _RootZone.runUnary \(.+\)$',
+ r'^#3 _FutureListener.handleValue \(.+\)$',
+ r'^#4 Future._propagateToListeners.handleValueCallback \(.+\)$',
+ r'^#5 Future._propagateToListeners \(.+\)$',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> \(.+\)$',
+ r'^#7 _microtaskLoop \(.+\)$',
+ r'^#8 _startMicrotaskLoop \(.+\)$',
+ r'^#9 _runPendingImmediateCallback \(.+\)$',
+ r'^#10 _RawReceivePortImpl._handleMessage \(.+\)$',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowSync, expected, debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowSync, expected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowSync, expected, debugInfoFilename);
+ }
- final asyncStarThrowAsyncExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(awaitEveryAsyncStarThrowAsync, asyncStarThrowAsyncExpected,
- debugInfoFilename);
- await doTestAwaitThen(awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected, debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowAsync, expected, debugInfoFilename);
+ }
- final listenAsyncStartExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitThen(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(listenAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitThen(
+ listenAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ listenAsyncStarThrowAsync, expected, debugInfoFilename);
+ }
- final customErrorZoneExpected = const <String>[
- r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'#2 _rootRunUnary ',
- r'#3 _CustomZone.runUnary ',
- r'#4 _FutureListener.handleValue ',
- r'#5 Future._propagateToListeners.handleValueCallback ',
- r'#6 Future._propagateToListeners ',
- r'#7 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'#8 _rootRun ',
- r'#9 _CustomZone.run ',
- r'#10 _CustomZone.runGuarded ',
- r'#11 _CustomZone.bindCallbackGuarded.<anonymous closure> ',
- r'#12 _microtaskLoop ',
- r'#13 _startMicrotaskLoop ',
- r'#14 _runPendingImmediateCallback ',
- r'#15 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitThen(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'#2 _rootRunUnary ',
+ r'#3 _CustomZone.runUnary ',
+ r'#4 _FutureListener.handleValue ',
+ r'#5 Future._propagateToListeners.handleValueCallback ',
+ r'#6 Future._propagateToListeners ',
+ r'#7 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'#8 _rootRun ',
+ r'#9 _CustomZone.run ',
+ r'#10 _CustomZone.runGuarded ',
+ r'#11 _CustomZone.bindCallbackGuarded.<anonymous closure> ',
+ r'#12 _microtaskLoop ',
+ r'#13 _startMicrotaskLoop ',
+ r'#14 _runPendingImmediateCallback ',
+ r'#15 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(customErrorZone, expected, debugInfoFilename);
+ await doTestAwaitThen(customErrorZone, expected, debugInfoFilename);
+ await doTestAwaitCatchError(customErrorZone, expected, debugInfoFilename);
+ }
- final awaitTimeoutExpected = const <String>[
- r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
- await doTestAwaitThen(awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(awaitTimeout, expected, debugInfoFilename);
+ await doTestAwaitThen(awaitTimeout, expected, debugInfoFilename);
+ await doTestAwaitCatchError(awaitTimeout, expected, debugInfoFilename);
+ }
- final awaitWaitExpected = const <String>[
- r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(awaitWait, awaitWaitExpected, debugInfoFilename);
- await doTestAwaitThen(awaitWait, awaitWaitExpected, debugInfoFilename);
- await doTestAwaitCatchError(awaitWait, awaitWaitExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(awaitWait, expected, debugInfoFilename);
+ await doTestAwaitThen(awaitWait, expected, debugInfoFilename);
+ await doTestAwaitCatchError(awaitWait, expected, debugInfoFilename);
+ }
{
final expected = const <String>[
@@ -642,333 +572,501 @@
await doTestAwaitCatchError(
futureSyncWhenComplete, expected, debugInfoFilename);
}
+
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 futureThen.<anonymous closure> \(.*/utils.dart:187(:5)?\)$',
+ r'^#2 _RootZone.runUnary ',
+ r'^#3 _FutureListener.handleValue ',
+ r'^#4 Future._propagateToListeners.handleValueCallback ',
+ r'^#5 Future._propagateToListeners ',
+ r'^#6 Future._completeWithValue ',
+ r'^#7 Future._asyncCompleteWithValue.<anonymous closure> ',
+ r'^#8 _microtaskLoop ',
+ r'^#9 _startMicrotaskLoop ',
+ r'^#10 _runPendingImmediateCallback ',
+ r'^#11 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(futureThen, expected, debugInfoFilename);
+ await doTestAwaitThen(futureThen, expected, debugInfoFilename);
+ await doTestAwaitCatchError(futureThen, expected, debugInfoFilename);
+ }
}
// For: --lazy-async-stacks
Future<void> doTestsLazy([String? debugInfoFilename]) async {
- final allYieldExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#3 allYield \(.*/utils.dart:29(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- allYield,
- allYieldExpected +
- const <String>[
- r'^#4 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- allYield,
- allYieldExpected +
- const <String>[
- r'^#4 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(allYield, allYieldExpected, debugInfoFilename);
+ // allYield
+ {
+ final allYieldExpected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#3 allYield \(.*/utils.dart:29(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ allYield,
+ allYieldExpected +
+ const <String>[
+ r'^#4 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ allYield,
+ allYieldExpected +
+ const <String>[
+ r'^#4 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ allYield,
+ allYieldExpected +
+ const <String>[
+ r'^#4 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final noYieldsExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
- r'^#2 noYields2 \(.*/utils.dart:50(:9)?\)$',
- r'^#3 noYields \(.*/utils.dart:46(:9)?\)$',
- ];
- await doTestAwait(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#4 doTestAwait ',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#4 doTestAwaitThen ',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#4 doTestAwaitCatchError ',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
+ // noYields
+ {
+ final noYieldsExpected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
+ r'^#2 noYields2 \(.*/utils.dart:50(:9)?\)$',
+ r'^#3 noYields \(.*/utils.dart:46(:9)?\)$',
+ ];
+ await doTestAwait(
+ noYields,
+ noYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwait ',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ noYields,
+ noYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwaitThen ',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ noYields,
+ noYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwaitCatchError ',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final mixedYieldsExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 mixedYields3 \(.*/utils.dart:70(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 mixedYields2 \(.*/utils.dart:66(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#3 mixedYields \(.*/utils.dart:61(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- mixedYields,
- mixedYieldsExpected +
- const <String>[
- r'^#4 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- mixedYields,
- mixedYieldsExpected +
- const <String>[
- r'^#4 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- mixedYields, mixedYieldsExpected, debugInfoFilename);
+ // mixedYields
+ {
+ final mixedYieldsExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 mixedYields3 \(.*/utils.dart:70(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 mixedYields2 \(.*/utils.dart:66(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#3 mixedYields \(.*/utils.dart:61(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ mixedYields,
+ mixedYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ mixedYields,
+ mixedYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ mixedYields,
+ mixedYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final syncSuffixExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 syncSuffix2 \(.*/utils.dart:82(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 syncSuffix \(.*/utils.dart:77(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- syncSuffix,
- syncSuffixExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- syncSuffix,
- syncSuffixExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- syncSuffix, syncSuffixExpected, debugInfoFilename);
+ // syncSuffix
+ {
+ final syncSuffixExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 syncSuffix2 \(.*/utils.dart:82(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 syncSuffix \(.*/utils.dart:77(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ syncSuffix,
+ syncSuffixExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ syncSuffix,
+ syncSuffixExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ syncSuffix,
+ syncSuffixExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final nonAsyncNoStackExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 nonAsyncNoStack2 \(.*/utils.dart:97(:36)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
- r'^<asynchronous suspension>$',
- r'^#3 nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- nonAsyncNoStack,
- nonAsyncNoStackExpected +
- const <String>[
- r'^#4 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- nonAsyncNoStack,
- nonAsyncNoStackExpected +
- const <String>[
- r'^#4 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+ // nonAsyncNoStack
+ {
+ final nonAsyncNoStackExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 nonAsyncNoStack2 \(.*/utils.dart:97(:36)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#3 nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ nonAsyncNoStack,
+ nonAsyncNoStackExpected +
+ const <String>[
+ r'^#4 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ nonAsyncNoStack,
+ nonAsyncNoStackExpected +
+ const <String>[
+ r'^#4 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ nonAsyncNoStack,
+ nonAsyncNoStackExpected +
+ const <String>[
+ r'^#4 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final asyncStarThrowSyncExpected = const <String>[
- r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
- r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 awaitEveryAsyncStarThrowSync \(.+/utils.dart:104(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected, debugInfoFilename);
+ // awaitEveryAsyncStarThrowSync
+ {
+ final asyncStarThrowSyncExpected = const <String>[
+ r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
+ r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitEveryAsyncStarThrowSync \(.+/utils.dart:104(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowSync,
+ asyncStarThrowSyncExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowSync,
+ asyncStarThrowSyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowSync,
+ asyncStarThrowSyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final asyncStarThrowAsyncExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 awaitEveryAsyncStarThrowAsync \(.+/utils.dart:117(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected, debugInfoFilename);
+ // awaitEveryAsyncStarThrowAsync
+ {
+ final asyncStarThrowAsyncExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitEveryAsyncStarThrowAsync \(.+/utils.dart:117(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowAsync,
+ asyncStarThrowAsyncExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowAsync,
+ asyncStarThrowAsyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowAsync,
+ asyncStarThrowAsyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final listenAsyncStartExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 listenAsyncStarThrowAsync.<anonymous closure> \(.+/utils.dart(:0)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitThen(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ // listenAsyncStarThrowAsync
+ {
+ final listenAsyncStartExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 listenAsyncStarThrowAsync.<anonymous closure> \(.+/utils.dart(:0)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ await doTestAwaitThen(
+ listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ }
- final customErrorZoneExpected = const <String>[
- r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'<asynchronous suspension>$',
- r'#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
- r'<asynchronous suspension>$',
- r'#3 allYield \(.*/utils.dart:29(:3)?\)$',
- r'<asynchronous suspension>$',
- r'#4 customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
- r'<asynchronous suspension>$',
- ];
- await doTestAwait(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitThen(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ // customErrorZone
+ {
+ final customErrorZoneExpected = const <String>[
+ r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'<asynchronous suspension>$',
+ r'#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
+ r'<asynchronous suspension>$',
+ r'#3 allYield \(.*/utils.dart:29(:3)?\)$',
+ r'<asynchronous suspension>$',
+ r'#4 customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
+ r'<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ await doTestAwaitThen(
+ customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ }
- final awaitTimeoutExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 Future.timeout.<anonymous closure> \(dart:async/future_impl.dart',
- r'^<asynchronous suspension>$',
- r'^#2 awaitTimeout ',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitTimeout,
- awaitTimeoutExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitTimeout,
- awaitTimeoutExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
+ // awaitTimeout
+ {
+ final awaitTimeoutExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 Future.timeout.<anonymous closure> \(dart:async/future_impl.dart',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitTimeout ',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitTimeout,
+ awaitTimeoutExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitTimeout,
+ awaitTimeoutExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitTimeout,
+ awaitTimeoutExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
- final awaitWaitExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 Future.wait.<anonymous closure> \(dart:async/future.dart',
- r'^<asynchronous suspension>$',
- r'^#2 awaitWait ',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitWait,
- awaitWaitExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitWait,
- awaitWaitExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(awaitWait, awaitWaitExpected, debugInfoFilename);
+ // awaitWait
+ {
+ final awaitWaitExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 Future.wait.<anonymous closure> \(dart:async/future.dart',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitWait ',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitWait,
+ awaitWaitExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitWait,
+ awaitWaitExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitWait,
+ awaitWaitExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+ // futureSyncWhenComplete
{
final expected = const <String>[
r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
@@ -990,11 +1088,70 @@
futureSyncWhenComplete,
expected +
const <String>[
- r'^#1 doTestAwaitThen.<anonymous closure> ',
+ r'^#1 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#2 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#3 main ',
r'^<asynchronous suspension>$',
],
debugInfoFilename);
await doTestAwaitCatchError(
- futureSyncWhenComplete, expected, debugInfoFilename);
+ futureSyncWhenComplete,
+ expected +
+ const <String>[
+ r'^#1 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#2 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#3 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // futureThen
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 futureThen.<anonymous closure> ',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ futureThen,
+ expected +
+ const <String>[
+ r'^#2 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#3 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#4 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ futureThen,
+ expected +
+ const <String>[
+ r'^#2 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#3 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#4 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ futureThen,
+ expected +
+ const <String>[
+ r'^#2 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#3 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#4 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
}
}
diff --git a/runtime/tests/vm/dart_2/causal_stacks/utils.dart b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
index 192984f..12083be 100644
--- a/runtime/tests/vm/dart_2/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart_2/causal_stacks/utils.dart
@@ -178,12 +178,22 @@
return Future.sync(throwAsync).whenComplete(() => 'nop');
}
+// ----
+// Scenario: Future.then:
+// ----
+
+Future futureThen() {
+ return Future.value(0).then((value) {
+ throwSync();
+ });
+}
+
// Helpers:
// We want lines that either start with a frame index or an async gap marker.
final _lineRE = RegExp(r'^(?:#(?<number>\d+)|<asynchronous suspension>)');
-void assertStack(List<String> expects, StackTrace stackTrace,
+Future<void> assertStack(List<String> expects, StackTrace stackTrace,
[String debugInfoFilename]) async {
final original = await Stream.value(stackTrace.toString())
.transform(const LineSplitter())
@@ -253,7 +263,7 @@
await f();
Expect.fail('No exception thrown!');
} on String catch (e, s) {
- assertStack(expectedStack, s, debugInfoFilename);
+ return assertStack(expectedStack, s, debugInfoFilename);
}
}
@@ -267,7 +277,7 @@
await f().then((e) => Expect.fail('No exception thrown!'));
Expect.fail('No exception thrown!');
} on String catch (e, s) {
- assertStack(expectedStack, s, debugInfoFilename);
+ return assertStack(expectedStack, s, debugInfoFilename);
}
}
@@ -278,7 +288,7 @@
await f().catchError((e, s) {
stackTrace = s;
});
- assertStack(expectedStack, stackTrace, debugInfoFilename);
+ return assertStack(expectedStack, stackTrace, debugInfoFilename);
}
// ----
@@ -287,342 +297,262 @@
// For: --no-lazy-async-stacks
Future<void> doTestsNoCausalNoLazy([String debugInfoFilename]) async {
- final allYieldExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'^#2 _RootZone.runUnary ',
- r'^#3 _FutureListener.handleValue ',
- r'^#4 Future._propagateToListeners.handleValueCallback ',
- r'^#5 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#7 _microtaskLoop ',
- r'^#8 _startMicrotaskLoop ',
- r'^#9 _runPendingImmediateCallback ',
- r'^#10 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(allYield, allYieldExpected, debugInfoFilename);
- await doTestAwaitThen(allYield, allYieldExpected, debugInfoFilename);
- await doTestAwaitCatchError(allYield, allYieldExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'^#2 _RootZone.runUnary ',
+ r'^#3 _FutureListener.handleValue ',
+ r'^#4 Future._propagateToListeners.handleValueCallback ',
+ r'^#5 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#7 _microtaskLoop ',
+ r'^#8 _startMicrotaskLoop ',
+ r'^#9 _runPendingImmediateCallback ',
+ r'^#10 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(allYield, expected, debugInfoFilename);
+ await doTestAwaitThen(allYield, expected, debugInfoFilename);
+ await doTestAwaitCatchError(allYield, expected, debugInfoFilename);
+ }
- final noYieldsExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
- r'^#2 noYields3 \(.*/utils.dart:53(:23)?\)$',
- r'^#3 noYields2 \(.*/utils.dart:50(:9)?\)$',
- r'^#4 noYields2 \(.*/utils.dart:49(:23)?\)$',
- r'^#5 noYields \(.*/utils.dart:46(:9)?\)$',
- r'^#6 noYields \(.*/utils.dart:45(:22)?\)$',
- ];
- await doTestAwait(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#7 doTestAwait ',
- r'^#8 doTestAwait ',
- r'^#9 doTestsNoCausalNoLazy ',
- r'^#10 _RootZone.runUnary ',
- r'^#11 _FutureListener.handleValue ',
- r'^#12 Future._propagateToListeners.handleValueCallback ',
- r'^#13 Future._propagateToListeners ',
- r'^#14 Future._completeWithValue ',
- r'^#15 _completeOnAsyncReturn ',
- r'^#16 doTestAwaitCatchError ',
- r'^#17 _RootZone.runUnary ',
- r'^#18 _FutureListener.handleValue ',
- r'^#19 Future._propagateToListeners.handleValueCallback ',
- r'^#20 Future._propagateToListeners ',
- r'^#21 Future._completeError ',
- r'^#22 _completeOnAsyncError ',
- r'^#23 allYield ',
- r'^#24 _asyncErrorWrapperHelper.errorCallback ',
- r'^#25 _RootZone.runBinary ',
- r'^#26 _FutureListener.handleError ',
- r'^#27 Future._propagateToListeners.handleError ',
- r'^#28 Future._propagateToListeners ',
- r'^#29 Future._completeError ',
- r'^#30 _completeOnAsyncError ',
- r'^#31 allYield2 ',
- r'^#32 _asyncErrorWrapperHelper.errorCallback ',
- r'^#33 _RootZone.runBinary ',
- r'^#34 _FutureListener.handleError ',
- r'^#35 Future._propagateToListeners.handleError ',
- r'^#36 Future._propagateToListeners ',
- r'^#37 Future._completeError ',
- r'^#38 _completeOnAsyncError ',
- r'^#39 allYield3 ',
- r'^#40 _RootZone.runUnary ',
- r'^#41 _FutureListener.handleValue ',
- r'^#42 Future._propagateToListeners.handleValueCallback ',
- r'^#43 Future._propagateToListeners ',
- r'^#44 Future._addListener.<anonymous closure> ',
- r'^#45 _microtaskLoop ',
- r'^#46 _startMicrotaskLoop ',
- r'^#47 _runPendingImmediateCallback ',
- r'^#48 _RawReceivePortImpl._handleMessage ',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#7 doTestAwaitThen ',
- r'^#8 doTestAwaitThen ',
- r'^#9 doTestsNoCausalNoLazy ',
- r'^#10 _RootZone.runUnary ',
- r'^#11 _FutureListener.handleValue ',
- r'^#12 Future._propagateToListeners.handleValueCallback ',
- r'^#13 Future._propagateToListeners ',
- r'^#14 Future._completeWithValue ',
- r'^#15 _completeOnAsyncReturn ',
- r'^#16 doTestAwait ',
- r'^#17 _asyncErrorWrapperHelper.errorCallback ',
- r'^#18 _RootZone.runBinary ',
- r'^#19 _FutureListener.handleError ',
- r'^#20 Future._propagateToListeners.handleError ',
- r'^#21 Future._propagateToListeners ',
- r'^#22 Future._completeError ',
- r'^#23 _completeOnAsyncError ',
- r'^#24 noYields ',
- r'^#25 _asyncErrorWrapperHelper.errorCallback ',
- r'^#26 _RootZone.runBinary ',
- r'^#27 _FutureListener.handleError ',
- r'^#28 Future._propagateToListeners.handleError ',
- r'^#29 Future._propagateToListeners ',
- r'^#30 Future._completeError ',
- r'^#31 _completeOnAsyncError ',
- r'^#32 noYields2 ',
- r'^#33 _asyncErrorWrapperHelper.errorCallback ',
- r'^#34 _RootZone.runBinary ',
- r'^#35 _FutureListener.handleError ',
- r'^#36 Future._propagateToListeners.handleError ',
- r'^#37 Future._propagateToListeners ',
- r'^#38 Future._completeError ',
- r'^#39 Future._asyncCompleteError.<anonymous closure> ',
- r'^#40 _microtaskLoop ',
- r'^#41 _startMicrotaskLoop ',
- r'^#42 _runPendingImmediateCallback ',
- r'^#43 _RawReceivePortImpl._handleMessage ',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#7 doTestAwaitCatchError ',
- r'^#8 doTestAwaitCatchError ',
- r'^#9 doTestsNoCausalNoLazy ',
- r'^#10 _RootZone.runUnary ',
- r'^#11 _FutureListener.handleValue ',
- r'^#12 Future._propagateToListeners.handleValueCallback ',
- r'^#13 Future._propagateToListeners ',
- r'^#14 Future._completeWithValue ',
- r'^#15 _completeOnAsyncReturn ',
- r'^#16 doTestAwaitThen ',
- r'^#17 _asyncErrorWrapperHelper.errorCallback ',
- r'^#18 _RootZone.runBinary ',
- r'^#19 _FutureListener.handleError ',
- r'^#20 Future._propagateToListeners.handleError ',
- r'^#21 Future._propagateToListeners ',
- r'^#22 Future._completeError ',
- r'^#23 _completeOnAsyncError ',
- r'^#24 noYields ',
- r'^#25 _asyncErrorWrapperHelper.errorCallback ',
- r'^#26 _RootZone.runBinary ',
- r'^#27 _FutureListener.handleError ',
- r'^#28 Future._propagateToListeners.handleError ',
- r'^#29 Future._propagateToListeners ',
- r'^#30 Future._completeError ',
- r'^#31 _completeOnAsyncError ',
- r'^#32 noYields2 ',
- r'^#33 _asyncErrorWrapperHelper.errorCallback ',
- r'^#34 _RootZone.runBinary ',
- r'^#35 _FutureListener.handleError ',
- r'^#36 Future._propagateToListeners.handleError ',
- r'^#37 Future._propagateToListeners ',
- r'^#38 Future._completeError ',
- r'^#39 Future._asyncCompleteError.<anonymous closure> ',
- r'^#40 _microtaskLoop ',
- r'^#41 _startMicrotaskLoop ',
- r'^#42 _runPendingImmediateCallback ',
- r'^#43 _RawReceivePortImpl._handleMessage ',
- ],
- debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
+ r'^#2 noYields3 \(.*/utils.dart:53(:23)?\)$',
+ r'^#3 noYields2 \(.*/utils.dart:50(:9)?\)$',
+ r'^#4 noYields2 \(.*/utils.dart:49(:23)?\)$',
+ r'^#5 noYields \(.*/utils.dart:46(:9)?\)$',
+ r'^#6 noYields \(.*/utils.dart:45(:22)?\)$',
+ ];
+ final postfix = const <String>[
+ r'^#9 doTestsNoCausalNoLazy ',
+ r'^#10 _RootZone.runUnary ',
+ r'^#11 _FutureListener.handleValue ',
+ r'^#12 Future._propagateToListeners.handleValueCallback ',
+ r'^#13 Future._propagateToListeners ',
+ r'^#14 Future._addListener.<anonymous closure> ',
+ r'^#15 _microtaskLoop ',
+ r'^#16 _startMicrotaskLoop ',
+ r'^#17 _runPendingImmediateCallback ',
+ r'^#18 _RawReceivePortImpl._handleMessage ',
+ ];
+ await 0; // Don't let the `await do..`s chain together.
+ await doTestAwait(
+ noYields,
+ expected +
+ const <String>[
+ r'^#7 doTestAwait ',
+ r'^#8 doTestAwait ',
+ ] +
+ postfix,
+ debugInfoFilename);
+ await 0; // Don't let the `await do..`s chain together.
+ await doTestAwaitThen(
+ noYields,
+ expected +
+ const <String>[
+ r'^#7 doTestAwaitThen ',
+ r'^#8 doTestAwaitThen ',
+ ] +
+ postfix,
+ debugInfoFilename);
+ await 0; // Don't let the `await do..`s chain together.
+ await doTestAwaitCatchError(
+ noYields,
+ expected +
+ const <String>[
+ r'^#7 doTestAwaitCatchError ',
+ r'^#8 doTestAwaitCatchError ',
+ ] +
+ postfix,
+ debugInfoFilename);
+ }
- final mixedYieldsExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(mixedYields, mixedYieldsExpected, debugInfoFilename);
- await doTestAwaitThen(mixedYields, mixedYieldsExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- mixedYields, mixedYieldsExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(mixedYields, expected, debugInfoFilename);
+ await doTestAwaitThen(mixedYields, expected, debugInfoFilename);
+ await doTestAwaitCatchError(mixedYields, expected, debugInfoFilename);
+ }
- final syncSuffixExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(syncSuffix, syncSuffixExpected, debugInfoFilename);
- await doTestAwaitThen(syncSuffix, syncSuffixExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- syncSuffix, syncSuffixExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(syncSuffix, expected, debugInfoFilename);
+ await doTestAwaitThen(syncSuffix, expected, debugInfoFilename);
+ await doTestAwaitCatchError(syncSuffix, expected, debugInfoFilename);
+ }
- final nonAsyncNoStackExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
- await doTestAwaitThen(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(nonAsyncNoStack, expected, debugInfoFilename);
+ await doTestAwaitThen(nonAsyncNoStack, expected, debugInfoFilename);
+ await doTestAwaitCatchError(nonAsyncNoStack, expected, debugInfoFilename);
+ }
- final asyncStarThrowSyncExpected = const <String>[
- r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
- r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
- r'^#2 _RootZone.runUnary \(.+\)$',
- r'^#3 _FutureListener.handleValue \(.+\)$',
- r'^#4 Future._propagateToListeners.handleValueCallback \(.+\)$',
- r'^#5 Future._propagateToListeners \(.+\)$',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> \(.+\)$',
- r'^#7 _microtaskLoop \(.+\)$',
- r'^#8 _startMicrotaskLoop \(.+\)$',
- r'^#9 _runPendingImmediateCallback \(.+\)$',
- r'^#10 _RawReceivePortImpl._handleMessage \(.+\)$',
- ];
- await doTestAwait(awaitEveryAsyncStarThrowSync, asyncStarThrowSyncExpected,
- debugInfoFilename);
- await doTestAwaitThen(awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected, debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
+ r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+ r'^#2 _RootZone.runUnary \(.+\)$',
+ r'^#3 _FutureListener.handleValue \(.+\)$',
+ r'^#4 Future._propagateToListeners.handleValueCallback \(.+\)$',
+ r'^#5 Future._propagateToListeners \(.+\)$',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#6 Future.(_addListener|_prependListeners).<anonymous closure> \(.+\)$',
+ r'^#7 _microtaskLoop \(.+\)$',
+ r'^#8 _startMicrotaskLoop \(.+\)$',
+ r'^#9 _runPendingImmediateCallback \(.+\)$',
+ r'^#10 _RawReceivePortImpl._handleMessage \(.+\)$',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowSync, expected, debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowSync, expected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowSync, expected, debugInfoFilename);
+ }
- final asyncStarThrowAsyncExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(awaitEveryAsyncStarThrowAsync, asyncStarThrowAsyncExpected,
- debugInfoFilename);
- await doTestAwaitThen(awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected, debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowAsync, expected, debugInfoFilename);
+ }
- final listenAsyncStartExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- // TODO(dart-vm): Figure out why this is inconsistent:
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitThen(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ // TODO(dart-vm): Figure out why this is inconsistent:
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(listenAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitThen(
+ listenAsyncStarThrowAsync, expected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ listenAsyncStarThrowAsync, expected, debugInfoFilename);
+ }
- final customErrorZoneExpected = const <String>[
- r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'#2 _rootRunUnary ',
- r'#3 _CustomZone.runUnary ',
- r'#4 _FutureListener.handleValue ',
- r'#5 Future._propagateToListeners.handleValueCallback ',
- r'#6 Future._propagateToListeners ',
- r'#7 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'#8 _rootRun ',
- r'#9 _CustomZone.run ',
- r'#10 _CustomZone.runGuarded ',
- r'#11 _CustomZone.bindCallbackGuarded.<anonymous closure> ',
- r'#12 _microtaskLoop ',
- r'#13 _startMicrotaskLoop ',
- r'#14 _runPendingImmediateCallback ',
- r'#15 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitThen(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'#2 _rootRunUnary ',
+ r'#3 _CustomZone.runUnary ',
+ r'#4 _FutureListener.handleValue ',
+ r'#5 Future._propagateToListeners.handleValueCallback ',
+ r'#6 Future._propagateToListeners ',
+ r'#7 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'#8 _rootRun ',
+ r'#9 _CustomZone.run ',
+ r'#10 _CustomZone.runGuarded ',
+ r'#11 _CustomZone.bindCallbackGuarded.<anonymous closure> ',
+ r'#12 _microtaskLoop ',
+ r'#13 _startMicrotaskLoop ',
+ r'#14 _runPendingImmediateCallback ',
+ r'#15 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(customErrorZone, expected, debugInfoFilename);
+ await doTestAwaitThen(customErrorZone, expected, debugInfoFilename);
+ await doTestAwaitCatchError(customErrorZone, expected, debugInfoFilename);
+ }
- final awaitTimeoutExpected = const <String>[
- r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
- await doTestAwaitThen(awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(awaitTimeout, expected, debugInfoFilename);
+ await doTestAwaitThen(awaitTimeout, expected, debugInfoFilename);
+ await doTestAwaitCatchError(awaitTimeout, expected, debugInfoFilename);
+ }
- final awaitWaitExpected = const <String>[
- r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^#1 _RootZone.runUnary ',
- r'^#2 _FutureListener.handleValue ',
- r'^#3 Future._propagateToListeners.handleValueCallback ',
- r'^#4 Future._propagateToListeners ',
- r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
- r'^#6 _microtaskLoop ',
- r'^#7 _startMicrotaskLoop ',
- r'^#8 _runPendingImmediateCallback ',
- r'^#9 _RawReceivePortImpl._handleMessage ',
- ];
- await doTestAwait(awaitWait, awaitWaitExpected, debugInfoFilename);
- await doTestAwaitThen(awaitWait, awaitWaitExpected, debugInfoFilename);
- await doTestAwaitCatchError(awaitWait, awaitWaitExpected, debugInfoFilename);
+ {
+ final expected = const <String>[
+ r'#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^#1 _RootZone.runUnary ',
+ r'^#2 _FutureListener.handleValue ',
+ r'^#3 Future._propagateToListeners.handleValueCallback ',
+ r'^#4 Future._propagateToListeners ',
+ r'^#5 Future.(_addListener|_prependListeners).<anonymous closure> ',
+ r'^#6 _microtaskLoop ',
+ r'^#7 _startMicrotaskLoop ',
+ r'^#8 _runPendingImmediateCallback ',
+ r'^#9 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(awaitWait, expected, debugInfoFilename);
+ await doTestAwaitThen(awaitWait, expected, debugInfoFilename);
+ await doTestAwaitCatchError(awaitWait, expected, debugInfoFilename);
+ }
{
final expected = const <String>[
@@ -642,337 +572,505 @@
await doTestAwaitCatchError(
futureSyncWhenComplete, expected, debugInfoFilename);
}
+
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 futureThen.<anonymous closure> \(.*/utils.dart:187(:5)?\)$',
+ r'^#2 _RootZone.runUnary ',
+ r'^#3 _FutureListener.handleValue ',
+ r'^#4 Future._propagateToListeners.handleValueCallback ',
+ r'^#5 Future._propagateToListeners ',
+ r'^#6 Future._completeWithValue ',
+ r'^#7 Future._asyncCompleteWithValue.<anonymous closure> ',
+ r'^#8 _microtaskLoop ',
+ r'^#9 _startMicrotaskLoop ',
+ r'^#10 _runPendingImmediateCallback ',
+ r'^#11 _RawReceivePortImpl._handleMessage ',
+ ];
+ await doTestAwait(futureThen, expected, debugInfoFilename);
+ await doTestAwaitThen(futureThen, expected, debugInfoFilename);
+ await doTestAwaitCatchError(futureThen, expected, debugInfoFilename);
+ }
}
// For: --lazy-async-stacks
Future<void> doTestsLazy([String debugInfoFilename]) async {
- final allYieldExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#3 allYield \(.*/utils.dart:29(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- allYield,
- allYieldExpected +
- const <String>[
- r'^#4 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- allYield,
- allYieldExpected +
- const <String>[
- r'^#4 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(allYield, allYieldExpected, debugInfoFilename);
-
- final noYieldsExpected = const <String>[
- r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
- r'^#2 noYields2 \(.*/utils.dart:50(:9)?\)$',
- r'^#3 noYields \(.*/utils.dart:46(:9)?\)$',
- ];
- await doTestAwait(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#4 doTestAwait ',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#4 doTestAwaitThen ',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- noYields,
- noYieldsExpected +
- const <String>[
- r'^#4 doTestAwaitCatchError ',
- r'^#5 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#6 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
-
- final mixedYieldsExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 mixedYields2 \(.*/utils.dart:66(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 mixedYields \(.*/utils.dart:61(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- mixedYields,
- mixedYieldsExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- mixedYields,
- mixedYieldsExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- mixedYields, mixedYieldsExpected, debugInfoFilename);
-
- final syncSuffixExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 syncSuffix2 \(.*/utils.dart:82(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 syncSuffix \(.*/utils.dart:77(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- syncSuffix,
- syncSuffixExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- syncSuffix,
- syncSuffixExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- syncSuffix, syncSuffixExpected, debugInfoFilename);
-
- final nonAsyncNoStackExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- nonAsyncNoStack,
- nonAsyncNoStackExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- nonAsyncNoStack,
- nonAsyncNoStackExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- nonAsyncNoStack, nonAsyncNoStackExpected, debugInfoFilename);
-
- final asyncStarThrowSyncExpected = const <String>[
- r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
- r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 awaitEveryAsyncStarThrowSync \(.+/utils.dart:104(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowSync,
- asyncStarThrowSyncExpected, debugInfoFilename);
-
- final asyncStarThrowAsyncExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 awaitEveryAsyncStarThrowAsync \(.+/utils.dart:117(:3)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(awaitEveryAsyncStarThrowAsync,
- asyncStarThrowAsyncExpected, debugInfoFilename);
-
- final listenAsyncStartExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
- r'^<asynchronous suspension>$',
- r'^#2 listenAsyncStarThrowAsync.<anonymous closure> \(.+/utils.dart(:0)?\)$',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitThen(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
-
- final customErrorZoneExpected = const <String>[
- r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
- r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
- r'<asynchronous suspension>$',
- r'#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
- r'<asynchronous suspension>$',
- r'#3 allYield \(.*/utils.dart:29(:3)?\)$',
- r'<asynchronous suspension>$',
- r'#4 customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
- r'<asynchronous suspension>$',
- ];
- await doTestAwait(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitThen(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
- await doTestAwaitCatchError(
- customErrorZone, customErrorZoneExpected, debugInfoFilename);
-
- final awaitTimeoutExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 Future.timeout.<anonymous closure> \(dart:async/future_impl.dart',
- r'^<asynchronous suspension>$',
- r'^#2 awaitTimeout ',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitTimeout,
- awaitTimeoutExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitTimeout,
- awaitTimeoutExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(
- awaitTimeout, awaitTimeoutExpected, debugInfoFilename);
-
- final awaitWaitExpected = const <String>[
- r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#1 Future.wait.<anonymous closure> \(dart:async/future.dart',
- r'^<asynchronous suspension>$',
- r'^#2 awaitWait ',
- r'^<asynchronous suspension>$',
- ];
- await doTestAwait(
- awaitWait,
- awaitWaitExpected +
- const <String>[
- r'^#3 doTestAwait ',
- r'^<asynchronous suspension>$',
- r'^#4 doTestsLazy ',
- r'^<asynchronous suspension>$',
- r'^#5 main ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitThen(
- awaitWait,
- awaitWaitExpected +
- const <String>[
- r'^#3 doTestAwaitThen.<anonymous closure> ',
- r'^<asynchronous suspension>$',
- ],
- debugInfoFilename);
- await doTestAwaitCatchError(awaitWait, awaitWaitExpected, debugInfoFilename);
-
+ // allYield
{
- final expect = const <String>[
+ final allYieldExpected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#3 allYield \(.*/utils.dart:29(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ allYield,
+ allYieldExpected +
+ const <String>[
+ r'^#4 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ allYield,
+ allYieldExpected +
+ const <String>[
+ r'^#4 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ allYield,
+ allYieldExpected +
+ const <String>[
+ r'^#4 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // noYields
+ {
+ final noYieldsExpected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 noYields3 \(.*/utils.dart:54(:3)?\)$',
+ r'^#2 noYields2 \(.*/utils.dart:50(:9)?\)$',
+ r'^#3 noYields \(.*/utils.dart:46(:9)?\)$',
+ ];
+ await doTestAwait(
+ noYields,
+ noYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwait ',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ noYields,
+ noYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwaitThen ',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ noYields,
+ noYieldsExpected +
+ const <String>[
+ r'^#4 doTestAwaitCatchError ',
+ r'^#5 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#6 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // mixedYields
+ {
+ final mixedYieldsExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 mixedYields2 \(.*/utils.dart:66(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 mixedYields \(.*/utils.dart:61(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ mixedYields,
+ mixedYieldsExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ mixedYields,
+ mixedYieldsExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ mixedYields,
+ mixedYieldsExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // syncSuffix
+ {
+ final syncSuffixExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 syncSuffix2 \(.*/utils.dart:82(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 syncSuffix \(.*/utils.dart:77(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ syncSuffix,
+ syncSuffixExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ syncSuffix,
+ syncSuffixExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ syncSuffix,
+ syncSuffixExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // nonAsyncNoStack
+ {
+ final nonAsyncNoStackExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ nonAsyncNoStack,
+ nonAsyncNoStackExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ nonAsyncNoStack,
+ nonAsyncNoStackExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ nonAsyncNoStack,
+ nonAsyncNoStackExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // awaitEveryAsyncStarThrowSync
+ {
+ final asyncStarThrowSyncExpected = const <String>[
+ r'^#0 throwSync \(.+/utils.dart:16(:3)?\)$',
+ r'^#1 asyncStarThrowSync \(.+/utils.dart:112(:11)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitEveryAsyncStarThrowSync \(.+/utils.dart:104(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowSync,
+ asyncStarThrowSyncExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowSync,
+ asyncStarThrowSyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowSync,
+ asyncStarThrowSyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // awaitEveryAsyncStarThrowAsync
+ {
+ final asyncStarThrowAsyncExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitEveryAsyncStarThrowAsync \(.+/utils.dart:117(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitEveryAsyncStarThrowAsync,
+ asyncStarThrowAsyncExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitEveryAsyncStarThrowAsync,
+ asyncStarThrowAsyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitEveryAsyncStarThrowAsync,
+ asyncStarThrowAsyncExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // listenAsyncStarThrowAsync
+ {
+ final listenAsyncStartExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 asyncStarThrowAsync \(.*/utils.dart:126(:5)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#2 listenAsyncStarThrowAsync.<anonymous closure> \(.+/utils.dart(:0)?\)$',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ await doTestAwaitThen(
+ listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ listenAsyncStarThrowAsync, listenAsyncStartExpected, debugInfoFilename);
+ }
+
+ // customErrorZone
+ {
+ final customErrorZoneExpected = const <String>[
+ r'#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'#1 allYield3 \(.*/utils.dart:39(:3)?\)$',
+ r'<asynchronous suspension>$',
+ r'#2 allYield2 \(.*/utils.dart:34(:3)?\)$',
+ r'<asynchronous suspension>$',
+ r'#3 allYield \(.*/utils.dart:29(:3)?\)$',
+ r'<asynchronous suspension>$',
+ r'#4 customErrorZone.<anonymous closure> \(.*/utils.dart:144(:5)?\)$',
+ r'<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ await doTestAwaitThen(
+ customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ await doTestAwaitCatchError(
+ customErrorZone, customErrorZoneExpected, debugInfoFilename);
+ }
+
+ // awaitTimeout
+ {
+ final awaitTimeoutExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 Future.timeout.<anonymous closure> \(dart:async/future_impl.dart',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitTimeout ',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitTimeout,
+ awaitTimeoutExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitTimeout,
+ awaitTimeoutExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitTimeout,
+ awaitTimeoutExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // awaitWait
+ {
+ final awaitWaitExpected = const <String>[
+ r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
+ r'^<asynchronous suspension>$',
+ r'^#1 Future.wait.<anonymous closure> \(dart:async/future.dart',
+ r'^<asynchronous suspension>$',
+ r'^#2 awaitWait ',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ awaitWait,
+ awaitWaitExpected +
+ const <String>[
+ r'^#3 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ awaitWait,
+ awaitWaitExpected +
+ const <String>[
+ r'^#3 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ awaitWait,
+ awaitWaitExpected +
+ const <String>[
+ r'^#3 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#4 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#5 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // futureSyncWhenComplete
+ {
+ final expected = const <String>[
r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
r'^<asynchronous suspension>$',
];
await doTestAwait(
futureSyncWhenComplete,
- expect +
+ expected +
const <String>[
r'^#1 doTestAwait ',
r'^<asynchronous suspension>$',
@@ -984,13 +1082,72 @@
debugInfoFilename);
await doTestAwaitThen(
futureSyncWhenComplete,
- expect +
+ expected +
const <String>[
- r'^#1 doTestAwaitThen.<anonymous closure> ',
+ r'^#1 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#2 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#3 main ',
r'^<asynchronous suspension>$',
],
debugInfoFilename);
await doTestAwaitCatchError(
- futureSyncWhenComplete, expect, debugInfoFilename);
+ futureSyncWhenComplete,
+ expected +
+ const <String>[
+ r'^#1 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#2 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#3 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ }
+
+ // futureThen
+ {
+ final expected = const <String>[
+ r'^#0 throwSync \(.*/utils.dart:16(:3)?\)$',
+ r'^#1 futureThen.<anonymous closure> ',
+ r'^<asynchronous suspension>$',
+ ];
+ await doTestAwait(
+ futureThen,
+ expected +
+ const <String>[
+ r'^#2 doTestAwait ',
+ r'^<asynchronous suspension>$',
+ r'^#3 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#4 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitThen(
+ futureThen,
+ expected +
+ const <String>[
+ r'^#2 doTestAwaitThen ',
+ r'^<asynchronous suspension>$',
+ r'^#3 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#4 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
+ await doTestAwaitCatchError(
+ futureThen,
+ expected +
+ const <String>[
+ r'^#2 doTestAwaitCatchError ',
+ r'^<asynchronous suspension>$',
+ r'^#3 doTestsLazy ',
+ r'^<asynchronous suspension>$',
+ r'^#4 main ',
+ r'^<asynchronous suspension>$',
+ ],
+ debugInfoFilename);
}
}
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 185af0a..6822001 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -196,6 +196,8 @@
V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xb35ced99) \
V(_Future, timeout, FutureTimeout, 0x6ad7d1ef) \
V(Future, wait, FutureWait, 0x264aacc2) \
+ V(_RootZone, runUnary, RootZoneRunUnary, 0x76e41d34) \
+ V(_FutureListener, handleValue, FutureListenerHandleValue, 0x73894d16) \
// List of intrinsics:
// (class-name, function-name, intrinsification method, fingerprint).
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 7f6775d..51975f3 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1848,7 +1848,7 @@
/*skip_frames=*/0, &on_sync_frame,
&has_async);
- // If the entire stack is sync, return no trace.
+ // If the entire stack is sync, return no (async) trace.
if (!has_async) {
return nullptr;
}
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 5a6c5a9..96ad60d 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -528,6 +528,19 @@
frames_.Unpoison();
}
+StackFrameIterator::StackFrameIterator(const StackFrameIterator& orig)
+ : validate_(orig.validate_),
+ entry_(orig.thread_),
+ exit_(orig.thread_),
+ frames_(orig.thread_),
+ current_frame_(nullptr),
+ thread_(orig.thread_) {
+ frames_.fp_ = orig.frames_.fp_;
+ frames_.sp_ = orig.frames_.sp_;
+ frames_.pc_ = orig.frames_.pc_;
+ frames_.Unpoison();
+}
+
StackFrame* StackFrameIterator::NextFrame() {
// When we are at the start of iteration after having created an
// iterator object, current_frame_ will be NULL as we haven't seen
diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
index 92f864f..6969642 100644
--- a/runtime/vm/stack_frame.h
+++ b/runtime/vm/stack_frame.h
@@ -236,6 +236,8 @@
Thread* thread,
CrossThreadPolicy cross_thread_policy);
+ StackFrameIterator(const StackFrameIterator& orig);
+
// Checks if a next frame exists.
bool HasNextFrame() const { return frames_.fp_ != 0; }
@@ -300,7 +302,6 @@
Thread* thread_;
friend class ProfilerDartStackWalker;
- DISALLOW_COPY_AND_ASSIGN(StackFrameIterator);
};
// Iterator for iterating over all dart frames (skips over exit frames,
@@ -339,6 +340,8 @@
thread,
cross_thread_policy) {}
+ DartFrameIterator(const DartFrameIterator& orig) : frames_(orig.frames_) {}
+
// Get next dart frame.
StackFrame* NextFrame() {
StackFrame* frame = frames_.NextFrame();
@@ -350,8 +353,6 @@
private:
StackFrameIterator frames_;
-
- DISALLOW_COPY_AND_ASSIGN(DartFrameIterator);
};
// Iterator for iterating over all inlined dart functions in an optimized
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index ae8849a..18aebc1 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -10,11 +10,18 @@
namespace dart {
-// Keep in sync with
-// sdk/lib/async/stream_controller.dart:_StreamController._STATE_SUBSCRIBED.
+// Keep in sync with:
+// - sdk/lib/async/stream_controller.dart:_StreamController._STATE_SUBSCRIBED.
const intptr_t k_StreamController__STATE_SUBSCRIBED = 1;
-// sdk/lib/async/future_impl.dart:_FutureListener.stateWhencomplete.
-const intptr_t k_FutureListener_stateWhencomplete = 8;
+// - sdk/lib/async/future_impl.dart:_FutureListener.stateThen.
+const intptr_t k_FutureListener_stateThen = 1;
+// - sdk/lib/async/future_impl.dart:_FutureListener.stateCatchError.
+const intptr_t k_FutureListener_stateCatchError = 2;
+// - sdk/lib/async/future_impl.dart:_FutureListener.stateWhenComplete.
+const intptr_t k_FutureListener_stateWhenComplete = 8;
+
+// Keep in sync with sdk/lib/async/future_impl.dart:_FutureListener.handleValue.
+const intptr_t kNumArgsFutureListenerHandleValue = 1;
// Find current yield index from async closure.
// Async closures contains a variable, :await_jump_var that holds the index into
@@ -140,21 +147,19 @@
ASSERT(!future.IsNull());
ASSERT(future.GetClassId() == future_impl_class.id());
- listener_ = Instance::Cast(future).GetField(future_result_or_listeners_field);
- if (listener_.GetClassId() != future_listener_class.id()) {
+ // Since this function is recursive, we have to keep a local ref.
+ auto& listener = Object::Handle(
+ Instance::Cast(future).GetField(future_result_or_listeners_field));
+ if (listener.GetClassId() != future_listener_class.id()) {
return Closure::null();
}
- // If the _FutureListener is a whenComplete listener, follow the Future being
- // completed, `result`, instead of the dangling whenComplete `callback`.
- state_ = Instance::Cast(listener_).GetField(future_listener_state_field);
- ASSERT(state_.IsSmi());
- if (Smi::Cast(state_).Value() == k_FutureListener_stateWhencomplete) {
- future_ = Instance::Cast(listener_).GetField(future_listener_result_field);
- return GetCallerInFutureImpl(future_);
+ callback_ = GetCallerInFutureListener(listener);
+ if (callback_.IsInstance() && !callback_.IsNull()) {
+ return Closure::Cast(callback_).ptr();
}
- callback_ = Instance::Cast(listener_).GetField(callback_field);
+ callback_ = Instance::Cast(listener).GetField(callback_field);
// This happens for e.g.: await f().catchError(..);
if (callback_.IsNull()) {
return Closure::null();
@@ -221,22 +226,46 @@
UNREACHABLE(); // If no onData is found we have a bug.
}
+ClosurePtr CallerClosureFinder::GetCallerInFutureListener(
+ const Object& future_listener) {
+ ASSERT(future_listener.GetClassId() == future_listener_class.id());
+
+ state_ =
+ Instance::Cast(future_listener).GetField(future_listener_state_field);
+
+ auto value = Smi::Cast(state_).Value();
+ // If the _FutureListener is a `then`, `catchError`, or `whenComplete`
+ // listener, follow the Future being completed, `result`, instead of the
+ // dangling whenComplete `callback`.
+ if (value == k_FutureListener_stateThen ||
+ value == k_FutureListener_stateCatchError ||
+ value == k_FutureListener_stateWhenComplete) {
+ future_ =
+ Instance::Cast(future_listener).GetField(future_listener_result_field);
+ return GetCallerInFutureImpl(future_);
+ }
+
+ return Closure::null();
+}
+
ClosurePtr CallerClosureFinder::FindCaller(const Closure& receiver_closure) {
receiver_function_ = receiver_closure.function();
receiver_context_ = receiver_closure.context();
if (receiver_function_.IsAsyncClosure()) {
return FindCallerInAsyncClosure(receiver_context_);
- } else if (receiver_function_.IsAsyncGenClosure()) {
+ }
+ if (receiver_function_.IsAsyncGenClosure()) {
return FindCallerInAsyncGenClosure(receiver_context_);
- } else if (receiver_function_.IsLocalFunction()) {
+ }
+ if (receiver_function_.IsLocalFunction()) {
parent_function_ = receiver_function_.parent_function();
if (parent_function_.recognized_kind() ==
MethodRecognizer::kFutureTimeout) {
context_entry_ = receiver_context_.At(Context::kFutureTimeoutFutureIndex);
return GetCallerInFutureImpl(context_entry_);
- } else if (parent_function_.recognized_kind() ==
- MethodRecognizer::kFutureWait) {
+ }
+ if (parent_function_.recognized_kind() == MethodRecognizer::kFutureWait) {
receiver_context_ = receiver_context_.parent();
ASSERT(!receiver_context_.IsNull());
context_entry_ = receiver_context_.At(Context::kFutureWaitFutureIndex);
@@ -300,6 +329,110 @@
UNREACHABLE();
}
+ClosurePtr StackTraceUtils::ClosureFromFrameFunction(
+ Zone* zone,
+ CallerClosureFinder* caller_closure_finder,
+ const DartFrameIterator& frames,
+ StackFrame* frame,
+ bool* skip_frame,
+ bool* is_async) {
+ auto& closure = Closure::Handle(zone);
+ auto& function = Function::Handle(zone);
+
+ function = frame->LookupDartFunction();
+ if (function.IsNull()) {
+ return Closure::null();
+ }
+
+ if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
+ // Next, look up caller's closure on the stack and walk backwards
+ // through the yields.
+ ObjectPtr* last_caller_obj =
+ reinterpret_cast<ObjectPtr*>(frame->GetCallerSp());
+ closure = FindClosureInFrame(last_caller_obj, function);
+
+ // If this async function hasn't yielded yet, we're still dealing with a
+ // normal stack. Continue to next frame as usual.
+ if (!caller_closure_finder->IsRunningAsync(closure)) {
+ return Closure::null();
+ }
+
+ *is_async = true;
+
+ // Skip: Already handled this as a sync. frame.
+ return caller_closure_finder->FindCaller(closure);
+ }
+
+ // May have been called from `_FutureListener.handleValue`, which means its
+ // receiver holds the Future chain.
+ DartFrameIterator future_frames(frames);
+ if (function.recognized_kind() == MethodRecognizer::kRootZoneRunUnary) {
+ frame = future_frames.NextFrame();
+ function = frame->LookupDartFunction();
+ if (function.recognized_kind() !=
+ MethodRecognizer::kFutureListenerHandleValue) {
+ return Closure::null();
+ }
+ }
+ if (function.recognized_kind() ==
+ MethodRecognizer::kFutureListenerHandleValue) {
+ *is_async = true;
+ *skip_frame = true;
+
+ // The _FutureListener receiver is at the top of the previous frame, right
+ // before the arguments to the call.
+ Object& receiver =
+ Object::Handle(*(reinterpret_cast<ObjectPtr*>(frame->GetCallerSp()) +
+ kNumArgsFutureListenerHandleValue));
+
+ return caller_closure_finder->GetCallerInFutureListener(receiver);
+ }
+
+ return Closure::null();
+}
+
+void StackTraceUtils::UnwindAwaiterChain(
+ Zone* zone,
+ const GrowableObjectArray& code_array,
+ const GrowableObjectArray& pc_offset_array,
+ CallerClosureFinder* caller_closure_finder,
+ const Closure& leaf_closure) {
+ auto& code = Code::Handle(zone);
+ auto& function = Function::Handle(zone);
+ auto& closure = Closure::Handle(zone, leaf_closure.ptr());
+ auto& pc_descs = PcDescriptors::Handle(zone);
+ auto& offset = Smi::Handle(zone);
+
+ // Inject async suspension marker.
+ code_array.Add(StubCode::AsynchronousGapMarker());
+ offset = Smi::New(0);
+ pc_offset_array.Add(offset);
+
+ // Traverse the trail of async futures all the way up.
+ for (; !closure.IsNull();
+ closure = caller_closure_finder->FindCaller(closure)) {
+ function = closure.function();
+ if (function.IsNull()) {
+ continue;
+ }
+ // In hot-reload-test-mode we sometimes have to do this:
+ code = function.EnsureHasCode();
+ RELEASE_ASSERT(!code.IsNull());
+ code_array.Add(code);
+ pc_descs = code.pc_descriptors();
+ offset = Smi::New(FindPcOffset(pc_descs, GetYieldIndex(closure)));
+ // Unlike other sources of PC offsets, the offset may be 0 here if we
+ // reach a non-async closure receiving the yielded value.
+ ASSERT(offset.Value() >= 0);
+ pc_offset_array.Add(offset);
+
+ // Inject async suspension marker.
+ code_array.Add(StubCode::AsynchronousGapMarker());
+ offset = Smi::New(0);
+ pc_offset_array.Add(offset);
+ }
+}
+
void StackTraceUtils::CollectFramesLazy(
Thread* thread,
const GrowableObjectArray& code_array,
@@ -320,13 +453,11 @@
return;
}
- auto& function = Function::Handle(zone);
auto& code = Code::Handle(zone);
auto& offset = Smi::Handle(zone);
-
auto& closure = Closure::Handle(zone);
+
CallerClosureFinder caller_closure_finder(zone);
- auto& pc_descs = PcDescriptors::Handle();
// Start by traversing the sync. part of the stack.
for (; frame != nullptr; frame = frames.NextFrame()) {
@@ -335,79 +466,36 @@
continue;
}
- function = frame->LookupDartFunction();
+ // If we encounter a known part of the async/Future mechanism, unwind the
+ // awaiter chain from the closures.
+ bool skip_frame = false;
+ bool is_async = false;
+ closure = ClosureFromFrameFunction(zone, &caller_closure_finder, frames,
+ frame, &skip_frame, &is_async);
- // Add the current synchronous frame.
- code = frame->LookupDartCode();
- ASSERT(function.ptr() == code.function());
- code_array.Add(code);
- const intptr_t pc_offset = frame->pc() - code.PayloadStart();
- ASSERT(pc_offset > 0 && pc_offset <= code.Size());
- offset = Smi::New(pc_offset);
- pc_offset_array.Add(offset);
- if (on_sync_frames != nullptr) {
- (*on_sync_frames)(frame);
+ // This isn't a special (async) frame we should skip.
+ if (!skip_frame) {
+ // Add the current synchronous frame.
+ code = frame->LookupDartCode();
+ code_array.Add(code);
+ const intptr_t pc_offset = frame->pc() - code.PayloadStart();
+ ASSERT(pc_offset > 0 && pc_offset <= code.Size());
+ offset = Smi::New(pc_offset);
+ pc_offset_array.Add(offset);
+ // Callback for sync frame.
+ if (on_sync_frames != nullptr) {
+ (*on_sync_frames)(frame);
+ }
}
- // Either continue the loop (sync-async case) or find all await'ers and
- // return.
- if (!function.IsNull() &&
- (function.IsAsyncClosure() || function.IsAsyncGenClosure())) {
+ // This frame is running async.
+ // Note: The closure might still be null in case it's an unawaited future.
+ if (is_async) {
+ UnwindAwaiterChain(zone, code_array, pc_offset_array,
+ &caller_closure_finder, closure);
if (has_async != nullptr) {
*has_async = true;
}
-
- {
- NoSafepointScope nsp;
-
- // Next, look up caller's closure on the stack and walk backwards
- // through the yields.
- ObjectPtr* last_caller_obj =
- reinterpret_cast<ObjectPtr*>(frame->GetCallerSp());
- closure = FindClosureInFrame(last_caller_obj, function);
-
- // If this async function hasn't yielded yet, we're still dealing with a
- // normal stack. Continue to next frame as usual.
- if (!caller_closure_finder.IsRunningAsync(closure)) {
- continue;
- }
- }
-
- // Inject async suspension marker.
- code_array.Add(StubCode::AsynchronousGapMarker());
- offset = Smi::New(0);
- pc_offset_array.Add(offset);
-
- // Skip: Already handled this frame's function above.
- closure = caller_closure_finder.FindCaller(closure);
-
- // Traverse the trail of async futures all the way up.
- for (; !closure.IsNull();
- closure = caller_closure_finder.FindCaller(closure)) {
- function = closure.function();
- // In hot-reload-test-mode we sometimes have to do this:
- if (!function.HasCode()) {
- function.EnsureHasCode();
- }
- if (function.HasCode()) {
- code = function.CurrentCode();
- code_array.Add(code);
- pc_descs = code.pc_descriptors();
- offset = Smi::New(FindPcOffset(pc_descs, GetYieldIndex(closure)));
- } else {
- UNREACHABLE();
- }
- // Unlike other sources of PC offsets, the offset may be 0 here if we
- // reach a non-async closure receiving the yielded value.
- ASSERT(offset.Value() >= 0);
- pc_offset_array.Add(offset);
-
- // Inject async suspension marker.
- code_array.Add(StubCode::AsynchronousGapMarker());
- offset = Smi::New(0);
- pc_offset_array.Add(offset);
- }
-
// Ignore the rest of the stack; already unwound all async calls.
return;
}
diff --git a/runtime/vm/stack_trace.h b/runtime/vm/stack_trace.h
index 215da83..2074673 100644
--- a/runtime/vm/stack_trace.h
+++ b/runtime/vm/stack_trace.h
@@ -21,6 +21,8 @@
ClosurePtr GetCallerInFutureImpl(const Object& future_);
+ ClosurePtr GetCallerInFutureListener(const Object& future_listener);
+
ClosurePtr FindCallerInAsyncClosure(const Context& receiver_context);
ClosurePtr FindCallerInAsyncGenClosure(const Context& receiver_context);
@@ -61,6 +63,8 @@
Field& state_field;
Field& on_data_field;
Field& state_data_field;
+
+ DISALLOW_COPY_AND_ASSIGN(CallerClosureFinder);
};
class StackTraceUtils : public AllStatic {
@@ -69,6 +73,20 @@
static ClosurePtr FindClosureInFrame(ObjectPtr* last_object_in_caller,
const Function& function);
+ static ClosurePtr ClosureFromFrameFunction(
+ Zone* zone,
+ CallerClosureFinder* caller_closure_finder,
+ const DartFrameIterator& frames,
+ StackFrame* frame,
+ bool* skip_frame,
+ bool* is_async);
+
+ static void UnwindAwaiterChain(Zone* zone,
+ const GrowableObjectArray& code_array,
+ const GrowableObjectArray& pc_offset_array,
+ CallerClosureFinder* caller_closure_finder,
+ const Closure& leaf_closure);
+
/// Collects all frames on the current stack until an async/async* frame is
/// hit which has yielded before (i.e. is not in sync-async case).
///
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index df8a347..a9f2b80 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -63,18 +63,19 @@
}
class _FutureListener<S, T> {
+ // Keep in sync with sdk/runtime/vm/stack_trace.cc.
static const int maskValue = 1;
static const int maskError = 2;
static const int maskTestError = 4;
- static const int maskWhencomplete = 8;
+ static const int maskWhenComplete = 8;
static const int stateChain = 0;
static const int stateThen = maskValue;
static const int stateThenOnerror = maskValue | maskError;
- static const int stateCatcherror = maskError;
- static const int stateCatcherrorTest = maskError | maskTestError;
- static const int stateWhencomplete = maskWhencomplete;
+ static const int stateCatchError = maskError;
+ static const int stateCatchErrorTest = maskError | maskTestError;
+ static const int stateWhenComplete = maskWhenComplete;
static const int maskType =
- maskValue | maskError | maskTestError | maskWhencomplete;
+ maskValue | maskError | maskTestError | maskWhenComplete;
static const int stateIsAwait = 16;
// Listeners on the same future are linked through this link.
@@ -109,18 +110,18 @@
stateIsAwait;
_FutureListener.catchError(this.result, this.errorCallback, this.callback)
- : state = (callback == null) ? stateCatcherror : stateCatcherrorTest;
+ : state = (callback == null) ? stateCatchError : stateCatchErrorTest;
_FutureListener.whenComplete(this.result, this.callback)
: errorCallback = null,
- state = stateWhencomplete;
+ state = stateWhenComplete;
_Zone get _zone => result._zone;
bool get handlesValue => (state & maskValue != 0);
bool get handlesError => (state & maskError != 0);
- bool get hasErrorTest => (state & maskType == stateCatcherrorTest);
- bool get handlesComplete => (state & maskType == stateWhencomplete);
+ bool get hasErrorTest => (state & maskType == stateCatchErrorTest);
+ bool get handlesComplete => (state & maskType == stateWhenComplete);
bool get isAwait => (state & stateIsAwait != 0);
FutureOr<T> Function(S) get _onValue {
@@ -148,6 +149,8 @@
return _onError != null;
}
+ @pragma("vm:recognized", "other")
+ @pragma("vm:never-inline")
FutureOr<T> handleValue(S sourceResult) {
return _zone.runUnary<FutureOr<T>, S>(_onValue, sourceResult);
}
diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
index 4f0873d..5400814 100644
--- a/sdk/lib/async/zone.dart
+++ b/sdk/lib/async/zone.dart
@@ -1608,6 +1608,7 @@
return _rootRun(null, null, this, f);
}
+ @pragma("vm:recognized", "other")
R runUnary<R, T>(R f(T arg), T arg) {
if (identical(Zone._current, _rootZone)) return f(arg);
return _rootRunUnary(null, null, this, f, arg);
diff --git a/tools/VERSION b/tools/VERSION
index 96e8a89..dacee7e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 12
PATCH 0
-PRERELEASE 262
+PRERELEASE 263
PRERELEASE_PATCH 0
\ No newline at end of file