Skip to content

Commit d53d355

Browse files
committed
Add subscript operator to extension method setter/getter tests.
Change-Id: I09d97d291231eaf81b76c8156e1b3f25b7ab222e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118366 Reviewed-by: Lasse R.H. Nielsen <[email protected]>
1 parent d012dfc commit d53d355

File tree

1 file changed

+114
-9
lines changed

1 file changed

+114
-9
lines changed

tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart

Lines changed: 114 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@
1111
class C0 {
1212
int get m1 => 0;
1313
void set m2(int x) {}
14+
int operator[](int index) => 0;
1415
}
1516

1617
extension E0 on C0 {
1718
void set m1(int x) {}
1819
int get m2 => 0;
20+
void operator[]=(int index, int value) {}
1921
}
2022

2123
void test0() {
2224
C0 c0 = C0();
2325
c0.m1;
2426
c0.m1 = 0;
25-
// ^^^^^^
26-
// [analyzer] unspecified
27+
// ^^
28+
// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
2729
// [cfe] unspecified
2830
E0(c0).m1 = 0;
2931
E0(c0).m1;
@@ -32,20 +34,59 @@ void test0() {
3234
// [cfe] unspecified
3335

3436
c0.m1 += 0;
35-
// ^^^^^^
36-
// [analyzer] unspecified
37+
// ^^
38+
// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
39+
// [cfe] unspecified
40+
41+
c0.m1++;
42+
// ^^
43+
// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
3744
// [cfe] unspecified
3845

3946
c0.m2 = 0;
4047
c0.m2;
4148
// ^^
42-
// [analyzer] unspecified
49+
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
4350
// [cfe] unspecified
4451
c0.m2 += 0;
45-
// ^^^^^^^
46-
// [analyzer] unspecified
52+
// ^^
53+
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
54+
// [cfe] unspecified
55+
c0.m2++;
56+
// ^^
57+
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
4758
// [cfe] unspecified
59+
4860
E0(c0).m2;
61+
62+
c0[0];
63+
c0[0] = 0;
64+
// ^^^^^^
65+
// [analyzer] unspecified
66+
// [cfe] unspecified
67+
E0(c0)[0];
68+
// ^^^^^^
69+
// [analyzer] unspecified
70+
// [cfe] unspecified
71+
E0(c0)[0] = 0;
72+
73+
c0[0] += 0;
74+
// ^^^^^^
75+
// [analyzer] unspecified
76+
// [cfe] unspecified
77+
c0[0]++;
78+
// ^^^^^^
79+
// [analyzer] unspecified
80+
// [cfe] unspecified
81+
82+
E0(c0)[0] += 0;
83+
// ^^^^^^
84+
// [analyzer] unspecified
85+
// [cfe] unspecified
86+
E0(c0)[0]++;
87+
// ^^^^^^
88+
// [analyzer] unspecified
89+
// [cfe] unspecified
4990
}
5091

5192
// Conflicting extensions.
@@ -55,11 +96,13 @@ class C1<T> {}
5596
extension E1A<T> on C1<T> {
5697
int get m1 => 0;
5798
void set m2(int x) {}
99+
int operator[](int index) => 0;
58100
}
59101

60102
extension E1B on C1<Object> {
61103
void set m1(int x) {}
62104
int get m2 => 0;
105+
void operator[]=(int index, int value) {}
63106
}
64107

65108
void test1() {
@@ -78,6 +121,23 @@ void test1() {
78121

79122
c1a.m2 = 0;
80123

124+
c1a[0] = 0;
125+
// ^^
126+
// [analyzer] unspecified
127+
// [cfe] unspecified
128+
129+
c1a[0] += 0;
130+
// ^^
131+
// [analyzer] unspecified
132+
// [cfe] unspecified
133+
134+
c1a[0]++;
135+
// ^^
136+
// [analyzer] unspecified
137+
// [cfe] unspecified
138+
139+
c1a[0];
140+
81141
C1<Object> c1b = C1<Null>(); // Neither extension is more specific.
82142

83143
c1b.m1;
@@ -90,28 +150,57 @@ void test1() {
90150
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
91151
// [cfe] unspecified
92152

93-
c1b.m2;
153+
c1b.m1 += 0;
94154
// ^^
95155
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
96156
// [cfe] unspecified
97157

98-
c1b.m2 = 0;
158+
c1b.m1++;
99159
// ^^
100160
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
101161
// [cfe] unspecified
162+
163+
c1b.m2;
164+
// ^^
165+
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
166+
// [cfe] unspecified
167+
168+
169+
c1b[0];
170+
// ^^
171+
// [analyzer] unspecified
172+
// [cfe] unspecified
173+
174+
c1b[0] = 0;
175+
// ^^
176+
// [analyzer] unspecified
177+
// [cfe] unspecified
178+
179+
c1b[0] += 0;
180+
// ^^
181+
// [analyzer] unspecified
182+
// [cfe] unspecified
183+
184+
c1b[0]++;
185+
// ^^
186+
// [analyzer] unspecified
187+
// [cfe] unspecified
102188
}
103189

104190
// Getter on the extension itself.
105191
class C2 {
106192
int get m1 => 0;
107193
void set m2(int x) {}
108194
int get mc => 0;
195+
void operator[]=(int index, int value) {}
109196
}
110197

111198
extension E2 on C2 {
112199
void set m1(int x) {}
113200
int get m2 => 0;
114201
String get me => "";
202+
int operator[](int index) => 0;
203+
115204

116205
void test2() {
117206
// Using `this.member` means using the `on` type.
@@ -128,6 +217,22 @@ extension E2 on C2 {
128217
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
129218
// [cfe] unspecified
130219

220+
this[0] = 0;
221+
this[0];
222+
// ^^
223+
// [analyzer] unspecified
224+
// [cfe] unspecified
225+
226+
this[0] += 0;
227+
// ^^
228+
// [analyzer] unspecified
229+
// [cfe] unspecified
230+
231+
this[0] ++;
232+
// ^^
233+
// [analyzer] unspecified
234+
// [cfe] unspecified
235+
131236
// Check that `this.mc` refers to `C2.mc`.
132237
this.mc.toRadixString(16);
133238
// Check that `this.me` refers to `E2.me`.

0 commit comments

Comments
 (0)