Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: tests/compiler/dart2js/override_inheritance_test.dart

Issue 326913002: Make dart2js unittests async. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/compiler/dart2js/null_type_test.dart ('k') | tests/compiler/dart2js/part_of_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import "package:expect/expect.dart"; 5 import 'dart:async';
6 6 import 'package:async_helper/async_helper.dart';
7 import "compiler_helper.dart"; 7 import 'compiler_helper.dart';
8 import "../../../sdk/lib/_internal/compiler/implementation/resolution/class_memb ers.dart" 8 import '../../../sdk/lib/_internal/compiler/implementation/resolution/class_memb ers.dart'
9 show MembersCreator; 9 show MembersCreator;
10 10
11 main() { 11 main() {
12 testRequiredParameters(); 12 asyncTest(() => Future.wait([
13 testPositionalParameters(); 13 testRequiredParameters(),
14 testNamedParameters(); 14 testPositionalParameters(),
15 testNotSubtype(); 15 testNamedParameters(),
16 testGetterNotSubtype(); 16 testNotSubtype(),
17 testSetterNotSubtype(); 17 testGetterNotSubtype(),
18 testGenericNotSubtype(); 18 testSetterNotSubtype(),
19 testFieldNotSubtype(); 19 testGenericNotSubtype(),
20 testMixedOverride(); 20 testFieldNotSubtype(),
21 testAbstractMethods(); 21 testMixedOverride(),
22 testNoSuchMethod(); 22 testAbstractMethods(),
23 testNoSuchMethod(),
24 ]));
23 } 25 }
24 26
25 check(String source, {errors, warnings, hints, infos}) { 27 Future check(String source, {errors, warnings, hints, infos}) {
26 MockCompiler compiler = new MockCompiler(); 28 return MockCompiler.create((MockCompiler compiler) {
27 compiler.diagnosticHandler = createHandler(compiler, source); 29 compiler.diagnosticHandler = createHandler(compiler, source);
28 compiler.parseScript(source); 30 compiler.parseScript(source);
29 var cls = compiler.mainApp.find('Class'); 31 var cls = compiler.mainApp.find('Class');
30 cls.ensureResolved(compiler); 32 cls.ensureResolved(compiler);
31 MembersCreator.computeAllClassMembers(compiler, cls); 33 MembersCreator.computeAllClassMembers(compiler, cls);
32 34
33 toList(o) => o == null ? [] : o is List ? o : [o]; 35 toList(o) => o == null ? [] : o is List ? o : [o];
34 36
35 compareMessageKinds(source, toList(errors), compiler.errors, 'error'); 37 compareMessageKinds(source, toList(errors), compiler.errors, 'error');
36 38
37 compareMessageKinds(source, toList(warnings), compiler.warnings, 'warning'); 39 compareMessageKinds(source, toList(warnings), compiler.warnings, 'warning');
38 40
39 if (infos != null) { 41 if (infos != null) {
40 compareMessageKinds(source, toList(infos), compiler.infos, 'info'); 42 compareMessageKinds(source, toList(infos), compiler.infos, 'info');
41 } 43 }
42 44
43 if (hints != null) { 45 if (hints != null) {
44 compareMessageKinds(source, toList(hints), compiler.hints, 'hint'); 46 compareMessageKinds(source, toList(hints), compiler.hints, 'hint');
45 } 47 }
48 });
46 } 49 }
47 50
48 testRequiredParameters() { 51 Future testRequiredParameters() {
49 check(""" 52 return Future.wait([
50 class A { 53 check("""
51 method() => null; // testRequiredParameters:0 54 class A {
52 } 55 method() => null; // testRequiredParameters:0
53 class Class extends A { 56 }
54 method() => null; // testRequiredParameters:1 57 class Class extends A {
55 } 58 method() => null; // testRequiredParameters:1
56 """); 59 }
57 60 """),
58 check(""" 61
59 class A { 62 check("""
60 method(a) => null; // testRequiredParameters:2 63 class A {
61 } 64 method(a) => null; // testRequiredParameters:2
62 class Class extends A { 65 }
63 method(b) => null; // testRequiredParameters:3 66 class Class extends A {
64 } 67 method(b) => null; // testRequiredParameters:3
65 """); 68 }
66 69 """),
67 check(""" 70
68 class A { 71 check("""
69 method(a, b, c, d) => null; // testRequiredParameters:3 72 class A {
70 } 73 method(a, b, c, d) => null; // testRequiredParameters:3
71 class Class extends A { 74 }
72 method(b, a, d, c) => null; // testRequiredParameters:4 75 class Class extends A {
73 } 76 method(b, a, d, c) => null; // testRequiredParameters:4
74 """); 77 }
75 78 """),
76 check(""" 79
77 class A { 80 check("""
78 method() => null; // testRequiredParameters:5 81 class A {
79 } 82 method() => null; // testRequiredParameters:5
80 class Class extends A { 83 }
81 method(a) => null; // testRequiredParameters:6 84 class Class extends A {
82 } 85 method(a) => null; // testRequiredParameters:6
83 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 86 }
84 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 87 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
85 88 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
86 check(""" 89
87 class A { 90 check("""
88 method() => null; // testRequiredParameters:7 91 class A {
89 } 92 method() => null; // testRequiredParameters:7
90 class Class implements A { 93 }
91 method(a) => null; // testRequiredParameters:8 94 class Class implements A {
92 } 95 method(a) => null; // testRequiredParameters:8
93 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 96 }
94 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 97 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
95 98 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
96 check(""" 99
97 class A { 100 check("""
98 method(a, b, c) => null; // testRequiredParameters:9 101 class A {
99 } 102 method(a, b, c) => null; // testRequiredParameters:9
100 class Class extends A { 103 }
101 method(a, b, c, d) => null; // testRequiredParameters:10 104 class Class extends A {
102 } 105 method(a, b, c, d) => null; // testRequiredParameters:10
103 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 106 }
104 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 107 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
108 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
109 ]);
105 } 110 }
106 111
107 testPositionalParameters() { 112 Future testPositionalParameters() {
108 check(""" 113 return Future.wait([
109 class A { 114 check("""
110 method([a]) => null; // testPositionalParameters:1 115 class A {
111 } 116 method([a]) => null; // testPositionalParameters:1
112 class Class extends A { 117 }
113 method([a]) => null; // testPositionalParameters:2 118 class Class extends A {
114 } 119 method([a]) => null; // testPositionalParameters:2
115 """); 120 }
116 121 """),
117 check(""" 122
118 class A { 123 check("""
119 method([a, b]) => null; // testPositionalParameters:3 124 class A {
120 } 125 method([a, b]) => null; // testPositionalParameters:3
121 class Class extends A { 126 }
122 method([b, a]) => null; // testPositionalParameters:4 127 class Class extends A {
123 } 128 method([b, a]) => null; // testPositionalParameters:4
124 """); 129 }
125 130 """),
126 check(""" 131
127 class A { 132 check("""
128 method([a, b, c]) => null; // testPositionalParameters:5 133 class A {
129 } 134 method([a, b, c]) => null; // testPositionalParameters:5
130 class Class extends A { 135 }
131 method([b, d, a, c]) => null; // testPositionalParameters:6 136 class Class extends A {
132 } 137 method([b, d, a, c]) => null; // testPositionalParameters:6
133 """); 138 }
134 139 """),
135 check(""" 140
136 class A { 141 check("""
137 method([a]) => null; // testPositionalParameters:7 142 class A {
138 } 143 method([a]) => null; // testPositionalParameters:7
139 class Class extends A { 144 }
140 method([a]) => null; // testPositionalParameters:8 145 class Class extends A {
141 } 146 method([a]) => null; // testPositionalParameters:8
142 """); 147 }
143 148 """),
144 check(""" 149
145 class A { 150 check("""
146 method(a) => null; // testPositionalParameters:9 151 class A {
147 } 152 method(a) => null; // testPositionalParameters:9
148 class Class extends A { 153 }
149 method() => null; // testPositionalParameters:10 154 class Class extends A {
150 } 155 method() => null; // testPositionalParameters:10
151 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 156 }
152 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 157 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
153 158 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
154 check(""" 159
155 class A { 160 check("""
156 method(a, [b]) => null; // testPositionalParameters:11 161 class A {
157 } 162 method(a, [b]) => null; // testPositionalParameters:11
158 class Class extends A { 163 }
159 method(a) => null; // testPositionalParameters:12 164 class Class extends A {
160 } 165 method(a) => null; // testPositionalParameters:12
161 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 166 }
162 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 167 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
163 168 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
164 check(""" 169
165 class A { 170 check("""
166 method(a, [b]) => null; // testPositionalParameters:13 171 class A {
167 } 172 method(a, [b]) => null; // testPositionalParameters:13
168 class Class extends A { 173 }
169 method([a]) => null; // testPositionalParameters:14 174 class Class extends A {
170 } 175 method([a]) => null; // testPositionalParameters:14
171 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 176 }
172 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 177 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
173 178 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
174 check(""" 179
175 class A { 180 check("""
176 method(a, b, [c, d, e]) => null; // testPositionalParameters:15 181 class A {
177 } 182 method(a, b, [c, d, e]) => null; // testPositionalParameters:15
178 class Class extends A { 183 }
179 method([a, b, c, d]) => null; // testPositionalParameters:16 184 class Class extends A {
180 } 185 method([a, b, c, d]) => null; // testPositionalParameters:16
181 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 186 }
182 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 187 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
188 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
189 ]);
183 } 190 }
184 191
185 testNamedParameters() { 192 Future testNamedParameters() {
186 check(""" 193 return Future.wait([
187 class A { 194 check("""
188 method({a}) => null; // testNamedParameters:1 195 class A {
189 } 196 method({a}) => null; // testNamedParameters:1
190 class Class extends A { 197 }
191 method({a}) => null; // testNamedParameters:2 198 class Class extends A {
192 } 199 method({a}) => null; // testNamedParameters:2
193 """); 200 }
194 201 """),
195 check(""" 202
196 class A { 203 check("""
197 method({a, b}) => null; // testNamedParameters:3 204 class A {
198 } 205 method({a, b}) => null; // testNamedParameters:3
199 class Class extends A { 206 }
200 method({b, a}) => null; // testNamedParameters:4 207 class Class extends A {
201 } 208 method({b, a}) => null; // testNamedParameters:4
202 """); 209 }
203 210 """),
204 check(""" 211
205 class A { 212 check("""
206 method({a, b, c}) => null; // testNamedParameters:5 213 class A {
207 } 214 method({a, b, c}) => null; // testNamedParameters:5
208 class Class extends A { 215 }
209 method({b, c, a, d}) => null; // testNamedParameters:6 216 class Class extends A {
210 } 217 method({b, c, a, d}) => null; // testNamedParameters:6
211 """); 218 }
212 219 """),
213 check(""" 220
214 class A { 221 check("""
215 method(d, {a, b, c}) => null; // testNamedParameters:7 222 class A {
216 } 223 method(d, {a, b, c}) => null; // testNamedParameters:7
217 class Class extends A { 224 }
218 method(e, {b, c, a, d}) => null; // testNamedParameters:8 225 class Class extends A {
219 } 226 method(e, {b, c, a, d}) => null; // testNamedParameters:8
220 """); 227 }
221 228 """),
222 check(""" 229
223 class A { 230 check("""
224 method({a}) => null; // testNamedParameters:9 231 class A {
225 } 232 method({a}) => null; // testNamedParameters:9
226 class Class extends A { 233 }
227 method() => null; // testNamedParameters:10 234 class Class extends A {
228 } 235 method() => null; // testNamedParameters:10
229 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 236 }
230 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 237 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
231 238 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
232 check(""" 239
233 class A { 240 check("""
234 method({a, b}) => null; // testNamedParameters:11 241 class A {
235 } 242 method({a, b}) => null; // testNamedParameters:11
236 class Class extends A { 243 }
237 method({b}) => null; // testNamedParameters:12 244 class Class extends A {
238 } 245 method({b}) => null; // testNamedParameters:12
239 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 246 }
240 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 247 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
241 248 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
242 check(""" 249
243 class A { 250 check("""
244 method({a, b, c, d}) => null; // testNamedParameters:13 251 class A {
245 } 252 method({a, b, c, d}) => null; // testNamedParameters:13
246 class Class extends A { 253 }
247 method({a, e, d, c}) => null; // testNamedParameters:14 254 class Class extends A {
248 } 255 method({a, e, d, c}) => null; // testNamedParameters:14
249 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 256 }
250 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 257 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
258 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
259 ]);
251 } 260 }
252 261
253 testNotSubtype() { 262 Future testNotSubtype() {
254 check(""" 263 return Future.wait([
255 class A { 264 check("""
256 method(int a) => null; // testNotSubtype:1 265 class A {
257 } 266 method(int a) => null; // testNotSubtype:1
258 class Class extends A { 267 }
259 method(int a) => null; // testNotSubtype:2 268 class Class extends A {
260 } 269 method(int a) => null; // testNotSubtype:2
261 """); 270 }
262 271 """),
263 check(""" 272
264 class A { 273 check("""
265 method(int a) => null; // testNotSubtype:3 274 class A {
266 } 275 method(int a) => null; // testNotSubtype:3
267 class Class extends A { 276 }
268 method(num a) => null; // testNotSubtype:4 277 class Class extends A {
269 } 278 method(num a) => null; // testNotSubtype:4
270 """); 279 }
271 280 """),
272 check(""" 281
273 class A { 282 check("""
274 void method() {} // testNotSubtype:5 283 class A {
275 } 284 void method() {} // testNotSubtype:5
276 class Class extends A { 285 }
277 method() => null; // testNotSubtype:6 286 class Class extends A {
278 } 287 method() => null; // testNotSubtype:6
279 """); 288 }
280 289 """),
281 check(""" 290
282 class A { 291 check("""
283 method() => null; // testNotSubtype:7 292 class A {
284 } 293 method() => null; // testNotSubtype:7
285 class Class extends A { 294 }
286 void method() {} // testNotSubtype:8 295 class Class extends A {
287 } 296 void method() {} // testNotSubtype:8
288 """); 297 }
289 298 """),
290 check(""" 299
291 class A { 300 check("""
292 void method() {} // testNotSubtype:9 301 class A {
293 } 302 void method() {} // testNotSubtype:9
294 class Class extends A { 303 }
295 int method() => null; // testNotSubtype:10 304 class Class extends A {
296 } 305 int method() => null; // testNotSubtype:10
297 """); 306 }
298 307 """),
299 check(""" 308
300 class A { 309 check("""
301 int method() => null; // testNotSubtype:11 310 class A {
302 } 311 int method() => null; // testNotSubtype:11
303 class Class extends A { 312 }
304 void method() {} // testNotSubtype:12 313 class Class extends A {
305 } 314 void method() {} // testNotSubtype:12
306 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 315 }
307 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 316 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
308 317 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
309 check(""" 318
310 class A { 319 check("""
311 method(int a) => null; // testNotSubtype:13 320 class A {
312 } 321 method(int a) => null; // testNotSubtype:13
313 class B extends A { 322 }
314 method(num a) => null; // testNotSubtype:14 323 class B extends A {
315 } 324 method(num a) => null; // testNotSubtype:14
316 class Class extends B { 325 }
317 method(double a) => null; // testNotSubtype:15 326 class Class extends B {
318 } 327 method(double a) => null; // testNotSubtype:15
319 """); 328 }
320 329 """),
321 check(""" 330
322 class A { 331 check("""
323 method(int a) => null; // testNotSubtype:16 332 class A {
324 } 333 method(int a) => null; // testNotSubtype:16
325 class B extends A { 334 }
326 method(a) => null; // testNotSubtype:17 335 class B extends A {
327 } 336 method(a) => null; // testNotSubtype:17
328 class Class extends B { 337 }
329 method(String a) => null; // testNotSubtype:18 338 class Class extends B {
330 } 339 method(String a) => null; // testNotSubtype:18
331 """); 340 }
332 341 """),
333 check(""" 342
334 class A { 343 check("""
335 method(int a) => null; // testNotSubtype:19 344 class A {
336 } 345 method(int a) => null; // testNotSubtype:19
337 class Class extends A { 346 }
338 method(String a) => null; // testNotSubtype:20 347 class Class extends A {
339 } 348 method(String a) => null; // testNotSubtype:20
340 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 349 }
341 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 350 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
342 351 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
343 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. 352
344 check(""" 353 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed.
345 class A { 354 check("""
346 method(int a) => null; // testNotSubtype:23 355 class A {
347 } 356 method(int a) => null; // testNotSubtype:23
348 class B { 357 }
349 method(num a) => null; // testNotSubtype:24 358 class B {
350 } 359 method(num a) => null; // testNotSubtype:24
351 abstract class C implements A, B { 360 }
352 } 361 abstract class C implements A, B {
353 class Class implements C { 362 }
354 method(double a) => null; // testNotSubtype:25 363 class Class implements C {
355 } 364 method(double a) => null; // testNotSubtype:25
356 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 365 }
357 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 366 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
358 367 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
359 check(""" 368
360 class A { 369 check("""
361 method(num a) => null; // testNotSubtype:29 370 class A {
362 } 371 method(num a) => null; // testNotSubtype:29
363 class B { 372 }
364 method(int a) => null; // testNotSubtype:30 373 class B {
365 } 374 method(int a) => null; // testNotSubtype:30
366 abstract class C implements A, B { 375 }
367 } 376 abstract class C implements A, B {
368 class Class implements C { 377 }
369 method(double a) => null; // testNotSubtype:31 378 class Class implements C {
370 } 379 method(double a) => null; // testNotSubtype:31
371 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 380 }
372 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 381 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
373 382 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
374 check(""" 383
375 class A { 384 check("""
376 method(int a) => null; // testNotSubtype:26 385 class A {
377 } 386 method(int a) => null; // testNotSubtype:26
378 class B { 387 }
379 method(num a) => null; // testNotSubtype:27 388 class B {
380 } 389 method(num a) => null; // testNotSubtype:27
381 abstract class C implements A, B { 390 }
382 } 391 abstract class C implements A, B {
383 class Class implements C { 392 }
384 method(String a) => null; // testNotSubtype:28 393 class Class implements C {
385 } 394 method(String a) => null; // testNotSubtype:28
386 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, 395 }
387 MessageKind.INVALID_OVERRIDE_METHOD], 396 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD,
388 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, 397 MessageKind.INVALID_OVERRIDE_METHOD],
389 MessageKind.INVALID_OVERRIDDEN_METHOD]); 398 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD,
399 MessageKind.INVALID_OVERRIDDEN_METHOD]),
400 ]);
390 } 401 }
391 402
392 testGetterNotSubtype() { 403 Future testGetterNotSubtype() {
393 check(""" 404 return Future.wait([
394 class A { 405 check("""
395 get getter => null; // testGetterNotSubtype:1 406 class A {
396 } 407 get getter => null; // testGetterNotSubtype:1
397 class Class extends A { 408 }
398 get getter => null; // testGetterNotSubtype:2 409 class Class extends A {
399 } 410 get getter => null; // testGetterNotSubtype:2
400 """); 411 }
401 412 """),
402 check(""" 413
403 class A { 414 check("""
404 num get getter => null; // testGetterNotSubtype:3 415 class A {
405 } 416 num get getter => null; // testGetterNotSubtype:3
406 class Class extends A { 417 }
407 num get getter => null; // testGetterNotSubtype:4 418 class Class extends A {
408 } 419 num get getter => null; // testGetterNotSubtype:4
409 """); 420 }
410 421 """),
411 check(""" 422
412 class A { 423 check("""
413 num get getter => null; // testGetterNotSubtype:5 424 class A {
414 } 425 num get getter => null; // testGetterNotSubtype:5
415 class Class extends A { 426 }
416 int get getter => null; // testGetterNotSubtype:6 427 class Class extends A {
417 } 428 int get getter => null; // testGetterNotSubtype:6
418 """); 429 }
419 430 """),
420 check(""" 431
421 class A { 432 check("""
422 int get getter => null; // testGetterNotSubtype:7 433 class A {
423 } 434 int get getter => null; // testGetterNotSubtype:7
424 class Class extends A { 435 }
425 num get getter => null; // testGetterNotSubtype:8 436 class Class extends A {
426 } 437 num get getter => null; // testGetterNotSubtype:8
427 """); 438 }
428 439 """),
429 check(""" 440
430 class A { 441 check("""
431 int get getter => null; // testGetterNotSubtype:9 442 class A {
432 } 443 int get getter => null; // testGetterNotSubtype:9
433 class Class extends A { 444 }
434 double get getter => null; // testGetterNotSubtype:10 445 class Class extends A {
435 } 446 double get getter => null; // testGetterNotSubtype:10
436 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, 447 }
437 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); 448 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER,
438 449 infos: MessageKind.INVALID_OVERRIDDEN_GETTER),
439 check(""" 450
440 class A { 451 check("""
441 int get getter => null; // testGetterNotSubtype:11 452 class A {
442 } 453 int get getter => null; // testGetterNotSubtype:11
443 class B extends A { 454 }
444 num get getter => null; // testGetterNotSubtype:12 455 class B extends A {
445 } 456 num get getter => null; // testGetterNotSubtype:12
446 class Class extends B { 457 }
447 double get getter => null; // testGetterNotSubtype:13 458 class Class extends B {
448 } 459 double get getter => null; // testGetterNotSubtype:13
449 """); 460 }
450 461 """),
451 check(""" 462
452 class A { 463 check("""
453 int get getter => null; // testGetterNotSubtype:14 464 class A {
454 } 465 int get getter => null; // testGetterNotSubtype:14
455 class B { 466 }
456 num get getter => null; // testGetterNotSubtype:15 467 class B {
457 } 468 num get getter => null; // testGetterNotSubtype:15
458 class Class extends A implements B { 469 }
459 double get getter => null; // testGetterNotSubtype:16 470 class Class extends A implements B {
460 } 471 double get getter => null; // testGetterNotSubtype:16
461 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, 472 }
462 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); 473 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER,
463 474 infos: MessageKind.INVALID_OVERRIDDEN_GETTER),
464 check(""" 475
465 class A { 476 check("""
466 int get getter => null; // testGetterNotSubtype:17 477 class A {
467 } 478 int get getter => null; // testGetterNotSubtype:17
468 class B { 479 }
469 String get getter => null; // testGetterNotSubtype:18 480 class B {
470 } 481 String get getter => null; // testGetterNotSubtype:18
471 class Class extends A implements B { 482 }
472 double get getter => null; // testGetterNotSubtype:19 483 class Class extends A implements B {
473 } 484 double get getter => null; // testGetterNotSubtype:19
474 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, 485 }
475 MessageKind.INVALID_OVERRIDE_GETTER], 486 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER,
476 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, 487 MessageKind.INVALID_OVERRIDE_GETTER],
477 MessageKind.INVALID_OVERRIDDEN_GETTER]); 488 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER,
478 489 MessageKind.INVALID_OVERRIDDEN_GETTER]),
479 check(""" 490
480 class A { 491 check("""
481 int get getter => null; // testGetterNotSubtype:20 492 class A {
482 } 493 int get getter => null; // testGetterNotSubtype:20
483 class B { 494 }
484 String get getter => null; // testGetterNotSubtype:21 495 class B {
485 } 496 String get getter => null; // testGetterNotSubtype:21
486 class Class implements A, B { 497 }
487 double get getter => null; // testGetterNotSubtype:22 498 class Class implements A, B {
488 } 499 double get getter => null; // testGetterNotSubtype:22
489 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, 500 }
490 MessageKind.INVALID_OVERRIDE_GETTER], 501 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER,
491 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, 502 MessageKind.INVALID_OVERRIDE_GETTER],
492 MessageKind.INVALID_OVERRIDDEN_GETTER]); 503 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER,
493 504 MessageKind.INVALID_OVERRIDDEN_GETTER]),
494 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. 505
495 check(""" 506 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed.
496 class A { 507 check("""
497 int get getter => null; // testGetterNotSubtype:23 508 class A {
498 } 509 int get getter => null; // testGetterNotSubtype:23
499 class B { 510 }
500 num get getter => null; // testGetterNotSubtype:24 511 class B {
501 } 512 num get getter => null; // testGetterNotSubtype:24
502 abstract class C implements A, B { 513 }
503 } 514 abstract class C implements A, B {
504 class Class implements C { 515 }
505 double get getter => null; // testGetterNotSubtype:25 516 class Class implements C {
506 } 517 double get getter => null; // testGetterNotSubtype:25
507 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, 518 }
508 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); 519 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER,
509 520 infos: MessageKind.INVALID_OVERRIDDEN_GETTER),
510 check(""" 521
511 class A { 522 check("""
512 int get getter => null; // testGetterNotSubtype:26 523 class A {
513 } 524 int get getter => null; // testGetterNotSubtype:26
514 class B { 525 }
515 num get getter => null; // testGetterNotSubtype:27 526 class B {
516 } 527 num get getter => null; // testGetterNotSubtype:27
517 abstract class C implements A, B { 528 }
518 } 529 abstract class C implements A, B {
519 class Class implements C { 530 }
520 String get getter => null; // testGetterNotSubtype:28 531 class Class implements C {
521 } 532 String get getter => null; // testGetterNotSubtype:28
522 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, 533 }
523 MessageKind.INVALID_OVERRIDE_GETTER], 534 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER,
524 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, 535 MessageKind.INVALID_OVERRIDE_GETTER],
525 MessageKind.INVALID_OVERRIDDEN_GETTER]); 536 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER,
537 MessageKind.INVALID_OVERRIDDEN_GETTER]),
538 ]);
526 } 539 }
527 540
528 testGenericNotSubtype() { 541 Future testGenericNotSubtype() {
529 check(""" 542 return Future.wait([
530 class A<T> { 543 check("""
531 method(T t) => null; // testGenericNotSubtype:1 544 class A<T> {
532 } 545 method(T t) => null; // testGenericNotSubtype:1
533 class Class<S> extends A<S> { 546 }
534 method(S s) => null; // testGenericNotSubtype:2 547 class Class<S> extends A<S> {
535 } 548 method(S s) => null; // testGenericNotSubtype:2
536 """); 549 }
537 550 """),
538 check(""" 551
539 class A<T> { 552 check("""
540 method(T t) => null; // testGenericNotSubtype:3 553 class A<T> {
541 } 554 method(T t) => null; // testGenericNotSubtype:3
542 class Class extends A<num> { 555 }
543 method(int i) => null; // testGenericNotSubtype:4 556 class Class extends A<num> {
544 } 557 method(int i) => null; // testGenericNotSubtype:4
545 """); 558 }
546 559 """),
547 check(""" 560
548 class A<T> { 561 check("""
549 method(T t) => null; // testGenericNotSubtype:5 562 class A<T> {
550 } 563 method(T t) => null; // testGenericNotSubtype:5
551 class B<S> { 564 }
552 method(S s) => null; // testGenericNotSubtype:6 565 class B<S> {
553 } 566 method(S s) => null; // testGenericNotSubtype:6
554 class Class extends A<double> implements B<int> { 567 }
555 method(num i) => null; // testGenericNotSubtype:7 568 class Class extends A<double> implements B<int> {
556 } 569 method(num i) => null; // testGenericNotSubtype:7
557 """); 570 }
558 571 """),
559 check(""" 572
560 class A<T> { 573 check("""
561 method(T t) => null; // testGenericNotSubtype:8 574 class A<T> {
562 } 575 method(T t) => null; // testGenericNotSubtype:8
563 class Class<S> extends A<S> { 576 }
564 method(int i) => null; // testGenericNotSubtype:9 577 class Class<S> extends A<S> {
565 } 578 method(int i) => null; // testGenericNotSubtype:9
566 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 579 }
567 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 580 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
568 581 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
569 check(""" 582
570 class A<T> { 583 check("""
571 method(T t) => null; // testGenericNotSubtype:10 584 class A<T> {
572 } 585 method(T t) => null; // testGenericNotSubtype:10
573 class B<S> extends A<S> { 586 }
574 587 class B<S> extends A<S> {
575 } 588
576 class Class<U> extends B<U> { 589 }
577 method(U u) => null; // testGenericNotSubtype:11 590 class Class<U> extends B<U> {
578 } 591 method(U u) => null; // testGenericNotSubtype:11
579 """); 592 }
580 593 """),
581 check(""" 594
582 class A<T> { 595 check("""
583 method(T t) => null; // testGenericNotSubtype:12 596 class A<T> {
584 } 597 method(T t) => null; // testGenericNotSubtype:12
585 class B<S> { 598 }
586 method(S s) => null; // testGenericNotSubtype:13 599 class B<S> {
587 } 600 method(S s) => null; // testGenericNotSubtype:13
588 class Class<U> extends A<U> implements B<num> { 601 }
589 method(int i) => null; // testGenericNotSubtype:14 602 class Class<U> extends A<U> implements B<num> {
590 } 603 method(int i) => null; // testGenericNotSubtype:14
591 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 604 }
592 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 605 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
593 606 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
594 check(""" 607
595 class A<T> { 608 check("""
596 method(T t) => null; // testGenericNotSubtype:15 609 class A<T> {
597 } 610 method(T t) => null; // testGenericNotSubtype:15
598 class B<S> { 611 }
599 method(S s) => null; // testGenericNotSubtype:16 612 class B<S> {
600 } 613 method(S s) => null; // testGenericNotSubtype:16
601 class Class extends A<int> implements B<String> { 614 }
602 method(double d) => null; // testGenericNotSubtype:17 615 class Class extends A<int> implements B<String> {
603 } 616 method(double d) => null; // testGenericNotSubtype:17
604 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, 617 }
605 MessageKind.INVALID_OVERRIDE_METHOD], 618 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD,
606 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, 619 MessageKind.INVALID_OVERRIDE_METHOD],
607 MessageKind.INVALID_OVERRIDDEN_METHOD]); 620 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD,
608 621 MessageKind.INVALID_OVERRIDDEN_METHOD]),
609 check(""" 622
610 class A<T> { 623 check("""
611 method(T t) => null; // testGenericNotSubtype:18 624 class A<T> {
612 } 625 method(T t) => null; // testGenericNotSubtype:18
613 class B<S> { 626 }
614 method(S s) => null; // testGenericNotSubtype:19 627 class B<S> {
615 } 628 method(S s) => null; // testGenericNotSubtype:19
616 class Class implements A<int>, B<String> { 629 }
617 method(double d) => null; // testGenericNotSubtype:20 630 class Class implements A<int>, B<String> {
618 } 631 method(double d) => null; // testGenericNotSubtype:20
619 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, 632 }
620 MessageKind.INVALID_OVERRIDE_METHOD], 633 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD,
621 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, 634 MessageKind.INVALID_OVERRIDE_METHOD],
622 MessageKind.INVALID_OVERRIDDEN_METHOD]); 635 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD,
623 636 MessageKind.INVALID_OVERRIDDEN_METHOD]),
624 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. 637
625 check(""" 638 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed.
626 class A<T> { 639 check("""
627 method(T t) => null; // testGenericNotSubtype:21 640 class A<T> {
628 } 641 method(T t) => null; // testGenericNotSubtype:21
629 class B<S> { 642 }
630 method(S s) => null; // testGenericNotSubtype:22 643 class B<S> {
631 } 644 method(S s) => null; // testGenericNotSubtype:22
632 abstract class C implements A<int>, B<num> { 645 }
633 } 646 abstract class C implements A<int>, B<num> {
634 class Class implements C { 647 }
635 method(double d) => null; // testGenericNotSubtype:23 648 class Class implements C {
636 } 649 method(double d) => null; // testGenericNotSubtype:23
637 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, 650 }
638 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); 651 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD,
639 652 infos: MessageKind.INVALID_OVERRIDDEN_METHOD),
640 check(""" 653
641 class A<T> { 654 check("""
642 method(T t) => null; // testGenericNotSubtype:24 655 class A<T> {
643 } 656 method(T t) => null; // testGenericNotSubtype:24
644 class B<S> { 657 }
645 method(S s) => null; // testGenericNotSubtype:25 658 class B<S> {
646 } 659 method(S s) => null; // testGenericNotSubtype:25
647 abstract class C implements A<int>, B<num> { 660 }
648 } 661 abstract class C implements A<int>, B<num> {
649 class Class implements C { 662 }
650 method(String s) => null; // testGenericNotSubtype:26 663 class Class implements C {
651 } 664 method(String s) => null; // testGenericNotSubtype:26
652 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, 665 }
653 MessageKind.INVALID_OVERRIDE_METHOD], 666 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD,
654 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, 667 MessageKind.INVALID_OVERRIDE_METHOD],
655 MessageKind.INVALID_OVERRIDDEN_METHOD]); 668 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD,
669 MessageKind.INVALID_OVERRIDDEN_METHOD]),
670 ]);
656 } 671 }
657 672
658 testSetterNotSubtype() { 673 Future testSetterNotSubtype() {
674 return Future.wait([
659 check(""" 675 check("""
660 class A { 676 class A {
661 set setter(_) => null; // testSetterNotSubtype:1 677 set setter(_) => null; // testSetterNotSubtype:1
662 } 678 }
663 class Class extends A { 679 class Class extends A {
664 set setter(_) => null; // testSetterNotSubtype:2 680 set setter(_) => null; // testSetterNotSubtype:2
665 } 681 }
666 """); 682 """),
667 683
668 check(""" 684 check("""
669 class A { 685 class A {
670 void set setter(_) {} // testSetterNotSubtype:3 686 void set setter(_) {} // testSetterNotSubtype:3
671 } 687 }
672 class Class extends A { 688 class Class extends A {
673 set setter(_) => null; // testSetterNotSubtype:4 689 set setter(_) => null; // testSetterNotSubtype:4
674 } 690 }
675 """); 691 """),
676 692
677 check(""" 693 check("""
678 class A { 694 class A {
679 set setter(_) => null; // testSetterNotSubtype:5 695 set setter(_) => null; // testSetterNotSubtype:5
680 } 696 }
681 class Class extends A { 697 class Class extends A {
682 void set setter(_) {} // testSetterNotSubtype:6 698 void set setter(_) {} // testSetterNotSubtype:6
683 } 699 }
684 """); 700 """),
685 701
686 check(""" 702 check("""
687 class A { 703 class A {
688 set setter(_) => null; // testSetterNotSubtype:7 704 set setter(_) => null; // testSetterNotSubtype:7
689 } 705 }
690 class Class extends A { 706 class Class extends A {
691 void set setter(_) {} // testSetterNotSubtype:8 707 void set setter(_) {} // testSetterNotSubtype:8
692 } 708 }
693 """); 709 """),
694 710
695 check(""" 711 check("""
696 class A { 712 class A {
697 set setter(num _) => null; // testSetterNotSubtype:9 713 set setter(num _) => null; // testSetterNotSubtype:9
698 } 714 }
699 class Class extends A { 715 class Class extends A {
700 set setter(num _) => null; // testSetterNotSubtype:10 716 set setter(num _) => null; // testSetterNotSubtype:10
701 } 717 }
702 """); 718 """),
703 719
704 check(""" 720 check("""
705 class A { 721 class A {
706 set setter(num _) => null; // testSetterNotSubtype:11 722 set setter(num _) => null; // testSetterNotSubtype:11
707 } 723 }
708 class Class extends A { 724 class Class extends A {
709 set setter(int _) => null; // testSetterNotSubtype:12 725 set setter(int _) => null; // testSetterNotSubtype:12
710 } 726 }
711 """); 727 """),
712 728
713 check(""" 729 check("""
714 class A { 730 class A {
715 set setter(int _) => null; // testSetterNotSubtype:13 731 set setter(int _) => null; // testSetterNotSubtype:13
716 } 732 }
717 class Class extends A { 733 class Class extends A {
718 set setter(num _) => null; // testSetterNotSubtype:14 734 set setter(num _) => null; // testSetterNotSubtype:14
719 } 735 }
720 """); 736 """),
721 737
722 check(""" 738 check("""
723 class A { 739 class A {
724 set setter(int _) => null; // testSetterNotSubtype:15 740 set setter(int _) => null; // testSetterNotSubtype:15
725 } 741 }
726 class Class extends A { 742 class Class extends A {
727 set setter(double _) => null; // testSetterNotSubtype:16 743 set setter(double _) => null; // testSetterNotSubtype:16
728 } 744 }
729 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, 745 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER,
730 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); 746 infos: MessageKind.INVALID_OVERRIDDEN_SETTER),
731 747
732 check(""" 748 check("""
733 class A { 749 class A {
734 set setter(int _) => null; // testSetterNotSubtype:17 750 set setter(int _) => null; // testSetterNotSubtype:17
735 } 751 }
736 class B extends A { 752 class B extends A {
737 set setter(num _) => null; // testSetterNotSubtype:18 753 set setter(num _) => null; // testSetterNotSubtype:18
738 } 754 }
739 class Class extends B { 755 class Class extends B {
740 set setter(double _) => null; // testSetterNotSubtype:19 756 set setter(double _) => null; // testSetterNotSubtype:19
741 } 757 }
742 """); 758 """),
743 759
744 check(""" 760 check("""
745 class A { 761 class A {
746 set setter(int _) => null; // testSetterNotSubtype:20 762 set setter(int _) => null; // testSetterNotSubtype:20
747 } 763 }
748 class B { 764 class B {
749 set setter(num _) => null; // testSetterNotSubtype:21 765 set setter(num _) => null; // testSetterNotSubtype:21
750 } 766 }
751 class Class extends A implements B { 767 class Class extends A implements B {
752 set setter(double _) => null; // testSetterNotSubtype:22 768 set setter(double _) => null; // testSetterNotSubtype:22
753 } 769 }
754 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, 770 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER,
755 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); 771 infos: MessageKind.INVALID_OVERRIDDEN_SETTER),
756 772
757 check(""" 773 check("""
758 class A { 774 class A {
759 set setter(int _) => null; // testSetterNotSubtype:23 775 set setter(int _) => null; // testSetterNotSubtype:23
760 } 776 }
761 class B { 777 class B {
762 set setter(String _) => null; // testSetterNotSubtype:24 778 set setter(String _) => null; // testSetterNotSubtype:24
763 } 779 }
764 class Class extends A implements B { 780 class Class extends A implements B {
765 set setter(double _) => null; // testSetterNotSubtype:25 781 set setter(double _) => null; // testSetterNotSubtype:25
766 } 782 }
767 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, 783 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER,
768 MessageKind.INVALID_OVERRIDE_SETTER], 784 MessageKind.INVALID_OVERRIDE_SETTER],
769 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, 785 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER,
770 MessageKind.INVALID_OVERRIDDEN_SETTER]); 786 MessageKind.INVALID_OVERRIDDEN_SETTER]),
771 787
772 check(""" 788 check("""
773 class A { 789 class A {
774 set setter(int _) => null; // testSetterNotSubtype:26 790 set setter(int _) => null; // testSetterNotSubtype:26
775 } 791 }
776 class B { 792 class B {
777 set setter(String _) => null; // testSetterNotSubtype:27 793 set setter(String _) => null; // testSetterNotSubtype:27
778 } 794 }
779 class Class implements A, B { 795 class Class implements A, B {
780 set setter(double _) => null; // testSetterNotSubtype:28 796 set setter(double _) => null; // testSetterNotSubtype:28
781 } 797 }
782 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, 798 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER,
783 MessageKind.INVALID_OVERRIDE_SETTER], 799 MessageKind.INVALID_OVERRIDE_SETTER],
784 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, 800 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER,
785 MessageKind.INVALID_OVERRIDDEN_SETTER]); 801 MessageKind.INVALID_OVERRIDDEN_SETTER]),
786 802
787 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. 803 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed.
788 check(""" 804 check("""
789 class A { 805 class A {
790 set setter(int _) => null; // testSetterNotSubtype:29 806 set setter(int _) => null; // testSetterNotSubtype:29
791 } 807 }
792 class B { 808 class B {
793 set setter(num _) => null; // testSetterNotSubtype:30 809 set setter(num _) => null; // testSetterNotSubtype:30
794 } 810 }
795 abstract class C implements A, B { 811 abstract class C implements A, B {
796 } 812 }
797 class Class implements C { 813 class Class implements C {
798 set setter(double _) => null; // testSetterNotSubtype:31 814 set setter(double _) => null; // testSetterNotSubtype:31
799 } 815 }
800 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, 816 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER,
801 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); 817 infos: MessageKind.INVALID_OVERRIDDEN_SETTER),
802 818
803 check(""" 819 check("""
804 class A { 820 class A {
805 set setter(int _) => null; // testSetterNotSubtype:32 821 set setter(int _) => null; // testSetterNotSubtype:32
806 } 822 }
807 class B { 823 class B {
808 set setter(num _) => null; // testSetterNotSubtype:33 824 set setter(num _) => null; // testSetterNotSubtype:33
809 } 825 }
810 abstract class C implements A, B { 826 abstract class C implements A, B {
811 } 827 }
812 class Class implements C { 828 class Class implements C {
813 set setter(String _) => null; // testSetterNotSubtype:34 829 set setter(String _) => null; // testSetterNotSubtype:34
814 } 830 }
815 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, 831 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER,
816 MessageKind.INVALID_OVERRIDE_SETTER], 832 MessageKind.INVALID_OVERRIDE_SETTER],
817 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, 833 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER,
818 MessageKind.INVALID_OVERRIDDEN_SETTER]); 834 MessageKind.INVALID_OVERRIDDEN_SETTER]),
835 ]);
819 } 836 }
820 837
821 testFieldNotSubtype() { 838 Future testFieldNotSubtype() {
822 check(""" 839 return Future.wait([
823 class A { 840 check("""
824 int field; // testFieldNotSubtype:1 841 class A {
825 } 842 int field; // testFieldNotSubtype:1
826 class Class extends A { 843 }
827 int field; // testFieldNotSubtype:2 844 class Class extends A {
828 } 845 int field; // testFieldNotSubtype:2
829 """); 846 }
830 847 """),
831 check(""" 848
832 class A { 849 check("""
833 num field; // testFieldNotSubtype:3 850 class A {
834 } 851 num field; // testFieldNotSubtype:3
835 class Class extends A { 852 }
836 int field; // testFieldNotSubtype:4 853 class Class extends A {
837 } 854 int field; // testFieldNotSubtype:4
838 """); 855 }
839 856 """),
840 check(""" 857
841 class A { 858 check("""
842 int field; // testFieldNotSubtype:5 859 class A {
843 } 860 int field; // testFieldNotSubtype:5
844 class Class extends A { 861 }
845 num field; // testFieldNotSubtype:6 862 class Class extends A {
846 } 863 num field; // testFieldNotSubtype:6
847 """); 864 }
848 865 """),
849 check(""" 866
850 class A { 867 check("""
851 int field; // testFieldNotSubtype:7 868 class A {
852 } 869 int field; // testFieldNotSubtype:7
853 class Class extends A { 870 }
854 double field; // testFieldNotSubtype:8 871 class Class extends A {
855 } 872 double field; // testFieldNotSubtype:8
856 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD, 873 }
857 infos: MessageKind.INVALID_OVERRIDDEN_FIELD); 874 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD,
858 875 infos: MessageKind.INVALID_OVERRIDDEN_FIELD),
859 check(""" 876
860 class A { 877 check("""
861 int field; // testFieldNotSubtype:9 878 class A {
862 } 879 int field; // testFieldNotSubtype:9
863 class B extends A { 880 }
864 num field; // testFieldNotSubtype:10 881 class B extends A {
865 } 882 num field; // testFieldNotSubtype:10
866 class Class extends B { 883 }
867 double field; // testFieldNotSubtype:11 884 class Class extends B {
868 } 885 double field; // testFieldNotSubtype:11
869 """); 886 }
870 887 """),
871 check(""" 888
872 class A { 889 check("""
873 num field; // testFieldNotSubtype:12 890 class A {
874 } 891 num field; // testFieldNotSubtype:12
875 class Class extends A { 892 }
876 int get field => null; // testFieldNotSubtype:13 893 class Class extends A {
877 } 894 int get field => null; // testFieldNotSubtype:13
878 """); 895 }
879 896 """),
880 check(""" 897
881 class A { 898 check("""
882 num field; // testFieldNotSubtype:14 899 class A {
883 } 900 num field; // testFieldNotSubtype:14
884 class Class extends A { 901 }
885 String get field => null; // testFieldNotSubtype:15 902 class Class extends A {
886 } 903 String get field => null; // testFieldNotSubtype:15
887 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, 904 }
888 infos: MessageKind.INVALID_OVERRIDDEN_FIELD); 905 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER,
889 906 infos: MessageKind.INVALID_OVERRIDDEN_FIELD),
890 check(""" 907
891 class A { 908 check("""
892 num get field => null; // testFieldNotSubtype:16 909 class A {
893 } 910 num get field => null; // testFieldNotSubtype:16
894 class Class extends A { 911 }
895 String field; // testFieldNotSubtype:17 912 class Class extends A {
896 } 913 String field; // testFieldNotSubtype:17
897 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, 914 }
898 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); 915 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD,
899 916 infos: MessageKind.INVALID_OVERRIDDEN_GETTER),
900 check(""" 917
901 class A { 918 check("""
902 num field; // testFieldNotSubtype:18 919 class A {
903 } 920 num field; // testFieldNotSubtype:18
904 class Class extends A { 921 }
905 set field(int _) {} // testFieldNotSubtype:19 922 class Class extends A {
906 } 923 set field(int _) {} // testFieldNotSubtype:19
907 """); 924 }
908 925 """),
909 check(""" 926
910 class A { 927 check("""
911 num field; // testFieldNotSubtype:19 928 class A {
912 } 929 num field; // testFieldNotSubtype:19
913 class Class extends A { 930 }
914 void set field(int _) {} // testFieldNotSubtype:20 931 class Class extends A {
915 } 932 void set field(int _) {} // testFieldNotSubtype:20
916 """); 933 }
917 934 """),
918 check(""" 935
919 class A { 936 check("""
920 set field(int _) {} // testFieldNotSubtype:21 937 class A {
921 } 938 set field(int _) {} // testFieldNotSubtype:21
922 class Class extends A { 939 }
923 num field; // testFieldNotSubtype:22 940 class Class extends A {
924 } 941 num field; // testFieldNotSubtype:22
925 """); 942 }
926 943 """),
927 check(""" 944
928 class A { 945 check("""
929 void set field(int _) {} // testFieldNotSubtype:23 946 class A {
930 } 947 void set field(int _) {} // testFieldNotSubtype:23
931 class Class extends A { 948 }
932 num field; // testFieldNotSubtype:24 949 class Class extends A {
933 } 950 num field; // testFieldNotSubtype:24
934 """); 951 }
935 952 """),
936 check(""" 953
937 class A { 954 check("""
938 num field; // testFieldNotSubtype:25 955 class A {
939 } 956 num field; // testFieldNotSubtype:25
940 class Class extends A { 957 }
941 set field(String _) {} // testFieldNotSubtype:26 958 class Class extends A {
942 } 959 set field(String _) {} // testFieldNotSubtype:26
943 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER, 960 }
944 infos: MessageKind.INVALID_OVERRIDDEN_FIELD); 961 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER,
945 962 infos: MessageKind.INVALID_OVERRIDDEN_FIELD),
946 check(""" 963
947 class A { 964 check("""
948 set field(num _) {} // testFieldNotSubtype:27 965 class A {
949 } 966 set field(num _) {} // testFieldNotSubtype:27
950 class Class extends A { 967 }
951 String field; // testFieldNotSubtype:28 968 class Class extends A {
952 } 969 String field; // testFieldNotSubtype:28
953 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD, 970 }
954 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); 971 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD,
955 972 infos: MessageKind.INVALID_OVERRIDDEN_SETTER),
956 check(""" 973
957 class A { 974 check("""
958 int field; // testFieldNotSubtype:29 975 class A {
959 } 976 int field; // testFieldNotSubtype:29
960 class Class implements A { 977 }
961 String get field => null; // testFieldNotSubtype:30 978 class Class implements A {
962 void set field(String s) {} // testFieldNotSubtype:31 979 String get field => null; // testFieldNotSubtype:30
963 } 980 void set field(String s) {} // testFieldNotSubtype:31
964 """, warnings: [MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, 981 }
965 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER], 982 """, warnings: [MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER,
966 infos: [MessageKind.INVALID_OVERRIDDEN_FIELD, 983 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER],
967 MessageKind.INVALID_OVERRIDDEN_FIELD]); 984 infos: [MessageKind.INVALID_OVERRIDDEN_FIELD,
968 985 MessageKind.INVALID_OVERRIDDEN_FIELD]),
969 986
970 check(""" 987
971 class A { 988 check("""
972 String get field => null; // testFieldNotSubtype:32 989 class A {
973 void set field(String s) {} // testFieldNotSubtype:33 990 String get field => null; // testFieldNotSubtype:32
974 } 991 void set field(String s) {} // testFieldNotSubtype:33
975 class Class implements A { 992 }
976 int field; // testFieldNotSubtype:34 993 class Class implements A {
977 } 994 int field; // testFieldNotSubtype:34
978 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, 995 }
979 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD], 996 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD,
980 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, 997 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD],
981 MessageKind.INVALID_OVERRIDDEN_SETTER]); 998 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER,
999 MessageKind.INVALID_OVERRIDDEN_SETTER]),
1000 ]);
982 } 1001 }
983 1002
984 testMixedOverride() { 1003 Future testMixedOverride() {
985 check(""" 1004 return Future.wait([
986 class A { 1005 check("""
987 var member; // testMixedOverride:1 1006 class A {
988 } 1007 var member; // testMixedOverride:1
989 class Class extends A { 1008 }
990 member() {} // testMixedOverride:2 1009 class Class extends A {
991 } 1010 member() {} // testMixedOverride:2
992 """, errors: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD, 1011 }
993 infos: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT); 1012 """, errors: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
994 1013 infos: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT),
995 check(""" 1014
996 class A { 1015 check("""
997 member() {} // testMixedOverride:3 1016 class A {
998 } 1017 member() {} // testMixedOverride:3
999 class Class extends A { 1018 }
1000 var member; // testMixedOverride:4 1019 class Class extends A {
1001 } 1020 var member; // testMixedOverride:4
1002 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD, 1021 }
1003 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT); 1022 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD,
1004 1023 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT),
1005 check(""" 1024
1006 class A { 1025 check("""
1007 get member => null; // testMixedOverride:5 1026 class A {
1008 } 1027 get member => null; // testMixedOverride:5
1009 class Class extends A { 1028 }
1010 member() {} // testMixedOverride:6 1029 class Class extends A {
1011 } 1030 member() {} // testMixedOverride:6
1012 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, 1031 }
1013 infos: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT); 1032 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD,
1014 1033 infos: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT),
1015 check(""" 1034
1016 class A { 1035 check("""
1017 member() {} // testMixedOverride:7 1036 class A {
1018 } 1037 member() {} // testMixedOverride:7
1019 class Class extends A { 1038 }
1020 get member => null; // testMixedOverride:8 1039 class Class extends A {
1021 } 1040 get member => null; // testMixedOverride:8
1022 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, 1041 }
1023 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT); 1042 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
1024 1043 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT),
1025 check(""" 1044
1026 abstract class A { 1045 check("""
1027 var member; // testMixedOverride:9 1046 abstract class A {
1028 } 1047 var member; // testMixedOverride:9
1029 abstract class B { 1048 }
1030 get member; // testMixedOverride:10 1049 abstract class B {
1031 } 1050 get member; // testMixedOverride:10
1032 abstract class Class implements A, B { 1051 }
1033 } 1052 abstract class Class implements A, B {
1034 """); 1053 }
1035 1054 """),
1036 check(""" 1055
1037 abstract class A { 1056 check("""
1038 var member; // testMixedOverride:11 1057 abstract class A {
1039 } 1058 var member; // testMixedOverride:11
1040 abstract class B { 1059 }
1041 member() {} // testMixedOverride:12 1060 abstract class B {
1042 } 1061 member() {} // testMixedOverride:12
1043 abstract class Class implements A, B { 1062 }
1044 } 1063 abstract class Class implements A, B {
1045 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, 1064 }
1046 infos: [MessageKind.INHERITED_METHOD, 1065 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD,
1047 MessageKind.INHERITED_IMPLICIT_GETTER]); 1066 infos: [MessageKind.INHERITED_METHOD,
1048 1067 MessageKind.INHERITED_IMPLICIT_GETTER]),
1049 check(""" 1068
1050 abstract class A { 1069 check("""
1051 get member; // testMixedOverride:13 1070 abstract class A {
1052 } 1071 get member; // testMixedOverride:13
1053 abstract class B { 1072 }
1054 member() {} // testMixedOverride:14 1073 abstract class B {
1055 } 1074 member() {} // testMixedOverride:14
1056 abstract class Class implements A, B { 1075 }
1057 } 1076 abstract class Class implements A, B {
1058 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, 1077 }
1059 infos: [MessageKind.INHERITED_METHOD, 1078 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD,
1060 MessageKind.INHERITED_EXPLICIT_GETTER]); 1079 infos: [MessageKind.INHERITED_METHOD,
1061 1080 MessageKind.INHERITED_EXPLICIT_GETTER]),
1062 check(""" 1081
1063 abstract class A { 1082 check("""
1064 get member; // testMixedOverride:15 1083 abstract class A {
1065 } 1084 get member; // testMixedOverride:15
1066 abstract class B { 1085 }
1067 member() {} // testMixedOverride:16 1086 abstract class B {
1068 } 1087 member() {} // testMixedOverride:16
1069 abstract class C { 1088 }
1070 var member; // testMixedOverride:17 1089 abstract class C {
1071 } 1090 var member; // testMixedOverride:17
1072 abstract class D { 1091 }
1073 member() {} // testMixedOverride:18 1092 abstract class D {
1074 } 1093 member() {} // testMixedOverride:18
1075 abstract class E { 1094 }
1076 get member; // testMixedOverride:19 1095 abstract class E {
1077 } 1096 get member; // testMixedOverride:19
1078 abstract class Class implements A, B, C, D, E { 1097 }
1079 } 1098 abstract class Class implements A, B, C, D, E {
1080 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, 1099 }
1081 infos: [MessageKind.INHERITED_EXPLICIT_GETTER, 1100 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD,
1082 MessageKind.INHERITED_METHOD, 1101 infos: [MessageKind.INHERITED_EXPLICIT_GETTER,
1083 MessageKind.INHERITED_IMPLICIT_GETTER, 1102 MessageKind.INHERITED_METHOD,
1084 MessageKind.INHERITED_METHOD, 1103 MessageKind.INHERITED_IMPLICIT_GETTER,
1085 MessageKind.INHERITED_EXPLICIT_GETTER]); 1104 MessageKind.INHERITED_METHOD,
1086 1105 MessageKind.INHERITED_EXPLICIT_GETTER]),
1087 check(""" 1106
1088 abstract class A { 1107 check("""
1089 get member; // testMixedOverride:20 1108 abstract class A {
1090 } 1109 get member; // testMixedOverride:20
1091 abstract class B { 1110 }
1092 member() {} // testMixedOverride:21 1111 abstract class B {
1093 } 1112 member() {} // testMixedOverride:21
1094 abstract class C implements A, B { 1113 }
1095 } 1114 abstract class C implements A, B {
1096 class Class extends C { 1115 }
1097 member() {} // testMixedOverride:22 1116 class Class extends C {
1098 } 1117 member() {} // testMixedOverride:22
1099 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, 1118 }
1100 warnings: MessageKind.INHERIT_GETTER_AND_METHOD, 1119 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD,
1101 infos: [MessageKind.INHERITED_METHOD, 1120 warnings: MessageKind.INHERIT_GETTER_AND_METHOD,
1102 MessageKind.INHERITED_EXPLICIT_GETTER, 1121 infos: [MessageKind.INHERITED_METHOD,
1103 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT]); 1122 MessageKind.INHERITED_EXPLICIT_GETTER,
1104 1123 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT]),
1105 check(""" 1124
1106 abstract class A { 1125 check("""
1107 get member; // testMixedOverride:23 1126 abstract class A {
1108 } 1127 get member; // testMixedOverride:23
1109 abstract class B { 1128 }
1110 member() {} // testMixedOverride:24 1129 abstract class B {
1111 } 1130 member() {} // testMixedOverride:24
1112 abstract class C implements A, B { 1131 }
1113 } 1132 abstract class C implements A, B {
1114 class Class extends C { 1133 }
1115 get member => null; // testMixedOverride:25 1134 class Class extends C {
1116 } 1135 get member => null; // testMixedOverride:25
1117 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, 1136 }
1118 warnings: MessageKind.INHERIT_GETTER_AND_METHOD, 1137 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
1119 infos: [MessageKind.INHERITED_METHOD, 1138 warnings: MessageKind.INHERIT_GETTER_AND_METHOD,
1120 MessageKind.INHERITED_EXPLICIT_GETTER, 1139 infos: [MessageKind.INHERITED_METHOD,
1121 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT]); 1140 MessageKind.INHERITED_EXPLICIT_GETTER,
1141 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT]),
1142 ]);
1122 } 1143 }
1123 1144
1124 testAbstractMethods() { 1145 Future testAbstractMethods() {
1125 check(""" 1146 return Future.wait([
1126 abstract class Class { 1147 check("""
1127 method(); // testAbstractMethod:1 1148 abstract class Class {
1128 } 1149 method(); // testAbstractMethod:1
1129 """); 1150 }
1130 1151 """),
1131 check(""" 1152
1132 class Class { 1153 check("""
1133 method(); // testAbstractMethod:2 1154 class Class {
1134 } 1155 method(); // testAbstractMethod:2
1135 """, warnings: MessageKind.ABSTRACT_METHOD, 1156 }
1136 infos: []); 1157 """, warnings: MessageKind.ABSTRACT_METHOD,
1137 1158 infos: []),
1138 check(""" 1159
1139 class Class { 1160 check("""
1140 get getter; // testAbstractMethod:3 1161 class Class {
1141 } 1162 get getter; // testAbstractMethod:3
1142 """, warnings: MessageKind.ABSTRACT_GETTER, 1163 }
1143 infos: []); 1164 """, warnings: MessageKind.ABSTRACT_GETTER,
1144 1165 infos: []),
1145 check(""" 1166
1146 class Class { 1167 check("""
1147 set setter(_); // testAbstractMethod:4 1168 class Class {
1148 } 1169 set setter(_); // testAbstractMethod:4
1149 """, warnings: MessageKind.ABSTRACT_SETTER, 1170 }
1150 infos: []); 1171 """, warnings: MessageKind.ABSTRACT_SETTER,
1151 1172 infos: []),
1152 check(""" 1173
1153 abstract class A { 1174 check("""
1154 method(); // testAbstractMethod:5 1175 abstract class A {
1155 } 1176 method(); // testAbstractMethod:5
1156 class Class extends A { 1177 }
1157 method() {} // testAbstractMethod:6 1178 class Class extends A {
1158 } 1179 method() {} // testAbstractMethod:6
1159 """); 1180 }
1160 1181 """),
1161 check(""" 1182
1162 abstract class A { 1183 check("""
1163 method(); // testAbstractMethod:7 1184 abstract class A {
1164 } 1185 method(); // testAbstractMethod:7
1165 class Class extends A { 1186 }
1166 method([a]) {} // testAbstractMethod:8 1187 class Class extends A {
1167 } 1188 method([a]) {} // testAbstractMethod:8
1168 """); 1189 }
1169 1190 """),
1170 check(""" 1191
1171 abstract class A { 1192 check("""
1172 method(); // testAbstractMethod:9 1193 abstract class A {
1173 } 1194 method(); // testAbstractMethod:9
1174 class Class extends A { 1195 }
1175 } 1196 class Class extends A {
1176 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1197 }
1177 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1198 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1178 1199 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1179 check(""" 1200
1180 abstract class A { 1201 check("""
1181 get getter; // testAbstractMethod:10 1202 abstract class A {
1182 } 1203 get getter; // testAbstractMethod:10
1183 class Class extends A { 1204 }
1184 } 1205 class Class extends A {
1185 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, 1206 }
1186 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER); 1207 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE,
1187 1208 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER),
1188 check(""" 1209
1189 abstract class A { 1210 check("""
1190 set setter(_); // testAbstractMethod:11 1211 abstract class A {
1191 } 1212 set setter(_); // testAbstractMethod:11
1192 class Class extends A { 1213 }
1193 } 1214 class Class extends A {
1194 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, 1215 }
1195 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER); 1216 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE,
1196 1217 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER),
1197 check(""" 1218
1198 abstract class A { 1219 check("""
1199 method(); // testAbstractMethod:12 1220 abstract class A {
1200 } 1221 method(); // testAbstractMethod:12
1201 class B { 1222 }
1202 method() {} // testAbstractMethod:13 1223 class B {
1203 } 1224 method() {} // testAbstractMethod:13
1204 class Class extends A implements B { 1225 }
1205 } 1226 class Class extends A implements B {
1206 """, warnings: MessageKind.UNIMPLEMENTED_METHOD, 1227 }
1207 infos: [MessageKind.UNIMPLEMENTED_METHOD_CONT, 1228 """, warnings: MessageKind.UNIMPLEMENTED_METHOD,
1208 MessageKind.UNIMPLEMENTED_METHOD_CONT]); 1229 infos: [MessageKind.UNIMPLEMENTED_METHOD_CONT,
1209 1230 MessageKind.UNIMPLEMENTED_METHOD_CONT]),
1210 check(""" 1231
1211 abstract class A { 1232 check("""
1212 get getter; // testAbstractMethod:14 1233 abstract class A {
1213 } 1234 get getter; // testAbstractMethod:14
1214 class B { 1235 }
1215 get getter => 0; // testAbstractMethod:15 1236 class B {
1216 } 1237 get getter => 0; // testAbstractMethod:15
1217 class Class extends A implements B { 1238 }
1218 } 1239 class Class extends A implements B {
1219 """, warnings: MessageKind.UNIMPLEMENTED_GETTER, 1240 }
1220 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, 1241 """, warnings: MessageKind.UNIMPLEMENTED_GETTER,
1221 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER]); 1242 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
1222 1243 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER]),
1223 check(""" 1244
1224 abstract class A { 1245 check("""
1225 set setter(_); // testAbstractMethod:16 1246 abstract class A {
1226 } 1247 set setter(_); // testAbstractMethod:16
1227 class B { 1248 }
1228 set setter(_) {} // testAbstractMethod:17 1249 class B {
1229 } 1250 set setter(_) {} // testAbstractMethod:17
1230 class Class extends A implements B { 1251 }
1231 } 1252 class Class extends A implements B {
1232 """, warnings: MessageKind.UNIMPLEMENTED_SETTER, 1253 }
1233 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, 1254 """, warnings: MessageKind.UNIMPLEMENTED_SETTER,
1234 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER]); 1255 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
1235 1256 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER]),
1236 check(""" 1257
1237 abstract class A { 1258 check("""
1238 get field; // testAbstractMethod:18 1259 abstract class A {
1239 } 1260 get field; // testAbstractMethod:18
1240 class B { 1261 }
1241 var field; // testAbstractMethod:19 1262 class B {
1242 } 1263 var field; // testAbstractMethod:19
1243 class Class extends A implements B { 1264 }
1244 set field(_) {} // testAbstractMethod:20 1265 class Class extends A implements B {
1245 } 1266 set field(_) {} // testAbstractMethod:20
1246 """, warnings: MessageKind.UNIMPLEMENTED_GETTER, 1267 }
1247 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, 1268 """, warnings: MessageKind.UNIMPLEMENTED_GETTER,
1248 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER]); 1269 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
1249 1270 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER]),
1250 check(""" 1271
1251 abstract class A { 1272 check("""
1252 set field(_); // testAbstractMethod:21 1273 abstract class A {
1253 } 1274 set field(_); // testAbstractMethod:21
1254 class B { 1275 }
1255 var field; // testAbstractMethod:22 1276 class B {
1256 } 1277 var field; // testAbstractMethod:22
1257 class Class extends A implements B { 1278 }
1258 get field => 0; // testAbstractMethod:23 1279 class Class extends A implements B {
1259 } 1280 get field => 0; // testAbstractMethod:23
1260 """, warnings: MessageKind.UNIMPLEMENTED_SETTER, 1281 }
1261 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, 1282 """, warnings: MessageKind.UNIMPLEMENTED_SETTER,
1262 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); 1283 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
1263 1284 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]),
1264 check(""" 1285
1265 class A { 1286 check("""
1266 method() {} // testAbstractMethod:24 1287 class A {
1267 } 1288 method() {} // testAbstractMethod:24
1268 class Class implements A { 1289 }
1269 method() {} // testAbstractMethod:25 1290 class Class implements A {
1270 } 1291 method() {} // testAbstractMethod:25
1271 """); 1292 }
1272 1293 """),
1273 check(""" 1294
1274 class A { 1295 check("""
1275 method() {} // testAbstractMethod:26 1296 class A {
1276 } 1297 method() {} // testAbstractMethod:26
1277 class Class implements A { 1298 }
1278 method([a]) {} // testAbstractMethod:27 1299 class Class implements A {
1279 } 1300 method([a]) {} // testAbstractMethod:27
1280 """); 1301 }
1281 1302 """),
1282 check(""" 1303
1283 class A { 1304 check("""
1284 method() {} // testAbstractMethod:28 1305 class A {
1285 } 1306 method() {} // testAbstractMethod:28
1286 class Class implements A { 1307 }
1287 } 1308 class Class implements A {
1288 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1309 }
1289 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1310 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1290 1311 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1291 check(""" 1312
1292 class A { 1313 check("""
1293 method() {} // testAbstractMethod:29 1314 class A {
1294 } 1315 method() {} // testAbstractMethod:29
1295 class B { 1316 }
1296 method() {} // testAbstractMethod:30 1317 class B {
1297 } 1318 method() {} // testAbstractMethod:30
1298 class Class extends A implements B { 1319 }
1299 } 1320 class Class extends A implements B {
1300 """); 1321 }
1301 1322 """),
1302 check(""" 1323
1303 class A { 1324 check("""
1304 var member; // testAbstractMethod:31 1325 class A {
1305 } 1326 var member; // testAbstractMethod:31
1306 class Class implements A { 1327 }
1307 } 1328 class Class implements A {
1308 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER_ONE, 1329 }
1309 MessageKind.UNIMPLEMENTED_SETTER_ONE], 1330 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER_ONE,
1310 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, 1331 MessageKind.UNIMPLEMENTED_SETTER_ONE],
1311 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); 1332 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER,
1312 1333 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]),
1313 check(""" 1334
1314 class A { 1335 check("""
1315 var member; // testAbstractMethod:32 1336 class A {
1316 } 1337 var member; // testAbstractMethod:32
1317 class B { 1338 }
1318 get member => null; // testAbstractMethod:33 1339 class B {
1319 set member(_) {} // testAbstractMethod:34 1340 get member => null; // testAbstractMethod:33
1320 } 1341 set member(_) {} // testAbstractMethod:34
1321 class Class implements A, B { 1342 }
1322 } 1343 class Class implements A, B {
1323 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER, 1344 }
1324 MessageKind.UNIMPLEMENTED_SETTER], 1345 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER,
1325 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, 1346 MessageKind.UNIMPLEMENTED_SETTER],
1326 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, 1347 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
1327 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, 1348 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER,
1328 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); 1349 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
1329 1350 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]),
1330 check(""" 1351
1331 class A { 1352 check("""
1332 var member; // testAbstractMethod:35 1353 class A {
1333 } 1354 var member; // testAbstractMethod:35
1334 class B { 1355 }
1335 var member; // testAbstractMethod:36 1356 class B {
1336 } 1357 var member; // testAbstractMethod:36
1337 class Class implements A, B { 1358 }
1338 } 1359 class Class implements A, B {
1339 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER, 1360 }
1340 MessageKind.UNIMPLEMENTED_SETTER], 1361 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER,
1341 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, 1362 MessageKind.UNIMPLEMENTED_SETTER],
1342 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, 1363 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER,
1343 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER, 1364 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER,
1344 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); 1365 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER,
1345 1366 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]),
1346 check(""" 1367
1347 class A { 1368 check("""
1348 get member => 0; // testAbstractMethod:37 1369 class A {
1349 } 1370 get member => 0; // testAbstractMethod:37
1350 class Class implements A { 1371 }
1351 } 1372 class Class implements A {
1352 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, 1373 }
1353 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER); 1374 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE,
1354 1375 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER),
1355 check(""" 1376
1356 class A { 1377 check("""
1357 set member(_) {} // testAbstractMethod:38 1378 class A {
1358 } 1379 set member(_) {} // testAbstractMethod:38
1359 class Class implements A { 1380 }
1360 } 1381 class Class implements A {
1361 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, 1382 }
1362 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER); 1383 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE,
1363 1384 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER),
1364 check(""" 1385
1365 class A { 1386 check("""
1366 var member; // testAbstractMethod:39 1387 class A {
1367 } 1388 var member; // testAbstractMethod:39
1368 class Class implements A { 1389 }
1369 get member => 0; 1390 class Class implements A {
1370 } 1391 get member => 0;
1371 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, 1392 }
1372 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER); 1393 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE,
1373 1394 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER),
1374 check(""" 1395
1375 class A { 1396 check("""
1376 var field; // testAbstractMethod:40 1397 class A {
1377 } 1398 var field; // testAbstractMethod:40
1378 class Class implements A { 1399 }
1379 final field = 0; // testAbstractMethod:41 1400 class Class implements A {
1380 } 1401 final field = 0; // testAbstractMethod:41
1381 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, 1402 }
1382 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER); 1403 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE,
1383 1404 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER),
1384 check(""" 1405
1385 class A { 1406 check("""
1386 var member; // testAbstractMethod:42 1407 class A {
1387 } 1408 var member; // testAbstractMethod:42
1388 class Class implements A { 1409 }
1389 set member(_) {} 1410 class Class implements A {
1390 } 1411 set member(_) {}
1391 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, 1412 }
1392 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER); 1413 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE,
1393 1414 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER),
1394 check(""" 1415
1395 abstract class A { 1416 check("""
1396 method() {} // testAbstractMethod:43 1417 abstract class A {
1397 } 1418 method() {} // testAbstractMethod:43
1398 class Class extends A { 1419 }
1399 method(); 1420 class Class extends A {
1400 } 1421 method();
1401 """); 1422 }
1423 """),
1424 ]);
1402 } 1425 }
1403 1426
1404 testNoSuchMethod() { 1427 Future testNoSuchMethod() {
1405 check(""" 1428 return Future.wait([
1406 class Class { 1429 check("""
1407 method(); // testNoSuchMethod:1 1430 class Class {
1408 } 1431 method(); // testNoSuchMethod:1
1409 """, warnings: MessageKind.ABSTRACT_METHOD, 1432 }
1410 infos: []); 1433 """, warnings: MessageKind.ABSTRACT_METHOD,
1411 1434 infos: []),
1412 check(""" 1435
1413 @proxy 1436 check("""
1414 class Class { 1437 @proxy
1415 method(); // testNoSuchMethod:2 1438 class Class {
1416 } 1439 method(); // testNoSuchMethod:2
1417 """, warnings: MessageKind.ABSTRACT_METHOD, 1440 }
1418 infos: []); 1441 """, warnings: MessageKind.ABSTRACT_METHOD,
1419 1442 infos: []),
1420 check(""" 1443
1421 class Class { 1444 check("""
1422 noSuchMethod(_) => null; 1445 class Class {
1423 method(); // testNoSuchMethod:3 1446 noSuchMethod(_) => null;
1424 } 1447 method(); // testNoSuchMethod:3
1425 """); 1448 }
1426 1449 """),
1427 check(""" 1450
1428 class Class { 1451 check("""
1429 noSuchMethod(_, [__]) => null; 1452 class Class {
1430 method(); // testNoSuchMethod:4 1453 noSuchMethod(_, [__]) => null;
1431 } 1454 method(); // testNoSuchMethod:4
1432 """); 1455 }
1433 1456 """),
1434 check(""" 1457
1435 class Class { 1458 check("""
1436 noSuchMethod(_); 1459 class Class {
1437 method(); // testNoSuchMethod:5 1460 noSuchMethod(_);
1438 } 1461 method(); // testNoSuchMethod:5
1439 """); 1462 }
1440 1463 """),
1441 check(""" 1464
1442 abstract class A { 1465 check("""
1443 method(); // testNoSuchMethod:6 1466 abstract class A {
1444 } 1467 method(); // testNoSuchMethod:6
1445 class Class extends A { 1468 }
1446 } 1469 class Class extends A {
1447 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1470 }
1448 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1471 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1449 1472 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1450 check(""" 1473
1451 abstract class A { 1474 check("""
1452 method(); // testNoSuchMethod:7 1475 abstract class A {
1453 } 1476 method(); // testNoSuchMethod:7
1454 @proxy 1477 }
1455 class Class extends A { 1478 @proxy
1456 } 1479 class Class extends A {
1457 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1480 }
1458 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1481 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1459 1482 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1460 check(""" 1483
1461 abstract class A { 1484 check("""
1462 method(); // testNoSuchMethod:8 1485 abstract class A {
1463 } 1486 method(); // testNoSuchMethod:8
1464 class Class extends A { 1487 }
1465 noSuchMethod(_) => null; 1488 class Class extends A {
1466 } 1489 noSuchMethod(_) => null;
1467 """); 1490 }
1468 1491 """),
1469 check(""" 1492
1470 class A { 1493 check("""
1471 method() {} // testNoSuchMethod:9 1494 class A {
1472 } 1495 method() {} // testNoSuchMethod:9
1473 class Class implements A { 1496 }
1474 } 1497 class Class implements A {
1475 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1498 }
1476 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1499 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1477 1500 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1478 check(""" 1501
1479 class A { 1502 check("""
1480 method() {} // testNoSuchMethod:10 1503 class A {
1481 } 1504 method() {} // testNoSuchMethod:10
1482 class Class implements A { 1505 }
1483 } 1506 class Class implements A {
1484 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1507 }
1485 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1508 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1486 1509 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1487 check(""" 1510
1488 class A { 1511 check("""
1489 method() {} // testNoSuchMethod:11 1512 class A {
1490 } 1513 method() {} // testNoSuchMethod:11
1491 @proxy 1514 }
1492 class Class implements A { 1515 @proxy
1493 } 1516 class Class implements A {
1494 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1517 }
1495 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1518 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1496 1519 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1497 check(""" 1520
1498 class A { 1521 check("""
1499 method() {} // testNoSuchMethod:12 1522 class A {
1500 } 1523 method() {} // testNoSuchMethod:12
1501 class Class implements A { 1524 }
1502 noSuchMethod(_) => null; 1525 class Class implements A {
1503 } 1526 noSuchMethod(_) => null;
1504 """); 1527 }
1505 1528 """),
1506 check(""" 1529
1507 class A { 1530 check("""
1508 noSuchMethod(_) => null; 1531 class A {
1509 method(); // testNoSuchMethod:13 1532 noSuchMethod(_) => null;
1510 } 1533 method(); // testNoSuchMethod:13
1511 class Class extends A { 1534 }
1512 } 1535 class Class extends A {
1513 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, 1536 }
1514 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); 1537 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE,
1538 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT),
1539 ]);
1515 } 1540 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/null_type_test.dart ('k') | tests/compiler/dart2js/part_of_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698