@@ -88,9 +88,125 @@ class Child extends Parent {
88
88
''' );
89
89
}
90
90
91
+ test_getter () async {
92
+ newFile2 ('$testPackageLibPath /a.dart' , '''
93
+ import 'package:meta/meta.dart';
94
+
95
+ class A {
96
+ @visibleForOverriding
97
+ int get g => 0;
98
+ }
99
+ ''' );
100
+
101
+ await assertErrorsInCode ('''
102
+ import 'a.dart';
103
+
104
+ class B {
105
+ int m(A a) {
106
+ return a.g;
107
+ }
108
+ }
109
+ ''' , [
110
+ error (HintCode .INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER , 56 , 1 ),
111
+ ]);
112
+ }
113
+
114
+ test_overriding_getter () async {
115
+ newFile2 ('$testPackageLibPath /a.dart' , '''
116
+ import 'package:meta/meta.dart';
117
+
118
+ class A {
119
+ @visibleForOverriding
120
+ int get g => 0;
121
+ }
122
+ ''' );
123
+
124
+ await assertErrorsInCode ('''
125
+ import 'a.dart';
126
+
127
+ class B extends A {
128
+ @override
129
+ int get g => super.g + 1;
130
+
131
+ int get x => super.g + 1;
132
+ }
133
+ ''' , [
134
+ error (HintCode .INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER , 100 , 1 ),
135
+ ]);
136
+ }
137
+
138
+ test_overriding_methodInvocation () async {
139
+ newFile2 ('$testPackageLibPath /a.dart' , '''
140
+ import 'package:meta/meta.dart';
141
+
142
+ class A {
143
+ @visibleForOverriding
144
+ void m() {}
145
+ }
146
+ ''' );
147
+
148
+ await assertErrorsInCode ('''
149
+ import 'a.dart';
150
+
151
+ class B extends A {
152
+ @override
153
+ void m() => super.m();
154
+
155
+ void x() => super.m();
156
+ }
157
+ ''' , [
158
+ error (HintCode .INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER , 96 , 1 ),
159
+ ]);
160
+ }
161
+
162
+ test_overriding_operator () async {
163
+ newFile2 ('$testPackageLibPath /a.dart' , '''
164
+ import 'package:meta/meta.dart';
165
+
166
+ class A {
167
+ @visibleForOverriding
168
+ operator >(A other) => true;
169
+ }
170
+ ''' );
171
+
172
+ await assertNoErrorsInCode ('''
173
+ import 'a.dart';
174
+
175
+ class B extends A {
176
+ @override
177
+ operator >(A other) => super > other;
178
+ }
179
+ ''' );
180
+ }
181
+
182
+ test_overriding_setter () async {
183
+ newFile2 ('$testPackageLibPath /a.dart' , '''
184
+ import 'package:meta/meta.dart';
185
+
186
+ class A {
187
+ @visibleForOverriding
188
+ set s(int i) {}
189
+ }
190
+ ''' );
191
+
192
+ await assertErrorsInCode ('''
193
+ import 'a.dart';
194
+
195
+ class B extends A {
196
+ @override
197
+ set s(int i) => super.s = i;
198
+
199
+ set x(int i) => super.s = i;
200
+ }
201
+ ''' , [
202
+ error (HintCode .INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER , 106 , 1 ),
203
+ ]);
204
+ }
205
+
91
206
test_sameLibrary () async {
92
207
await assertNoErrorsInCode ('''
93
208
import 'package:meta/meta.dart';
209
+
94
210
class Parent {
95
211
@visibleForOverriding
96
212
void foo() {}
@@ -103,4 +219,27 @@ class Child extends Parent {
103
219
}
104
220
''' );
105
221
}
222
+
223
+ test_setter () async {
224
+ newFile2 ('$testPackageLibPath /a.dart' , '''
225
+ import 'package:meta/meta.dart';
226
+
227
+ class A {
228
+ @visibleForOverriding
229
+ set s(int i) {}
230
+ }
231
+ ''' );
232
+
233
+ await assertErrorsInCode ('''
234
+ import 'a.dart';
235
+
236
+ class B {
237
+ void m(A a) {
238
+ a.s = 1;
239
+ }
240
+ }
241
+ ''' , [
242
+ error (HintCode .INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER , 50 , 1 ),
243
+ ]);
244
+ }
106
245
}
0 commit comments