1111class C0 {
1212 int get m1 => 0 ;
1313 void set m2 (int x) {}
14+ int operator [](int index) => 0 ;
1415}
1516
1617extension E0 on C0 {
1718 void set m1 (int x) {}
1819 int get m2 => 0 ;
20+ void operator []= (int index, int value) {}
1921}
2022
2123void 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> {}
5596extension E1A <T > on C1 <T > {
5697 int get m1 => 0 ;
5798 void set m2 (int x) {}
99+ int operator [](int index) => 0 ;
58100}
59101
60102extension E1B on C1 <Object > {
61103 void set m1 (int x) {}
62104 int get m2 => 0 ;
105+ void operator []= (int index, int value) {}
63106}
64107
65108void 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.
105191class 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
111198extension 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