11
11
class C0 {
12
12
int get m1 => 0 ;
13
13
void set m2 (int x) {}
14
+ int operator [](int index) => 0 ;
14
15
}
15
16
16
17
extension E0 on C0 {
17
18
void set m1 (int x) {}
18
19
int get m2 => 0 ;
20
+ void operator []= (int index, int value) {}
19
21
}
20
22
21
23
void test0 () {
22
24
C0 c0 = C0 ();
23
25
c0.m1;
24
26
c0.m1 = 0 ;
25
- // ^^^^^^
26
- // [analyzer] unspecified
27
+ // ^^
28
+ // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
27
29
// [cfe] unspecified
28
30
E0 (c0).m1 = 0 ;
29
31
E0 (c0).m1;
@@ -32,20 +34,59 @@ void test0() {
32
34
// [cfe] unspecified
33
35
34
36
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
37
44
// [cfe] unspecified
38
45
39
46
c0.m2 = 0 ;
40
47
c0.m2;
41
48
// ^^
42
- // [analyzer] unspecified
49
+ // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
43
50
// [cfe] unspecified
44
51
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
47
58
// [cfe] unspecified
59
+
48
60
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
49
90
}
50
91
51
92
// Conflicting extensions.
@@ -55,11 +96,13 @@ class C1<T> {}
55
96
extension E1A <T > on C1 <T > {
56
97
int get m1 => 0 ;
57
98
void set m2 (int x) {}
99
+ int operator [](int index) => 0 ;
58
100
}
59
101
60
102
extension E1B on C1 <Object > {
61
103
void set m1 (int x) {}
62
104
int get m2 => 0 ;
105
+ void operator []= (int index, int value) {}
63
106
}
64
107
65
108
void test1 () {
@@ -78,6 +121,23 @@ void test1() {
78
121
79
122
c1a.m2 = 0 ;
80
123
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
+
81
141
C1 <Object > c1b = C1 <Null >(); // Neither extension is more specific.
82
142
83
143
c1b.m1;
@@ -90,28 +150,57 @@ void test1() {
90
150
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
91
151
// [cfe] unspecified
92
152
93
- c1b.m2 ;
153
+ c1b.m1 += 0 ;
94
154
// ^^
95
155
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
96
156
// [cfe] unspecified
97
157
98
- c1b.m2 = 0 ;
158
+ c1b.m1 ++ ;
99
159
// ^^
100
160
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
101
161
// [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
102
188
}
103
189
104
190
// Getter on the extension itself.
105
191
class C2 {
106
192
int get m1 => 0 ;
107
193
void set m2 (int x) {}
108
194
int get mc => 0 ;
195
+ void operator []= (int index, int value) {}
109
196
}
110
197
111
198
extension E2 on C2 {
112
199
void set m1 (int x) {}
113
200
int get m2 => 0 ;
114
201
String get me => "" ;
202
+ int operator [](int index) => 0 ;
203
+
115
204
116
205
void test2 () {
117
206
// Using `this.member` means using the `on` type.
@@ -128,6 +217,22 @@ extension E2 on C2 {
128
217
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
129
218
// [cfe] unspecified
130
219
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
+
131
236
// Check that `this.mc` refers to `C2.mc`.
132
237
this .mc.toRadixString (16 );
133
238
// Check that `this.me` refers to `E2.me`.
0 commit comments