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

Side by Side Diff: pkg/analyzer/test/generated/non_error_resolver_test.dart

Issue 1183723002: Explicitly compute library errors in tests. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 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
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 library engine.non_error_resolver_test; 5 library engine.non_error_resolver_test;
6 6
7 import 'package:analyzer/src/generated/ast.dart'; 7 import 'package:analyzer/src/generated/ast.dart';
8 import 'package:analyzer/src/generated/element.dart'; 8 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/engine.dart'; 9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/error.dart'; 10 import 'package:analyzer/src/generated/error.dart';
(...skipping 11 matching lines...) Expand all
22 } 22 }
23 23
24 @reflectiveTest 24 @reflectiveTest
25 class NonErrorResolverTest extends ResolverTestCase { 25 class NonErrorResolverTest extends ResolverTestCase {
26 void fail_undefinedEnumConstant() { 26 void fail_undefinedEnumConstant() {
27 Source source = addSource(r''' 27 Source source = addSource(r'''
28 enum E { ONE } 28 enum E { ONE }
29 E e() { 29 E e() {
30 return E.TWO; 30 return E.TWO;
31 }'''); 31 }''');
32 resolve(source); 32 computeLibrarySourceErrors(source);
33 assertNoErrors(source); 33 assertNoErrors(source);
34 verify([source]); 34 verify([source]);
35 } 35 }
36 36
37 void test_ambiguousExport() { 37 void test_ambiguousExport() {
38 Source source = addSource(r''' 38 Source source = addSource(r'''
39 library L; 39 library L;
40 export 'lib1.dart'; 40 export 'lib1.dart';
41 export 'lib2.dart';'''); 41 export 'lib2.dart';''');
42 addNamedSource("/lib1.dart", r''' 42 addNamedSource("/lib1.dart", r'''
43 library lib1; 43 library lib1;
44 class M {}'''); 44 class M {}''');
45 addNamedSource("/lib2.dart", r''' 45 addNamedSource("/lib2.dart", r'''
46 library lib2; 46 library lib2;
47 class N {}'''); 47 class N {}''');
48 resolve(source); 48 computeLibrarySourceErrors(source);
49 assertNoErrors(source); 49 assertNoErrors(source);
50 verify([source]); 50 verify([source]);
51 } 51 }
52 52
53 void test_ambiguousExport_combinators_hide() { 53 void test_ambiguousExport_combinators_hide() {
54 Source source = addSource(r''' 54 Source source = addSource(r'''
55 library L; 55 library L;
56 export 'lib1.dart'; 56 export 'lib1.dart';
57 export 'lib2.dart' hide B;'''); 57 export 'lib2.dart' hide B;''');
58 addNamedSource("/lib1.dart", r''' 58 addNamedSource("/lib1.dart", r'''
59 library L1; 59 library L1;
60 class A {} 60 class A {}
61 class B {}'''); 61 class B {}''');
62 addNamedSource("/lib2.dart", r''' 62 addNamedSource("/lib2.dart", r'''
63 library L2; 63 library L2;
64 class B {} 64 class B {}
65 class C {}'''); 65 class C {}''');
66 resolve(source); 66 computeLibrarySourceErrors(source);
67 assertNoErrors(source); 67 assertNoErrors(source);
68 verify([source]); 68 verify([source]);
69 } 69 }
70 70
71 void test_ambiguousExport_combinators_show() { 71 void test_ambiguousExport_combinators_show() {
72 Source source = addSource(r''' 72 Source source = addSource(r'''
73 library L; 73 library L;
74 export 'lib1.dart'; 74 export 'lib1.dart';
75 export 'lib2.dart' show C;'''); 75 export 'lib2.dart' show C;''');
76 addNamedSource("/lib1.dart", r''' 76 addNamedSource("/lib1.dart", r'''
77 library L1; 77 library L1;
78 class A {} 78 class A {}
79 class B {}'''); 79 class B {}''');
80 addNamedSource("/lib2.dart", r''' 80 addNamedSource("/lib2.dart", r'''
81 library L2; 81 library L2;
82 class B {} 82 class B {}
83 class C {}'''); 83 class C {}''');
84 resolve(source); 84 computeLibrarySourceErrors(source);
85 assertNoErrors(source); 85 assertNoErrors(source);
86 verify([source]); 86 verify([source]);
87 } 87 }
88 88
89 void test_ambiguousExport_sameDeclaration() { 89 void test_ambiguousExport_sameDeclaration() {
90 Source source = addSource(r''' 90 Source source = addSource(r'''
91 library L; 91 library L;
92 export 'lib.dart'; 92 export 'lib.dart';
93 export 'lib.dart';'''); 93 export 'lib.dart';''');
94 addNamedSource("/lib.dart", r''' 94 addNamedSource("/lib.dart", r'''
95 library lib; 95 library lib;
96 class N {}'''); 96 class N {}''');
97 resolve(source); 97 computeLibrarySourceErrors(source);
98 assertNoErrors(source); 98 assertNoErrors(source);
99 verify([source]); 99 verify([source]);
100 } 100 }
101 101
102 void test_ambiguousImport_hideCombinator() { 102 void test_ambiguousImport_hideCombinator() {
103 Source source = addSource(r''' 103 Source source = addSource(r'''
104 import 'lib1.dart'; 104 import 'lib1.dart';
105 import 'lib2.dart'; 105 import 'lib2.dart';
106 import 'lib3.dart' hide N; 106 import 'lib3.dart' hide N;
107 main() { 107 main() {
108 new N1(); 108 new N1();
109 new N2(); 109 new N2();
110 new N3(); 110 new N3();
111 }'''); 111 }''');
112 addNamedSource("/lib1.dart", r''' 112 addNamedSource("/lib1.dart", r'''
113 library lib1; 113 library lib1;
114 class N {} 114 class N {}
115 class N1 {}'''); 115 class N1 {}''');
116 addNamedSource("/lib2.dart", r''' 116 addNamedSource("/lib2.dart", r'''
117 library lib2; 117 library lib2;
118 class N {} 118 class N {}
119 class N2 {}'''); 119 class N2 {}''');
120 addNamedSource("/lib3.dart", r''' 120 addNamedSource("/lib3.dart", r'''
121 library lib3; 121 library lib3;
122 class N {} 122 class N {}
123 class N3 {}'''); 123 class N3 {}''');
124 resolve(source); 124 computeLibrarySourceErrors(source);
125 assertNoErrors(source); 125 assertNoErrors(source);
126 } 126 }
127 127
128 void test_ambiguousImport_showCombinator() { 128 void test_ambiguousImport_showCombinator() {
129 Source source = addSource(r''' 129 Source source = addSource(r'''
130 import 'lib1.dart'; 130 import 'lib1.dart';
131 import 'lib2.dart' show N, N2; 131 import 'lib2.dart' show N, N2;
132 main() { 132 main() {
133 new N1(); 133 new N1();
134 new N2(); 134 new N2();
135 }'''); 135 }''');
136 addNamedSource("/lib1.dart", r''' 136 addNamedSource("/lib1.dart", r'''
137 library lib1; 137 library lib1;
138 class N {} 138 class N {}
139 class N1 {}'''); 139 class N1 {}''');
140 addNamedSource("/lib2.dart", r''' 140 addNamedSource("/lib2.dart", r'''
141 library lib2; 141 library lib2;
142 class N {} 142 class N {}
143 class N2 {}'''); 143 class N2 {}''');
144 resolve(source); 144 computeLibrarySourceErrors(source);
145 assertNoErrors(source); 145 assertNoErrors(source);
146 } 146 }
147 147
148 void test_argumentTypeNotAssignable_classWithCall_Function() { 148 void test_argumentTypeNotAssignable_classWithCall_Function() {
149 Source source = addSource(r''' 149 Source source = addSource(r'''
150 caller(Function callee) { 150 caller(Function callee) {
151 callee(); 151 callee();
152 } 152 }
153 153
154 class CallMeBack { 154 class CallMeBack {
155 call() => 0; 155 call() => 0;
156 } 156 }
157 157
158 main() { 158 main() {
159 caller(new CallMeBack()); 159 caller(new CallMeBack());
160 }'''); 160 }''');
161 resolve(source); 161 computeLibrarySourceErrors(source);
162 assertNoErrors(source); 162 assertNoErrors(source);
163 verify([source]); 163 verify([source]);
164 } 164 }
165 165
166 void test_argumentTypeNotAssignable_fieldFormalParameterElement_member() { 166 void test_argumentTypeNotAssignable_fieldFormalParameterElement_member() {
167 Source source = addSource(r''' 167 Source source = addSource(r'''
168 class ObjectSink<T> { 168 class ObjectSink<T> {
169 void sink(T object) { 169 void sink(T object) {
170 new TimestampedObject<T>(object); 170 new TimestampedObject<T>(object);
171 } 171 }
172 } 172 }
173 class TimestampedObject<E> { 173 class TimestampedObject<E> {
174 E object2; 174 E object2;
175 TimestampedObject(this.object2); 175 TimestampedObject(this.object2);
176 }'''); 176 }''');
177 resolve(source); 177 computeLibrarySourceErrors(source);
178 assertNoErrors(source); 178 assertNoErrors(source);
179 verify([source]); 179 verify([source]);
180 } 180 }
181 181
182 void test_argumentTypeNotAssignable_invocation_functionParameter_generic() { 182 void test_argumentTypeNotAssignable_invocation_functionParameter_generic() {
183 Source source = addSource(r''' 183 Source source = addSource(r'''
184 class A<K> { 184 class A<K> {
185 m(f(K k), K v) { 185 m(f(K k), K v) {
186 f(v); 186 f(v);
187 } 187 }
188 }'''); 188 }''');
189 resolve(source); 189 computeLibrarySourceErrors(source);
190 assertNoErrors(source); 190 assertNoErrors(source);
191 verify([source]); 191 verify([source]);
192 } 192 }
193 193
194 void test_argumentTypeNotAssignable_invocation_typedef_generic() { 194 void test_argumentTypeNotAssignable_invocation_typedef_generic() {
195 Source source = addSource(r''' 195 Source source = addSource(r'''
196 typedef A<T>(T p); 196 typedef A<T>(T p);
197 f(A<int> a) { 197 f(A<int> a) {
198 a(1); 198 a(1);
199 }'''); 199 }''');
200 resolve(source); 200 computeLibrarySourceErrors(source);
201 assertNoErrors(source); 201 assertNoErrors(source);
202 verify([source]); 202 verify([source]);
203 } 203 }
204 204
205 void test_argumentTypeNotAssignable_Object_Function() { 205 void test_argumentTypeNotAssignable_Object_Function() {
206 Source source = addSource(r''' 206 Source source = addSource(r'''
207 main() { 207 main() {
208 process(() {}); 208 process(() {});
209 } 209 }
210 process(Object x) {}'''); 210 process(Object x) {}''');
211 resolve(source); 211 computeLibrarySourceErrors(source);
212 assertNoErrors(source); 212 assertNoErrors(source);
213 verify([source]); 213 verify([source]);
214 } 214 }
215 215
216 void test_argumentTypeNotAssignable_typedef_local() { 216 void test_argumentTypeNotAssignable_typedef_local() {
217 Source source = addSource(r''' 217 Source source = addSource(r'''
218 typedef A(int p1, String p2); 218 typedef A(int p1, String p2);
219 A getA() => null; 219 A getA() => null;
220 f() { 220 f() {
221 A a = getA(); 221 A a = getA();
222 a(1, '2'); 222 a(1, '2');
223 }'''); 223 }''');
224 resolve(source); 224 computeLibrarySourceErrors(source);
225 assertNoErrors(source); 225 assertNoErrors(source);
226 verify([source]); 226 verify([source]);
227 } 227 }
228 228
229 void test_argumentTypeNotAssignable_typedef_parameter() { 229 void test_argumentTypeNotAssignable_typedef_parameter() {
230 Source source = addSource(r''' 230 Source source = addSource(r'''
231 typedef A(int p1, String p2); 231 typedef A(int p1, String p2);
232 f(A a) { 232 f(A a) {
233 a(1, '2'); 233 a(1, '2');
234 }'''); 234 }''');
235 resolve(source); 235 computeLibrarySourceErrors(source);
236 assertNoErrors(source); 236 assertNoErrors(source);
237 verify([source]); 237 verify([source]);
238 } 238 }
239 239
240 void test_assignability_function_expr_rettype_from_typedef_cls() { 240 void test_assignability_function_expr_rettype_from_typedef_cls() {
241 // In the code below, the type of (() => f()) has a return type which is 241 // In the code below, the type of (() => f()) has a return type which is
242 // a class, and that class is inferred from the return type of the typedef 242 // a class, and that class is inferred from the return type of the typedef
243 // F. 243 // F.
244 Source source = addSource(''' 244 Source source = addSource('''
245 class C {} 245 class C {}
246 typedef C F(); 246 typedef C F();
247 F f; 247 F f;
248 main() { 248 main() {
249 F f2 = (() => f()); 249 F f2 = (() => f());
250 } 250 }
251 '''); 251 ''');
252 resolve(source); 252 computeLibrarySourceErrors(source);
253 assertNoErrors(source); 253 assertNoErrors(source);
254 verify([source]); 254 verify([source]);
255 } 255 }
256 256
257 void test_assignability_function_expr_rettype_from_typedef_typedef() { 257 void test_assignability_function_expr_rettype_from_typedef_typedef() {
258 // In the code below, the type of (() => f()) has a return type which is 258 // In the code below, the type of (() => f()) has a return type which is
259 // a typedef, and that typedef is inferred from the return type of the 259 // a typedef, and that typedef is inferred from the return type of the
260 // typedef F. 260 // typedef F.
261 Source source = addSource(''' 261 Source source = addSource('''
262 typedef G F(); 262 typedef G F();
263 typedef G(); 263 typedef G();
264 F f; 264 F f;
265 main() { 265 main() {
266 F f2 = (() => f()); 266 F f2 = (() => f());
267 } 267 }
268 '''); 268 ''');
269 resolve(source); 269 computeLibrarySourceErrors(source);
270 assertNoErrors(source); 270 assertNoErrors(source);
271 verify([source]); 271 verify([source]);
272 } 272 }
273 273
274 void test_assignment_to_field_with_same_name_as_prefix() { 274 void test_assignment_to_field_with_same_name_as_prefix() {
275 // If p is an import prefix, then within a method body, p = expr should be 275 // If p is an import prefix, then within a method body, p = expr should be
276 // considered equivalent to this.p = expr. 276 // considered equivalent to this.p = expr.
277 addNamedSource("/lib.dart", r''' 277 addNamedSource("/lib.dart", r'''
278 library lib; 278 library lib;
279 '''); 279 ''');
280 Source source = addSource(r''' 280 Source source = addSource(r'''
281 import 'lib.dart' as p; 281 import 'lib.dart' as p;
282 class Base { 282 class Base {
283 var p; 283 var p;
284 } 284 }
285 class Derived extends Base { 285 class Derived extends Base {
286 f() { 286 f() {
287 p = 0; 287 p = 0;
288 } 288 }
289 } 289 }
290 '''); 290 ''');
291 resolve(source); 291 computeLibrarySourceErrors(source);
292 assertErrors(source, [HintCode.UNUSED_IMPORT]); 292 assertErrors(source, [HintCode.UNUSED_IMPORT]);
293 verify([source]); 293 verify([source]);
294 } 294 }
295 295
296 void test_assignmentToFinal_prefixNegate() { 296 void test_assignmentToFinal_prefixNegate() {
297 Source source = addSource(r''' 297 Source source = addSource(r'''
298 f() { 298 f() {
299 final x = 0; 299 final x = 0;
300 -x; 300 -x;
301 }'''); 301 }''');
302 resolve(source); 302 computeLibrarySourceErrors(source);
303 assertNoErrors(source); 303 assertNoErrors(source);
304 verify([source]); 304 verify([source]);
305 } 305 }
306 306
307 void test_assignmentToFinalNoSetter_prefixedIdentifier() { 307 void test_assignmentToFinalNoSetter_prefixedIdentifier() {
308 Source source = addSource(r''' 308 Source source = addSource(r'''
309 class A { 309 class A {
310 int get x => 0; 310 int get x => 0;
311 set x(v) {} 311 set x(v) {}
312 } 312 }
313 main() { 313 main() {
314 A a = new A(); 314 A a = new A();
315 a.x = 0; 315 a.x = 0;
316 }'''); 316 }''');
317 resolve(source); 317 computeLibrarySourceErrors(source);
318 assertNoErrors(source); 318 assertNoErrors(source);
319 verify([source]); 319 verify([source]);
320 } 320 }
321 321
322 void test_assignmentToFinalNoSetter_propertyAccess() { 322 void test_assignmentToFinalNoSetter_propertyAccess() {
323 Source source = addSource(r''' 323 Source source = addSource(r'''
324 class A { 324 class A {
325 int get x => 0; 325 int get x => 0;
326 set x(v) {} 326 set x(v) {}
327 } 327 }
328 class B { 328 class B {
329 static A a; 329 static A a;
330 } 330 }
331 main() { 331 main() {
332 B.a.x = 0; 332 B.a.x = 0;
333 }'''); 333 }''');
334 resolve(source); 334 computeLibrarySourceErrors(source);
335 assertNoErrors(source); 335 assertNoErrors(source);
336 verify([source]); 336 verify([source]);
337 } 337 }
338 338
339 void test_assignmentToFinals_importWithPrefix() { 339 void test_assignmentToFinals_importWithPrefix() {
340 Source source = addSource(r''' 340 Source source = addSource(r'''
341 library lib; 341 library lib;
342 import 'lib1.dart' as foo; 342 import 'lib1.dart' as foo;
343 main() { 343 main() {
344 foo.x = true; 344 foo.x = true;
345 }'''); 345 }''');
346 addNamedSource("/lib1.dart", r''' 346 addNamedSource("/lib1.dart", r'''
347 library lib1; 347 library lib1;
348 bool x = false;'''); 348 bool x = false;''');
349 resolve(source); 349 computeLibrarySourceErrors(source);
350 assertNoErrors(source); 350 assertNoErrors(source);
351 verify([source]); 351 verify([source]);
352 } 352 }
353 353
354 void test_async_dynamic_with_return() { 354 void test_async_dynamic_with_return() {
355 Source source = addSource(''' 355 Source source = addSource('''
356 dynamic f() async { 356 dynamic f() async {
357 return; 357 return;
358 } 358 }
359 '''); 359 ''');
360 resolve(source); 360 computeLibrarySourceErrors(source);
361 assertNoErrors(source); 361 assertNoErrors(source);
362 verify([source]); 362 verify([source]);
363 } 363 }
364 364
365 void test_async_dynamic_with_return_value() { 365 void test_async_dynamic_with_return_value() {
366 Source source = addSource(''' 366 Source source = addSource('''
367 dynamic f() async { 367 dynamic f() async {
368 return 5; 368 return 5;
369 } 369 }
370 '''); 370 ''');
371 resolve(source); 371 computeLibrarySourceErrors(source);
372 assertNoErrors(source); 372 assertNoErrors(source);
373 verify([source]); 373 verify([source]);
374 } 374 }
375 375
376 void test_async_dynamic_without_return() { 376 void test_async_dynamic_without_return() {
377 Source source = addSource(''' 377 Source source = addSource('''
378 dynamic f() async {} 378 dynamic f() async {}
379 '''); 379 ''');
380 resolve(source); 380 computeLibrarySourceErrors(source);
381 assertNoErrors(source); 381 assertNoErrors(source);
382 verify([source]); 382 verify([source]);
383 } 383 }
384 384
385 void test_async_expression_function_type() { 385 void test_async_expression_function_type() {
386 Source source = addSource(''' 386 Source source = addSource('''
387 import 'dart:async'; 387 import 'dart:async';
388 typedef Future<int> F(int i); 388 typedef Future<int> F(int i);
389 main() { 389 main() {
390 F f = (int i) async => i; 390 F f = (int i) async => i;
391 } 391 }
392 '''); 392 ''');
393 resolve(source); 393 computeLibrarySourceErrors(source);
394 assertNoErrors(source); 394 assertNoErrors(source);
395 verify([source]); 395 verify([source]);
396 } 396 }
397 397
398 void test_async_flattened() { 398 void test_async_flattened() {
399 Source source = addSource(''' 399 Source source = addSource('''
400 import 'dart:async'; 400 import 'dart:async';
401 typedef Future<int> CreatesFutureInt(); 401 typedef Future<int> CreatesFutureInt();
402 main() { 402 main() {
403 CreatesFutureInt createFutureInt = () async => f(); 403 CreatesFutureInt createFutureInt = () async => f();
404 Future<int> futureInt = createFutureInt(); 404 Future<int> futureInt = createFutureInt();
405 futureInt.then((int i) => print(i)); 405 futureInt.then((int i) => print(i));
406 } 406 }
407 Future<int> f() => null; 407 Future<int> f() => null;
408 '''); 408 ''');
409 resolve(source); 409 computeLibrarySourceErrors(source);
410 assertNoErrors(source); 410 assertNoErrors(source);
411 verify([source]); 411 verify([source]);
412 } 412 }
413 413
414 void test_async_future_dynamic_with_return() { 414 void test_async_future_dynamic_with_return() {
415 Source source = addSource(''' 415 Source source = addSource('''
416 import 'dart:async'; 416 import 'dart:async';
417 Future<dynamic> f() async { 417 Future<dynamic> f() async {
418 return; 418 return;
419 } 419 }
420 '''); 420 ''');
421 resolve(source); 421 computeLibrarySourceErrors(source);
422 assertNoErrors(source); 422 assertNoErrors(source);
423 verify([source]); 423 verify([source]);
424 } 424 }
425 425
426 void test_async_future_dynamic_with_return_value() { 426 void test_async_future_dynamic_with_return_value() {
427 Source source = addSource(''' 427 Source source = addSource('''
428 import 'dart:async'; 428 import 'dart:async';
429 Future<dynamic> f() async { 429 Future<dynamic> f() async {
430 return 5; 430 return 5;
431 } 431 }
432 '''); 432 ''');
433 resolve(source); 433 computeLibrarySourceErrors(source);
434 assertNoErrors(source); 434 assertNoErrors(source);
435 verify([source]); 435 verify([source]);
436 } 436 }
437 437
438 void test_async_future_dynamic_without_return() { 438 void test_async_future_dynamic_without_return() {
439 Source source = addSource(''' 439 Source source = addSource('''
440 import 'dart:async'; 440 import 'dart:async';
441 Future<dynamic> f() async {} 441 Future<dynamic> f() async {}
442 '''); 442 ''');
443 resolve(source); 443 computeLibrarySourceErrors(source);
444 assertNoErrors(source); 444 assertNoErrors(source);
445 verify([source]); 445 verify([source]);
446 } 446 }
447 447
448 void test_async_future_int_with_return_future_int() { 448 void test_async_future_int_with_return_future_int() {
449 Source source = addSource(''' 449 Source source = addSource('''
450 import 'dart:async'; 450 import 'dart:async';
451 Future<int> f() async { 451 Future<int> f() async {
452 return new Future<int>.value(5); 452 return new Future<int>.value(5);
453 } 453 }
454 '''); 454 ''');
455 resolve(source); 455 computeLibrarySourceErrors(source);
456 assertNoErrors(source); 456 assertNoErrors(source);
457 verify([source]); 457 verify([source]);
458 } 458 }
459 459
460 void test_async_future_int_with_return_value() { 460 void test_async_future_int_with_return_value() {
461 Source source = addSource(''' 461 Source source = addSource('''
462 import 'dart:async'; 462 import 'dart:async';
463 Future<int> f() async { 463 Future<int> f() async {
464 return 5; 464 return 5;
465 } 465 }
466 '''); 466 ''');
467 resolve(source); 467 computeLibrarySourceErrors(source);
468 assertNoErrors(source); 468 assertNoErrors(source);
469 verify([source]); 469 verify([source]);
470 } 470 }
471 471
472 void test_async_future_null_with_return() { 472 void test_async_future_null_with_return() {
473 Source source = addSource(''' 473 Source source = addSource('''
474 import 'dart:async'; 474 import 'dart:async';
475 Future<Null> f() async { 475 Future<Null> f() async {
476 return; 476 return;
477 } 477 }
478 '''); 478 ''');
479 resolve(source); 479 computeLibrarySourceErrors(source);
480 assertNoErrors(source); 480 assertNoErrors(source);
481 verify([source]); 481 verify([source]);
482 } 482 }
483 483
484 void test_async_future_null_without_return() { 484 void test_async_future_null_without_return() {
485 Source source = addSource(''' 485 Source source = addSource('''
486 import 'dart:async'; 486 import 'dart:async';
487 Future<Null> f() async {} 487 Future<Null> f() async {}
488 '''); 488 ''');
489 resolve(source); 489 computeLibrarySourceErrors(source);
490 assertNoErrors(source); 490 assertNoErrors(source);
491 verify([source]); 491 verify([source]);
492 } 492 }
493 493
494 void test_async_future_object_with_return() { 494 void test_async_future_object_with_return() {
495 Source source = addSource(''' 495 Source source = addSource('''
496 import 'dart:async'; 496 import 'dart:async';
497 Future<Object> f() async { 497 Future<Object> f() async {
498 return; 498 return;
499 } 499 }
500 '''); 500 ''');
501 resolve(source); 501 computeLibrarySourceErrors(source);
502 assertNoErrors(source); 502 assertNoErrors(source);
503 verify([source]); 503 verify([source]);
504 } 504 }
505 505
506 void test_async_future_object_with_return_value() { 506 void test_async_future_object_with_return_value() {
507 Source source = addSource(''' 507 Source source = addSource('''
508 import 'dart:async'; 508 import 'dart:async';
509 Future<Object> f() async { 509 Future<Object> f() async {
510 return 5; 510 return 5;
511 } 511 }
512 '''); 512 ''');
513 resolve(source); 513 computeLibrarySourceErrors(source);
514 assertNoErrors(source); 514 assertNoErrors(source);
515 verify([source]); 515 verify([source]);
516 } 516 }
517 517
518 void test_async_future_object_without_return() { 518 void test_async_future_object_without_return() {
519 Source source = addSource(''' 519 Source source = addSource('''
520 import 'dart:async'; 520 import 'dart:async';
521 Future<Object> f() async {} 521 Future<Object> f() async {}
522 '''); 522 ''');
523 resolve(source); 523 computeLibrarySourceErrors(source);
524 assertNoErrors(source); 524 assertNoErrors(source);
525 verify([source]); 525 verify([source]);
526 } 526 }
527 527
528 void test_async_future_with_return() { 528 void test_async_future_with_return() {
529 Source source = addSource(''' 529 Source source = addSource('''
530 import 'dart:async'; 530 import 'dart:async';
531 Future f() async { 531 Future f() async {
532 return; 532 return;
533 } 533 }
534 '''); 534 ''');
535 resolve(source); 535 computeLibrarySourceErrors(source);
536 assertNoErrors(source); 536 assertNoErrors(source);
537 verify([source]); 537 verify([source]);
538 } 538 }
539 539
540 void test_async_future_with_return_value() { 540 void test_async_future_with_return_value() {
541 Source source = addSource(''' 541 Source source = addSource('''
542 import 'dart:async'; 542 import 'dart:async';
543 Future f() async { 543 Future f() async {
544 return 5; 544 return 5;
545 } 545 }
546 '''); 546 ''');
547 resolve(source); 547 computeLibrarySourceErrors(source);
548 assertNoErrors(source); 548 assertNoErrors(source);
549 verify([source]); 549 verify([source]);
550 } 550 }
551 551
552 void test_async_future_without_return() { 552 void test_async_future_without_return() {
553 Source source = addSource(''' 553 Source source = addSource('''
554 import 'dart:async'; 554 import 'dart:async';
555 Future f() async {} 555 Future f() async {}
556 '''); 556 ''');
557 resolve(source); 557 computeLibrarySourceErrors(source);
558 assertNoErrors(source); 558 assertNoErrors(source);
559 verify([source]); 559 verify([source]);
560 } 560 }
561 561
562 void test_async_return_flattens_futures() { 562 void test_async_return_flattens_futures() {
563 Source source = addSource(''' 563 Source source = addSource('''
564 import 'dart:async'; 564 import 'dart:async';
565 Future<int> f() async { 565 Future<int> f() async {
566 return g(); 566 return g();
567 } 567 }
568 Future<Future<int>> g() => null; 568 Future<Future<int>> g() => null;
569 '''); 569 ''');
570 resolve(source); 570 computeLibrarySourceErrors(source);
571 assertNoErrors(source); 571 assertNoErrors(source);
572 verify([source]); 572 verify([source]);
573 } 573 }
574 574
575 void test_async_with_return() { 575 void test_async_with_return() {
576 Source source = addSource(''' 576 Source source = addSource('''
577 f() async { 577 f() async {
578 return; 578 return;
579 } 579 }
580 '''); 580 ''');
581 resolve(source); 581 computeLibrarySourceErrors(source);
582 assertNoErrors(source); 582 assertNoErrors(source);
583 verify([source]); 583 verify([source]);
584 } 584 }
585 585
586 void test_async_with_return_value() { 586 void test_async_with_return_value() {
587 Source source = addSource(''' 587 Source source = addSource('''
588 f() async { 588 f() async {
589 return 5; 589 return 5;
590 } 590 }
591 '''); 591 ''');
592 resolve(source); 592 computeLibrarySourceErrors(source);
593 assertNoErrors(source); 593 assertNoErrors(source);
594 verify([source]); 594 verify([source]);
595 } 595 }
596 596
597 void test_async_without_return() { 597 void test_async_without_return() {
598 Source source = addSource(''' 598 Source source = addSource('''
599 f() async {} 599 f() async {}
600 '''); 600 ''');
601 resolve(source); 601 computeLibrarySourceErrors(source);
602 assertNoErrors(source); 602 assertNoErrors(source);
603 verify([source]); 603 verify([source]);
604 } 604 }
605 605
606 void test_asyncForInWrongContext_async() { 606 void test_asyncForInWrongContext_async() {
607 Source source = addSource(r''' 607 Source source = addSource(r'''
608 f(list) async { 608 f(list) async {
609 await for (var e in list) { 609 await for (var e in list) {
610 } 610 }
611 }'''); 611 }''');
612 resolve(source); 612 computeLibrarySourceErrors(source);
613 assertNoErrors(source); 613 assertNoErrors(source);
614 verify([source]); 614 verify([source]);
615 } 615 }
616 616
617 void test_asyncForInWrongContext_asyncStar() { 617 void test_asyncForInWrongContext_asyncStar() {
618 Source source = addSource(r''' 618 Source source = addSource(r'''
619 f(list) async* { 619 f(list) async* {
620 await for (var e in list) { 620 await for (var e in list) {
621 } 621 }
622 }'''); 622 }''');
623 resolve(source); 623 computeLibrarySourceErrors(source);
624 assertNoErrors(source); 624 assertNoErrors(source);
625 verify([source]); 625 verify([source]);
626 } 626 }
627 627
628 void test_await_flattened() { 628 void test_await_flattened() {
629 Source source = addSource(''' 629 Source source = addSource('''
630 import 'dart:async'; 630 import 'dart:async';
631 Future<Future<int>> ffi() => null; 631 Future<Future<int>> ffi() => null;
632 f() async { 632 f() async {
633 int b = await ffi(); 633 int b = await ffi();
634 } 634 }
635 '''); 635 ''');
636 resolve(source); 636 computeLibrarySourceErrors(source);
637 assertNoErrors(source); 637 assertNoErrors(source);
638 verify([source]); 638 verify([source]);
639 } 639 }
640 640
641 void test_await_simple() { 641 void test_await_simple() {
642 Source source = addSource(''' 642 Source source = addSource('''
643 import 'dart:async'; 643 import 'dart:async';
644 Future<int> fi() => null; 644 Future<int> fi() => null;
645 f() async { 645 f() async {
646 int a = await fi(); 646 int a = await fi();
647 } 647 }
648 '''); 648 ''');
649 resolve(source); 649 computeLibrarySourceErrors(source);
650 assertNoErrors(source); 650 assertNoErrors(source);
651 verify([source]); 651 verify([source]);
652 } 652 }
653 653
654 void test_awaitInWrongContext_async() { 654 void test_awaitInWrongContext_async() {
655 Source source = addSource(r''' 655 Source source = addSource(r'''
656 f(x, y) async { 656 f(x, y) async {
657 return await x + await y; 657 return await x + await y;
658 }'''); 658 }''');
659 resolve(source); 659 computeLibrarySourceErrors(source);
660 assertNoErrors(source); 660 assertNoErrors(source);
661 verify([source]); 661 verify([source]);
662 } 662 }
663 663
664 void test_awaitInWrongContext_asyncStar() { 664 void test_awaitInWrongContext_asyncStar() {
665 Source source = addSource(r''' 665 Source source = addSource(r'''
666 f(x, y) async* { 666 f(x, y) async* {
667 yield await x + await y; 667 yield await x + await y;
668 }'''); 668 }''');
669 resolve(source); 669 computeLibrarySourceErrors(source);
670 assertNoErrors(source); 670 assertNoErrors(source);
671 verify([source]); 671 verify([source]);
672 } 672 }
673 673
674 void test_breakWithoutLabelInSwitch() { 674 void test_breakWithoutLabelInSwitch() {
675 Source source = addSource(r''' 675 Source source = addSource(r'''
676 class A { 676 class A {
677 void m(int i) { 677 void m(int i) {
678 switch (i) { 678 switch (i) {
679 case 0: 679 case 0:
680 break; 680 break;
681 } 681 }
682 } 682 }
683 }'''); 683 }''');
684 resolve(source); 684 computeLibrarySourceErrors(source);
685 assertNoErrors(source); 685 assertNoErrors(source);
686 verify([source]); 686 verify([source]);
687 } 687 }
688 688
689 void test_builtInIdentifierAsType_dynamic() { 689 void test_builtInIdentifierAsType_dynamic() {
690 Source source = addSource(r''' 690 Source source = addSource(r'''
691 f() { 691 f() {
692 dynamic x; 692 dynamic x;
693 }'''); 693 }''');
694 resolve(source); 694 computeLibrarySourceErrors(source);
695 assertNoErrors(source); 695 assertNoErrors(source);
696 verify([source]); 696 verify([source]);
697 } 697 }
698 698
699 void test_caseBlockNotTerminated() { 699 void test_caseBlockNotTerminated() {
700 Source source = addSource(r''' 700 Source source = addSource(r'''
701 f(int p) { 701 f(int p) {
702 for (int i = 0; i < 10; i++) { 702 for (int i = 0; i < 10; i++) {
703 switch (p) { 703 switch (p) {
704 case 0: 704 case 0:
705 break; 705 break;
706 case 1: 706 case 1:
707 continue; 707 continue;
708 case 2: 708 case 2:
709 return; 709 return;
710 case 3: 710 case 3:
711 throw new Object(); 711 throw new Object();
712 case 4: 712 case 4:
713 case 5: 713 case 5:
714 return; 714 return;
715 case 6: 715 case 6:
716 default: 716 default:
717 return; 717 return;
718 } 718 }
719 } 719 }
720 }'''); 720 }''');
721 resolve(source); 721 computeLibrarySourceErrors(source);
722 assertNoErrors(source); 722 assertNoErrors(source);
723 verify([source]); 723 verify([source]);
724 } 724 }
725 725
726 void test_caseBlockNotTerminated_lastCase() { 726 void test_caseBlockNotTerminated_lastCase() {
727 Source source = addSource(r''' 727 Source source = addSource(r'''
728 f(int p) { 728 f(int p) {
729 switch (p) { 729 switch (p) {
730 case 0: 730 case 0:
731 p = p + 1; 731 p = p + 1;
732 } 732 }
733 }'''); 733 }''');
734 resolve(source); 734 computeLibrarySourceErrors(source);
735 assertNoErrors(source); 735 assertNoErrors(source);
736 verify([source]); 736 verify([source]);
737 } 737 }
738 738
739 void test_caseExpressionTypeImplementsEquals() { 739 void test_caseExpressionTypeImplementsEquals() {
740 Source source = addSource(r''' 740 Source source = addSource(r'''
741 print(p) {} 741 print(p) {}
742 742
743 abstract class B { 743 abstract class B {
744 final id; 744 final id;
745 const B(this.id); 745 const B(this.id);
746 String toString() => 'C($id)'; 746 String toString() => 'C($id)';
747 /** Equality is identity equality, the id isn't used. */ 747 /** Equality is identity equality, the id isn't used. */
748 bool operator==(Object other); 748 bool operator==(Object other);
749 } 749 }
750 750
751 class C extends B { 751 class C extends B {
752 const C(id) : super(id); 752 const C(id) : super(id);
753 } 753 }
754 754
755 void doSwitch(c) { 755 void doSwitch(c) {
756 switch (c) { 756 switch (c) {
757 case const C(0): print('Switch: 0'); break; 757 case const C(0): print('Switch: 0'); break;
758 case const C(1): print('Switch: 1'); break; 758 case const C(1): print('Switch: 1'); break;
759 } 759 }
760 }'''); 760 }''');
761 resolve(source); 761 computeLibrarySourceErrors(source);
762 assertNoErrors(source); 762 assertNoErrors(source);
763 verify([source]); 763 verify([source]);
764 } 764 }
765 765
766 void test_caseExpressionTypeImplementsEquals_int() { 766 void test_caseExpressionTypeImplementsEquals_int() {
767 Source source = addSource(r''' 767 Source source = addSource(r'''
768 f(int i) { 768 f(int i) {
769 switch(i) { 769 switch(i) {
770 case(1) : return 1; 770 case(1) : return 1;
771 default: return 0; 771 default: return 0;
772 } 772 }
773 }'''); 773 }''');
774 resolve(source); 774 computeLibrarySourceErrors(source);
775 assertNoErrors(source); 775 assertNoErrors(source);
776 verify([source]); 776 verify([source]);
777 } 777 }
778 778
779 void test_caseExpressionTypeImplementsEquals_Object() { 779 void test_caseExpressionTypeImplementsEquals_Object() {
780 Source source = addSource(r''' 780 Source source = addSource(r'''
781 class IntWrapper { 781 class IntWrapper {
782 final int value; 782 final int value;
783 const IntWrapper(this.value); 783 const IntWrapper(this.value);
784 } 784 }
785 785
786 f(IntWrapper intWrapper) { 786 f(IntWrapper intWrapper) {
787 switch(intWrapper) { 787 switch(intWrapper) {
788 case(const IntWrapper(1)) : return 1; 788 case(const IntWrapper(1)) : return 1;
789 default: return 0; 789 default: return 0;
790 } 790 }
791 }'''); 791 }''');
792 resolve(source); 792 computeLibrarySourceErrors(source);
793 assertNoErrors(source); 793 assertNoErrors(source);
794 verify([source]); 794 verify([source]);
795 } 795 }
796 796
797 void test_caseExpressionTypeImplementsEquals_String() { 797 void test_caseExpressionTypeImplementsEquals_String() {
798 Source source = addSource(r''' 798 Source source = addSource(r'''
799 f(String s) { 799 f(String s) {
800 switch(s) { 800 switch(s) {
801 case('1') : return 1; 801 case('1') : return 1;
802 default: return 0; 802 default: return 0;
803 } 803 }
804 }'''); 804 }''');
805 resolve(source); 805 computeLibrarySourceErrors(source);
806 assertNoErrors(source); 806 assertNoErrors(source);
807 verify([source]); 807 verify([source]);
808 } 808 }
809 809
810 void test_commentReference_beforeConstructor() { 810 void test_commentReference_beforeConstructor() {
811 String code = r''' 811 String code = r'''
812 abstract class A { 812 abstract class A {
813 /// [p] 813 /// [p]
814 A(int p) {} 814 A(int p) {}
815 }'''; 815 }''';
816 Source source = addSource(code); 816 Source source = addSource(code);
817 resolve(source); 817 computeLibrarySourceErrors(source);
818 assertNoErrors(source); 818 assertNoErrors(source);
819 verify([source]); 819 verify([source]);
820 CompilationUnit unit = _getResolvedLibraryUnit(source); 820 CompilationUnit unit = _getResolvedLibraryUnit(source);
821 { 821 {
822 SimpleIdentifier ref = EngineTestCase.findNode( 822 SimpleIdentifier ref = EngineTestCase.findNode(
823 unit, code, "p]", (node) => node is SimpleIdentifier); 823 unit, code, "p]", (node) => node is SimpleIdentifier);
824 EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement, 824 EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement,
825 ParameterElement, ref.staticElement); 825 ParameterElement, ref.staticElement);
826 } 826 }
827 } 827 }
828 828
829 void test_commentReference_beforeFunction_blockBody() { 829 void test_commentReference_beforeFunction_blockBody() {
830 String code = r''' 830 String code = r'''
831 /// [p] 831 /// [p]
832 foo(int p) { 832 foo(int p) {
833 }'''; 833 }''';
834 Source source = addSource(code); 834 Source source = addSource(code);
835 resolve(source); 835 computeLibrarySourceErrors(source);
836 assertNoErrors(source); 836 assertNoErrors(source);
837 verify([source]); 837 verify([source]);
838 CompilationUnit unit = _getResolvedLibraryUnit(source); 838 CompilationUnit unit = _getResolvedLibraryUnit(source);
839 SimpleIdentifier ref = EngineTestCase.findNode( 839 SimpleIdentifier ref = EngineTestCase.findNode(
840 unit, code, "p]", (node) => node is SimpleIdentifier); 840 unit, code, "p]", (node) => node is SimpleIdentifier);
841 EngineTestCase.assertInstanceOf( 841 EngineTestCase.assertInstanceOf(
842 (obj) => obj is ParameterElement, ParameterElement, ref.staticElement); 842 (obj) => obj is ParameterElement, ParameterElement, ref.staticElement);
843 } 843 }
844 844
845 void test_commentReference_beforeFunction_expressionBody() { 845 void test_commentReference_beforeFunction_expressionBody() {
846 String code = r''' 846 String code = r'''
847 /// [p] 847 /// [p]
848 foo(int p) => null;'''; 848 foo(int p) => null;''';
849 Source source = addSource(code); 849 Source source = addSource(code);
850 resolve(source); 850 computeLibrarySourceErrors(source);
851 assertNoErrors(source); 851 assertNoErrors(source);
852 verify([source]); 852 verify([source]);
853 CompilationUnit unit = _getResolvedLibraryUnit(source); 853 CompilationUnit unit = _getResolvedLibraryUnit(source);
854 SimpleIdentifier ref = EngineTestCase.findNode( 854 SimpleIdentifier ref = EngineTestCase.findNode(
855 unit, code, "p]", (node) => node is SimpleIdentifier); 855 unit, code, "p]", (node) => node is SimpleIdentifier);
856 EngineTestCase.assertInstanceOf( 856 EngineTestCase.assertInstanceOf(
857 (obj) => obj is ParameterElement, ParameterElement, ref.staticElement); 857 (obj) => obj is ParameterElement, ParameterElement, ref.staticElement);
858 } 858 }
859 859
860 void test_commentReference_beforeMethod() { 860 void test_commentReference_beforeMethod() {
861 String code = r''' 861 String code = r'''
862 abstract class A { 862 abstract class A {
863 /// [p1] 863 /// [p1]
864 ma(int p1) {} 864 ma(int p1) {}
865 /// [p2] 865 /// [p2]
866 mb(int p2); 866 mb(int p2);
867 }'''; 867 }''';
868 Source source = addSource(code); 868 Source source = addSource(code);
869 resolve(source); 869 computeLibrarySourceErrors(source);
870 assertNoErrors(source); 870 assertNoErrors(source);
871 verify([source]); 871 verify([source]);
872 CompilationUnit unit = _getResolvedLibraryUnit(source); 872 CompilationUnit unit = _getResolvedLibraryUnit(source);
873 { 873 {
874 SimpleIdentifier ref = EngineTestCase.findNode( 874 SimpleIdentifier ref = EngineTestCase.findNode(
875 unit, code, "p1]", (node) => node is SimpleIdentifier); 875 unit, code, "p1]", (node) => node is SimpleIdentifier);
876 EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement, 876 EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement,
877 ParameterElement, ref.staticElement); 877 ParameterElement, ref.staticElement);
878 } 878 }
879 { 879 {
880 SimpleIdentifier ref = EngineTestCase.findNode( 880 SimpleIdentifier ref = EngineTestCase.findNode(
881 unit, code, "p2]", (node) => node is SimpleIdentifier); 881 unit, code, "p2]", (node) => node is SimpleIdentifier);
882 EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement, 882 EngineTestCase.assertInstanceOf((obj) => obj is ParameterElement,
883 ParameterElement, ref.staticElement); 883 ParameterElement, ref.staticElement);
884 } 884 }
885 } 885 }
886 886
887 void test_commentReference_class() { 887 void test_commentReference_class() {
888 String code = r''' 888 String code = r'''
889 /// [foo] 889 /// [foo]
890 class A { 890 class A {
891 foo() {} 891 foo() {}
892 }'''; 892 }''';
893 Source source = addSource(code); 893 Source source = addSource(code);
894 resolve(source); 894 computeLibrarySourceErrors(source);
895 assertNoErrors(source); 895 assertNoErrors(source);
896 verify([source]); 896 verify([source]);
897 CompilationUnit unit = _getResolvedLibraryUnit(source); 897 CompilationUnit unit = _getResolvedLibraryUnit(source);
898 SimpleIdentifier ref = EngineTestCase.findNode( 898 SimpleIdentifier ref = EngineTestCase.findNode(
899 unit, code, "foo]", (node) => node is SimpleIdentifier); 899 unit, code, "foo]", (node) => node is SimpleIdentifier);
900 EngineTestCase.assertInstanceOf( 900 EngineTestCase.assertInstanceOf(
901 (obj) => obj is MethodElement, MethodElement, ref.staticElement); 901 (obj) => obj is MethodElement, MethodElement, ref.staticElement);
902 } 902 }
903 903
904 void test_commentReference_setter() { 904 void test_commentReference_setter() {
905 String code = r''' 905 String code = r'''
906 class A { 906 class A {
907 /// [x] in A 907 /// [x] in A
908 mA() {} 908 mA() {}
909 set x(value) {} 909 set x(value) {}
910 } 910 }
911 class B extends A { 911 class B extends A {
912 /// [x] in B 912 /// [x] in B
913 mB() {} 913 mB() {}
914 } 914 }
915 '''; 915 ''';
916 Source source = addSource(code); 916 Source source = addSource(code);
917 resolve(source); 917 computeLibrarySourceErrors(source);
918 assertNoErrors(source); 918 assertNoErrors(source);
919 verify([source]); 919 verify([source]);
920 CompilationUnit unit = _getResolvedLibraryUnit(source); 920 CompilationUnit unit = _getResolvedLibraryUnit(source);
921 { 921 {
922 SimpleIdentifier ref = EngineTestCase.findNode( 922 SimpleIdentifier ref = EngineTestCase.findNode(
923 unit, code, "x] in A", (node) => node is SimpleIdentifier); 923 unit, code, "x] in A", (node) => node is SimpleIdentifier);
924 EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement, 924 EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement,
925 PropertyAccessorElement, ref.staticElement); 925 PropertyAccessorElement, ref.staticElement);
926 } 926 }
927 { 927 {
928 SimpleIdentifier ref = EngineTestCase.findNode( 928 SimpleIdentifier ref = EngineTestCase.findNode(
929 unit, code, "x] in B", (node) => node is SimpleIdentifier); 929 unit, code, "x] in B", (node) => node is SimpleIdentifier);
930 EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement, 930 EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement,
931 PropertyAccessorElement, ref.staticElement); 931 PropertyAccessorElement, ref.staticElement);
932 } 932 }
933 } 933 }
934 934
935 void test_concreteClassWithAbstractMember() { 935 void test_concreteClassWithAbstractMember() {
936 Source source = addSource(r''' 936 Source source = addSource(r'''
937 abstract class A { 937 abstract class A {
938 m(); 938 m();
939 }'''); 939 }''');
940 resolve(source); 940 computeLibrarySourceErrors(source);
941 assertNoErrors(source); 941 assertNoErrors(source);
942 verify([source]); 942 verify([source]);
943 } 943 }
944 944
945 void test_concreteClassWithAbstractMember_inherited() { 945 void test_concreteClassWithAbstractMember_inherited() {
946 Source source = addSource(r''' 946 Source source = addSource(r'''
947 class A { 947 class A {
948 m() {} 948 m() {}
949 } 949 }
950 class B extends A { 950 class B extends A {
951 m(); 951 m();
952 }'''); 952 }''');
953 resolve(source); 953 computeLibrarySourceErrors(source);
954 assertNoErrors(source); 954 assertNoErrors(source);
955 verify([source]); 955 verify([source]);
956 } 956 }
957 957
958 void test_conflictingInstanceGetterAndSuperclassMember_instance() { 958 void test_conflictingInstanceGetterAndSuperclassMember_instance() {
959 Source source = addSource(r''' 959 Source source = addSource(r'''
960 class A { 960 class A {
961 get v => 0; 961 get v => 0;
962 } 962 }
963 class B extends A { 963 class B extends A {
964 get v => 1; 964 get v => 1;
965 }'''); 965 }''');
966 resolve(source); 966 computeLibrarySourceErrors(source);
967 assertNoErrors(source); 967 assertNoErrors(source);
968 verify([source]); 968 verify([source]);
969 } 969 }
970 970
971 void test_conflictingStaticGetterAndInstanceSetter_thisClass() { 971 void test_conflictingStaticGetterAndInstanceSetter_thisClass() {
972 Source source = addSource(r''' 972 Source source = addSource(r'''
973 class A { 973 class A {
974 static get x => 0; 974 static get x => 0;
975 static set x(int p) {} 975 static set x(int p) {}
976 }'''); 976 }''');
977 resolve(source); 977 computeLibrarySourceErrors(source);
978 assertNoErrors(source); 978 assertNoErrors(source);
979 verify([source]); 979 verify([source]);
980 } 980 }
981 981
982 void test_conflictingStaticSetterAndInstanceMember_thisClass_method() { 982 void test_conflictingStaticSetterAndInstanceMember_thisClass_method() {
983 Source source = addSource(r''' 983 Source source = addSource(r'''
984 class A { 984 class A {
985 static x() {} 985 static x() {}
986 static set x(int p) {} 986 static set x(int p) {}
987 }'''); 987 }''');
988 resolve(source); 988 computeLibrarySourceErrors(source);
989 assertNoErrors(source); 989 assertNoErrors(source);
990 verify([source]); 990 verify([source]);
991 } 991 }
992 992
993 void test_const_constructor_with_named_generic_parameter() { 993 void test_const_constructor_with_named_generic_parameter() {
994 Source source = addSource(''' 994 Source source = addSource('''
995 class C<T> { 995 class C<T> {
996 const C({T t}); 996 const C({T t});
997 } 997 }
998 const c = const C(t: 1); 998 const c = const C(t: 1);
999 '''); 999 ''');
1000 resolve(source); 1000 computeLibrarySourceErrors(source);
1001 assertNoErrors(source); 1001 assertNoErrors(source);
1002 verify([source]); 1002 verify([source]);
1003 } 1003 }
1004 1004
1005 void test_const_dynamic() { 1005 void test_const_dynamic() {
1006 Source source = addSource(''' 1006 Source source = addSource('''
1007 const Type d = dynamic; 1007 const Type d = dynamic;
1008 '''); 1008 ''');
1009 resolve(source); 1009 computeLibrarySourceErrors(source);
1010 assertNoErrors(source); 1010 assertNoErrors(source);
1011 verify([source]); 1011 verify([source]);
1012 } 1012 }
1013 1013
1014 void test_constConstructorWithNonConstSuper_explicit() { 1014 void test_constConstructorWithNonConstSuper_explicit() {
1015 Source source = addSource(r''' 1015 Source source = addSource(r'''
1016 class A { 1016 class A {
1017 const A(); 1017 const A();
1018 } 1018 }
1019 class B extends A { 1019 class B extends A {
1020 const B(): super(); 1020 const B(): super();
1021 }'''); 1021 }''');
1022 resolve(source); 1022 computeLibrarySourceErrors(source);
1023 assertNoErrors(source); 1023 assertNoErrors(source);
1024 verify([source]); 1024 verify([source]);
1025 } 1025 }
1026 1026
1027 void test_constConstructorWithNonConstSuper_redirectingFactory() { 1027 void test_constConstructorWithNonConstSuper_redirectingFactory() {
1028 Source source = addSource(r''' 1028 Source source = addSource(r'''
1029 class A { 1029 class A {
1030 A(); 1030 A();
1031 } 1031 }
1032 class B implements C { 1032 class B implements C {
1033 const B(); 1033 const B();
1034 } 1034 }
1035 class C extends A { 1035 class C extends A {
1036 const factory C() = B; 1036 const factory C() = B;
1037 }'''); 1037 }''');
1038 resolve(source); 1038 computeLibrarySourceErrors(source);
1039 assertNoErrors(source); 1039 assertNoErrors(source);
1040 verify([source]); 1040 verify([source]);
1041 } 1041 }
1042 1042
1043 void test_constConstructorWithNonConstSuper_unresolved() { 1043 void test_constConstructorWithNonConstSuper_unresolved() {
1044 Source source = addSource(r''' 1044 Source source = addSource(r'''
1045 class A { 1045 class A {
1046 A.a(); 1046 A.a();
1047 } 1047 }
1048 class B extends A { 1048 class B extends A {
1049 const B(): super(); 1049 const B(): super();
1050 }'''); 1050 }''');
1051 resolve(source); 1051 computeLibrarySourceErrors(source);
1052 assertErrors(source, 1052 assertErrors(source,
1053 [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]); 1053 [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
1054 verify([source]); 1054 verify([source]);
1055 } 1055 }
1056 1056
1057 void test_constConstructorWithNonFinalField_finalInstanceVar() { 1057 void test_constConstructorWithNonFinalField_finalInstanceVar() {
1058 Source source = addSource(r''' 1058 Source source = addSource(r'''
1059 class A { 1059 class A {
1060 final int x = 0; 1060 final int x = 0;
1061 const A(); 1061 const A();
1062 }'''); 1062 }''');
1063 resolve(source); 1063 computeLibrarySourceErrors(source);
1064 assertNoErrors(source); 1064 assertNoErrors(source);
1065 verify([source]); 1065 verify([source]);
1066 } 1066 }
1067 1067
1068 void test_constConstructorWithNonFinalField_mixin() { 1068 void test_constConstructorWithNonFinalField_mixin() {
1069 Source source = addSource(r''' 1069 Source source = addSource(r'''
1070 class A { 1070 class A {
1071 a() {} 1071 a() {}
1072 } 1072 }
1073 class B extends Object with A { 1073 class B extends Object with A {
1074 const B(); 1074 const B();
1075 }'''); 1075 }''');
1076 resolve(source); 1076 computeLibrarySourceErrors(source);
1077 assertErrors(source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN]); 1077 assertErrors(source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN]);
1078 verify([source]); 1078 verify([source]);
1079 } 1079 }
1080 1080
1081 void test_constConstructorWithNonFinalField_static() { 1081 void test_constConstructorWithNonFinalField_static() {
1082 Source source = addSource(r''' 1082 Source source = addSource(r'''
1083 class A { 1083 class A {
1084 static int x; 1084 static int x;
1085 const A(); 1085 const A();
1086 }'''); 1086 }''');
1087 resolve(source); 1087 computeLibrarySourceErrors(source);
1088 assertNoErrors(source); 1088 assertNoErrors(source);
1089 verify([source]); 1089 verify([source]);
1090 } 1090 }
1091 1091
1092 void test_constConstructorWithNonFinalField_syntheticField() { 1092 void test_constConstructorWithNonFinalField_syntheticField() {
1093 Source source = addSource(r''' 1093 Source source = addSource(r'''
1094 class A { 1094 class A {
1095 const A(); 1095 const A();
1096 set x(value) {} 1096 set x(value) {}
1097 get x {return 0;} 1097 get x {return 0;}
1098 }'''); 1098 }''');
1099 resolve(source); 1099 computeLibrarySourceErrors(source);
1100 assertNoErrors(source); 1100 assertNoErrors(source);
1101 verify([source]); 1101 verify([source]);
1102 } 1102 }
1103 1103
1104 void test_constDeferredClass_new() { 1104 void test_constDeferredClass_new() {
1105 resolveWithErrors(<String>[ 1105 resolveWithErrors(<String>[
1106 r''' 1106 r'''
1107 library lib1; 1107 library lib1;
1108 class A { 1108 class A {
1109 const A.b(); 1109 const A.b();
1110 }''', 1110 }''',
1111 r''' 1111 r'''
1112 library root; 1112 library root;
1113 import 'lib1.dart' deferred as a; 1113 import 'lib1.dart' deferred as a;
1114 main() { 1114 main() {
1115 new a.A.b(); 1115 new a.A.b();
1116 }''' 1116 }'''
1117 ], <ErrorCode>[]); 1117 ], <ErrorCode>[]);
1118 } 1118 }
1119 1119
1120 void test_constEval_functionTypeLiteral() { 1120 void test_constEval_functionTypeLiteral() {
1121 Source source = addSource(r''' 1121 Source source = addSource(r'''
1122 typedef F(); 1122 typedef F();
1123 const C = F;'''); 1123 const C = F;''');
1124 resolve(source); 1124 computeLibrarySourceErrors(source);
1125 assertNoErrors(source); 1125 assertNoErrors(source);
1126 verify([source]); 1126 verify([source]);
1127 } 1127 }
1128 1128
1129 void test_constEval_propertyExtraction_fieldStatic_targetType() { 1129 void test_constEval_propertyExtraction_fieldStatic_targetType() {
1130 addNamedSource("/math.dart", r''' 1130 addNamedSource("/math.dart", r'''
1131 library math; 1131 library math;
1132 const PI = 3.14;'''); 1132 const PI = 3.14;''');
1133 Source source = addSource(r''' 1133 Source source = addSource(r'''
1134 import 'math.dart' as math; 1134 import 'math.dart' as math;
1135 const C = math.PI;'''); 1135 const C = math.PI;''');
1136 resolve(source); 1136 computeLibrarySourceErrors(source);
1137 assertNoErrors(source); 1137 assertNoErrors(source);
1138 verify([source]); 1138 verify([source]);
1139 } 1139 }
1140 1140
1141 void test_constEval_propertyExtraction_methodStatic_targetType() { 1141 void test_constEval_propertyExtraction_methodStatic_targetType() {
1142 Source source = addSource(r''' 1142 Source source = addSource(r'''
1143 class A { 1143 class A {
1144 const A(); 1144 const A();
1145 static m() {} 1145 static m() {}
1146 } 1146 }
1147 const C = A.m;'''); 1147 const C = A.m;''');
1148 resolve(source); 1148 computeLibrarySourceErrors(source);
1149 assertNoErrors(source); 1149 assertNoErrors(source);
1150 verify([source]); 1150 verify([source]);
1151 } 1151 }
1152 1152
1153 void test_constEval_symbol() { 1153 void test_constEval_symbol() {
1154 addNamedSource("/math.dart", r''' 1154 addNamedSource("/math.dart", r'''
1155 library math; 1155 library math;
1156 const PI = 3.14;'''); 1156 const PI = 3.14;''');
1157 Source source = addSource(r''' 1157 Source source = addSource(r'''
1158 const C = #foo; 1158 const C = #foo;
1159 foo() {}'''); 1159 foo() {}''');
1160 resolve(source); 1160 computeLibrarySourceErrors(source);
1161 assertNoErrors(source); 1161 assertNoErrors(source);
1162 verify([source]); 1162 verify([source]);
1163 } 1163 }
1164 1164
1165 void test_constEvalTypeBoolNumString_equal() { 1165 void test_constEvalTypeBoolNumString_equal() {
1166 Source source = addSource(r''' 1166 Source source = addSource(r'''
1167 class A { 1167 class A {
1168 const A(); 1168 const A();
1169 } 1169 }
1170 class B { 1170 class B {
1171 final v; 1171 final v;
1172 const B.a1(bool p) : v = p == true; 1172 const B.a1(bool p) : v = p == true;
1173 const B.a2(bool p) : v = p == false; 1173 const B.a2(bool p) : v = p == false;
1174 const B.a3(bool p) : v = p == 0; 1174 const B.a3(bool p) : v = p == 0;
1175 const B.a4(bool p) : v = p == 0.0; 1175 const B.a4(bool p) : v = p == 0.0;
1176 const B.a5(bool p) : v = p == ''; 1176 const B.a5(bool p) : v = p == '';
1177 const B.b1(int p) : v = p == true; 1177 const B.b1(int p) : v = p == true;
1178 const B.b2(int p) : v = p == false; 1178 const B.b2(int p) : v = p == false;
1179 const B.b3(int p) : v = p == 0; 1179 const B.b3(int p) : v = p == 0;
1180 const B.b4(int p) : v = p == 0.0; 1180 const B.b4(int p) : v = p == 0.0;
1181 const B.b5(int p) : v = p == ''; 1181 const B.b5(int p) : v = p == '';
1182 const B.c1(String p) : v = p == true; 1182 const B.c1(String p) : v = p == true;
1183 const B.c2(String p) : v = p == false; 1183 const B.c2(String p) : v = p == false;
1184 const B.c3(String p) : v = p == 0; 1184 const B.c3(String p) : v = p == 0;
1185 const B.c4(String p) : v = p == 0.0; 1185 const B.c4(String p) : v = p == 0.0;
1186 const B.c5(String p) : v = p == ''; 1186 const B.c5(String p) : v = p == '';
1187 const B.n1(num p) : v = p == null; 1187 const B.n1(num p) : v = p == null;
1188 const B.n2(num p) : v = null == p; 1188 const B.n2(num p) : v = null == p;
1189 }'''); 1189 }''');
1190 resolve(source); 1190 computeLibrarySourceErrors(source);
1191 assertNoErrors(source); 1191 assertNoErrors(source);
1192 } 1192 }
1193 1193
1194 void test_constEvalTypeBoolNumString_notEqual() { 1194 void test_constEvalTypeBoolNumString_notEqual() {
1195 Source source = addSource(r''' 1195 Source source = addSource(r'''
1196 class A { 1196 class A {
1197 const A(); 1197 const A();
1198 } 1198 }
1199 class B { 1199 class B {
1200 final v; 1200 final v;
1201 const B.a1(bool p) : v = p != true; 1201 const B.a1(bool p) : v = p != true;
1202 const B.a2(bool p) : v = p != false; 1202 const B.a2(bool p) : v = p != false;
1203 const B.a3(bool p) : v = p != 0; 1203 const B.a3(bool p) : v = p != 0;
1204 const B.a4(bool p) : v = p != 0.0; 1204 const B.a4(bool p) : v = p != 0.0;
1205 const B.a5(bool p) : v = p != ''; 1205 const B.a5(bool p) : v = p != '';
1206 const B.b1(int p) : v = p != true; 1206 const B.b1(int p) : v = p != true;
1207 const B.b2(int p) : v = p != false; 1207 const B.b2(int p) : v = p != false;
1208 const B.b3(int p) : v = p != 0; 1208 const B.b3(int p) : v = p != 0;
1209 const B.b4(int p) : v = p != 0.0; 1209 const B.b4(int p) : v = p != 0.0;
1210 const B.b5(int p) : v = p != ''; 1210 const B.b5(int p) : v = p != '';
1211 const B.c1(String p) : v = p != true; 1211 const B.c1(String p) : v = p != true;
1212 const B.c2(String p) : v = p != false; 1212 const B.c2(String p) : v = p != false;
1213 const B.c3(String p) : v = p != 0; 1213 const B.c3(String p) : v = p != 0;
1214 const B.c4(String p) : v = p != 0.0; 1214 const B.c4(String p) : v = p != 0.0;
1215 const B.c5(String p) : v = p != ''; 1215 const B.c5(String p) : v = p != '';
1216 const B.n1(num p) : v = p != null; 1216 const B.n1(num p) : v = p != null;
1217 const B.n2(num p) : v = null != p; 1217 const B.n2(num p) : v = null != p;
1218 }'''); 1218 }''');
1219 resolve(source); 1219 computeLibrarySourceErrors(source);
1220 assertNoErrors(source); 1220 assertNoErrors(source);
1221 verify([source]); 1221 verify([source]);
1222 } 1222 }
1223 1223
1224 void test_constEvelTypeNum_String() { 1224 void test_constEvelTypeNum_String() {
1225 Source source = addSource(r''' 1225 Source source = addSource(r'''
1226 const String A = 'a'; 1226 const String A = 'a';
1227 const String B = A + 'b'; 1227 const String B = A + 'b';
1228 '''); 1228 ''');
1229 resolve(source); 1229 computeLibrarySourceErrors(source);
1230 assertNoErrors(source); 1230 assertNoErrors(source);
1231 verify([source]); 1231 verify([source]);
1232 } 1232 }
1233 1233
1234 void test_constMapKeyExpressionTypeImplementsEquals_abstract() { 1234 void test_constMapKeyExpressionTypeImplementsEquals_abstract() {
1235 Source source = addSource(r''' 1235 Source source = addSource(r'''
1236 abstract class B { 1236 abstract class B {
1237 final id; 1237 final id;
1238 const B(this.id); 1238 const B(this.id);
1239 String toString() => 'C($id)'; 1239 String toString() => 'C($id)';
1240 /** Equality is identity equality, the id isn't used. */ 1240 /** Equality is identity equality, the id isn't used. */
1241 bool operator==(Object other); 1241 bool operator==(Object other);
1242 } 1242 }
1243 1243
1244 class C extends B { 1244 class C extends B {
1245 const C(id) : super(id); 1245 const C(id) : super(id);
1246 } 1246 }
1247 1247
1248 Map getMap() { 1248 Map getMap() {
1249 return const { const C(0): 'Map: 0' }; 1249 return const { const C(0): 'Map: 0' };
1250 }'''); 1250 }''');
1251 resolve(source); 1251 computeLibrarySourceErrors(source);
1252 assertNoErrors(source); 1252 assertNoErrors(source);
1253 verify([source]); 1253 verify([source]);
1254 } 1254 }
1255 1255
1256 void test_constNotInitialized_field() { 1256 void test_constNotInitialized_field() {
1257 Source source = addSource(r''' 1257 Source source = addSource(r'''
1258 class A { 1258 class A {
1259 static const int x = 0; 1259 static const int x = 0;
1260 }'''); 1260 }''');
1261 resolve(source); 1261 computeLibrarySourceErrors(source);
1262 assertNoErrors(source); 1262 assertNoErrors(source);
1263 verify([source]); 1263 verify([source]);
1264 } 1264 }
1265 1265
1266 void test_constNotInitialized_local() { 1266 void test_constNotInitialized_local() {
1267 Source source = addSource(r''' 1267 Source source = addSource(r'''
1268 main() { 1268 main() {
1269 const int x = 0; 1269 const int x = 0;
1270 }'''); 1270 }''');
1271 resolve(source); 1271 computeLibrarySourceErrors(source);
1272 assertNoErrors(source); 1272 assertNoErrors(source);
1273 verify([source]); 1273 verify([source]);
1274 } 1274 }
1275 1275
1276 void test_constructorDeclaration_scope_signature() { 1276 void test_constructorDeclaration_scope_signature() {
1277 Source source = addSource(r''' 1277 Source source = addSource(r'''
1278 const app = 0; 1278 const app = 0;
1279 class A { 1279 class A {
1280 A(@app int app) {} 1280 A(@app int app) {}
1281 }'''); 1281 }''');
1282 resolve(source); 1282 computeLibrarySourceErrors(source);
1283 assertNoErrors(source); 1283 assertNoErrors(source);
1284 verify([source]); 1284 verify([source]);
1285 } 1285 }
1286 1286
1287 void test_constWithNonConstantArgument_literals() { 1287 void test_constWithNonConstantArgument_literals() {
1288 Source source = addSource(r''' 1288 Source source = addSource(r'''
1289 class A { 1289 class A {
1290 const A(a, b, c, d); 1290 const A(a, b, c, d);
1291 } 1291 }
1292 f() { return const A(true, 0, 1.0, '2'); }'''); 1292 f() { return const A(true, 0, 1.0, '2'); }''');
1293 resolve(source); 1293 computeLibrarySourceErrors(source);
1294 assertNoErrors(source); 1294 assertNoErrors(source);
1295 verify([source]); 1295 verify([source]);
1296 } 1296 }
1297 1297
1298 void test_constWithTypeParameters_direct() { 1298 void test_constWithTypeParameters_direct() {
1299 Source source = addSource(r''' 1299 Source source = addSource(r'''
1300 class A<T> { 1300 class A<T> {
1301 static const V = const A<int>(); 1301 static const V = const A<int>();
1302 const A(); 1302 const A();
1303 }'''); 1303 }''');
1304 resolve(source); 1304 computeLibrarySourceErrors(source);
1305 assertNoErrors(source); 1305 assertNoErrors(source);
1306 verify([source]); 1306 verify([source]);
1307 } 1307 }
1308 1308
1309 void test_constWithUndefinedConstructor() { 1309 void test_constWithUndefinedConstructor() {
1310 Source source = addSource(r''' 1310 Source source = addSource(r'''
1311 class A { 1311 class A {
1312 const A.name(); 1312 const A.name();
1313 } 1313 }
1314 f() { 1314 f() {
1315 return const A.name(); 1315 return const A.name();
1316 }'''); 1316 }''');
1317 resolve(source); 1317 computeLibrarySourceErrors(source);
1318 assertNoErrors(source); 1318 assertNoErrors(source);
1319 verify([source]); 1319 verify([source]);
1320 } 1320 }
1321 1321
1322 void test_constWithUndefinedConstructorDefault() { 1322 void test_constWithUndefinedConstructorDefault() {
1323 Source source = addSource(r''' 1323 Source source = addSource(r'''
1324 class A { 1324 class A {
1325 const A(); 1325 const A();
1326 } 1326 }
1327 f() { 1327 f() {
1328 return const A(); 1328 return const A();
1329 }'''); 1329 }''');
1330 resolve(source); 1330 computeLibrarySourceErrors(source);
1331 assertNoErrors(source); 1331 assertNoErrors(source);
1332 verify([source]); 1332 verify([source]);
1333 } 1333 }
1334 1334
1335 void test_defaultValueInFunctionTypeAlias() { 1335 void test_defaultValueInFunctionTypeAlias() {
1336 Source source = addSource("typedef F([x]);"); 1336 Source source = addSource("typedef F([x]);");
1337 resolve(source); 1337 computeLibrarySourceErrors(source);
1338 assertNoErrors(source); 1338 assertNoErrors(source);
1339 verify([source]); 1339 verify([source]);
1340 } 1340 }
1341 1341
1342 void test_defaultValueInFunctionTypedParameter_named() { 1342 void test_defaultValueInFunctionTypedParameter_named() {
1343 Source source = addSource("f(g({p})) {}"); 1343 Source source = addSource("f(g({p})) {}");
1344 resolve(source); 1344 computeLibrarySourceErrors(source);
1345 assertNoErrors(source); 1345 assertNoErrors(source);
1346 verify([source]); 1346 verify([source]);
1347 } 1347 }
1348 1348
1349 void test_defaultValueInFunctionTypedParameter_optional() { 1349 void test_defaultValueInFunctionTypedParameter_optional() {
1350 Source source = addSource("f(g([p])) {}"); 1350 Source source = addSource("f(g([p])) {}");
1351 resolve(source); 1351 computeLibrarySourceErrors(source);
1352 assertNoErrors(source); 1352 assertNoErrors(source);
1353 verify([source]); 1353 verify([source]);
1354 } 1354 }
1355 1355
1356 void test_deprecatedMemberUse_hide() { 1356 void test_deprecatedMemberUse_hide() {
1357 Source source = addSource(r''' 1357 Source source = addSource(r'''
1358 library lib; 1358 library lib;
1359 import 'lib1.dart' hide B; 1359 import 'lib1.dart' hide B;
1360 A a = new A();'''); 1360 A a = new A();''');
1361 addNamedSource("/lib1.dart", r''' 1361 addNamedSource("/lib1.dart", r'''
1362 library lib1; 1362 library lib1;
1363 class A {} 1363 class A {}
1364 @deprecated 1364 @deprecated
1365 class B {}'''); 1365 class B {}''');
1366 resolve(source); 1366 computeLibrarySourceErrors(source);
1367 assertNoErrors(source); 1367 assertNoErrors(source);
1368 verify([source]); 1368 verify([source]);
1369 } 1369 }
1370 1370
1371 void test_duplicateDefinition_emptyName() { 1371 void test_duplicateDefinition_emptyName() {
1372 // Note: This code has two FunctionElements '() {}' with an empty name, 1372 // Note: This code has two FunctionElements '() {}' with an empty name,
1373 // this tests that the empty string is not put into the scope 1373 // this tests that the empty string is not put into the scope
1374 // (more than once). 1374 // (more than once).
1375 Source source = addSource(r''' 1375 Source source = addSource(r'''
1376 Map _globalMap = { 1376 Map _globalMap = {
1377 'a' : () {}, 1377 'a' : () {},
1378 'b' : () {} 1378 'b' : () {}
1379 };'''); 1379 };''');
1380 resolve(source); 1380 computeLibrarySourceErrors(source);
1381 assertNoErrors(source); 1381 assertNoErrors(source);
1382 verify([source]); 1382 verify([source]);
1383 } 1383 }
1384 1384
1385 void test_duplicateDefinition_getter() { 1385 void test_duplicateDefinition_getter() {
1386 Source source = addSource("bool get a => true;"); 1386 Source source = addSource("bool get a => true;");
1387 resolve(source); 1387 computeLibrarySourceErrors(source);
1388 assertNoErrors(source); 1388 assertNoErrors(source);
1389 verify([source]); 1389 verify([source]);
1390 } 1390 }
1391 1391
1392 void test_dynamicIdentifier() { 1392 void test_dynamicIdentifier() {
1393 Source source = addSource(r''' 1393 Source source = addSource(r'''
1394 main() { 1394 main() {
1395 var v = dynamic; 1395 var v = dynamic;
1396 }'''); 1396 }''');
1397 resolve(source); 1397 computeLibrarySourceErrors(source);
1398 assertNoErrors(source); 1398 assertNoErrors(source);
1399 verify([source]); 1399 verify([source]);
1400 } 1400 }
1401 1401
1402 void test_empty_generator_async() { 1402 void test_empty_generator_async() {
1403 Source source = addSource(''' 1403 Source source = addSource('''
1404 import 'dart:async'; 1404 import 'dart:async';
1405 Stream<int> f() async* { 1405 Stream<int> f() async* {
1406 } 1406 }
1407 '''); 1407 ''');
1408 resolve(source); 1408 computeLibrarySourceErrors(source);
1409 assertNoErrors(source); 1409 assertNoErrors(source);
1410 verify([source]); 1410 verify([source]);
1411 } 1411 }
1412 1412
1413 void test_empty_generator_sync() { 1413 void test_empty_generator_sync() {
1414 Source source = addSource(''' 1414 Source source = addSource('''
1415 Iterable<int> f() sync* { 1415 Iterable<int> f() sync* {
1416 } 1416 }
1417 '''); 1417 ''');
1418 resolve(source); 1418 computeLibrarySourceErrors(source);
1419 assertNoErrors(source); 1419 assertNoErrors(source);
1420 verify([source]); 1420 verify([source]);
1421 } 1421 }
1422 1422
1423 void test_expectedOneListTypeArgument() { 1423 void test_expectedOneListTypeArgument() {
1424 Source source = addSource(r''' 1424 Source source = addSource(r'''
1425 main() { 1425 main() {
1426 <int> []; 1426 <int> [];
1427 }'''); 1427 }''');
1428 resolve(source); 1428 computeLibrarySourceErrors(source);
1429 assertNoErrors(source); 1429 assertNoErrors(source);
1430 verify([source]); 1430 verify([source]);
1431 } 1431 }
1432 1432
1433 void test_expectedTwoMapTypeArguments() { 1433 void test_expectedTwoMapTypeArguments() {
1434 Source source = addSource(r''' 1434 Source source = addSource(r'''
1435 main() { 1435 main() {
1436 <int, int> {}; 1436 <int, int> {};
1437 }'''); 1437 }''');
1438 resolve(source); 1438 computeLibrarySourceErrors(source);
1439 assertNoErrors(source); 1439 assertNoErrors(source);
1440 verify([source]); 1440 verify([source]);
1441 } 1441 }
1442 1442
1443 void test_exportOfNonLibrary_libraryDeclared() { 1443 void test_exportOfNonLibrary_libraryDeclared() {
1444 Source source = addSource(r''' 1444 Source source = addSource(r'''
1445 library L; 1445 library L;
1446 export 'lib1.dart';'''); 1446 export 'lib1.dart';''');
1447 addNamedSource("/lib1.dart", "library lib1;"); 1447 addNamedSource("/lib1.dart", "library lib1;");
1448 resolve(source); 1448 computeLibrarySourceErrors(source);
1449 assertNoErrors(source); 1449 assertNoErrors(source);
1450 verify([source]); 1450 verify([source]);
1451 } 1451 }
1452 1452
1453 void test_exportOfNonLibrary_libraryNotDeclared() { 1453 void test_exportOfNonLibrary_libraryNotDeclared() {
1454 Source source = addSource(r''' 1454 Source source = addSource(r'''
1455 library L; 1455 library L;
1456 export 'lib1.dart';'''); 1456 export 'lib1.dart';''');
1457 addNamedSource("/lib1.dart", ""); 1457 addNamedSource("/lib1.dart", "");
1458 resolve(source); 1458 computeLibrarySourceErrors(source);
1459 assertNoErrors(source); 1459 assertNoErrors(source);
1460 verify([source]); 1460 verify([source]);
1461 } 1461 }
1462 1462
1463 void test_extraPositionalArguments_function() { 1463 void test_extraPositionalArguments_function() {
1464 Source source = addSource(r''' 1464 Source source = addSource(r'''
1465 f(p1, p2) {} 1465 f(p1, p2) {}
1466 main() { 1466 main() {
1467 f(1, 2); 1467 f(1, 2);
1468 }'''); 1468 }''');
1469 resolve(source); 1469 computeLibrarySourceErrors(source);
1470 assertNoErrors(source); 1470 assertNoErrors(source);
1471 verify([source]); 1471 verify([source]);
1472 } 1472 }
1473 1473
1474 void test_extraPositionalArguments_Function() { 1474 void test_extraPositionalArguments_Function() {
1475 Source source = addSource(r''' 1475 Source source = addSource(r'''
1476 f(Function a) { 1476 f(Function a) {
1477 a(1, 2); 1477 a(1, 2);
1478 }'''); 1478 }''');
1479 resolve(source); 1479 computeLibrarySourceErrors(source);
1480 assertNoErrors(source); 1480 assertNoErrors(source);
1481 verify([source]); 1481 verify([source]);
1482 } 1482 }
1483 1483
1484 void test_extraPositionalArguments_implicitConstructor() { 1484 void test_extraPositionalArguments_implicitConstructor() {
1485 Source source = addSource(r''' 1485 Source source = addSource(r'''
1486 class A<E extends num> { 1486 class A<E extends num> {
1487 A(E x, E y); 1487 A(E x, E y);
1488 } 1488 }
1489 class M {} 1489 class M {}
1490 class B<E extends num> = A<E> with M; 1490 class B<E extends num> = A<E> with M;
1491 void main() { 1491 void main() {
1492 B<int> x = new B<int>(0,0); 1492 B<int> x = new B<int>(0,0);
1493 }'''); 1493 }''');
1494 resolve(source); 1494 computeLibrarySourceErrors(source);
1495 assertNoErrors(source); 1495 assertNoErrors(source);
1496 verify([source]); 1496 verify([source]);
1497 } 1497 }
1498 1498
1499 void test_extraPositionalArguments_typedef_local() { 1499 void test_extraPositionalArguments_typedef_local() {
1500 Source source = addSource(r''' 1500 Source source = addSource(r'''
1501 typedef A(p1, p2); 1501 typedef A(p1, p2);
1502 A getA() => null; 1502 A getA() => null;
1503 f() { 1503 f() {
1504 A a = getA(); 1504 A a = getA();
1505 a(1, 2); 1505 a(1, 2);
1506 }'''); 1506 }''');
1507 resolve(source); 1507 computeLibrarySourceErrors(source);
1508 assertNoErrors(source); 1508 assertNoErrors(source);
1509 verify([source]); 1509 verify([source]);
1510 } 1510 }
1511 1511
1512 void test_extraPositionalArguments_typedef_parameter() { 1512 void test_extraPositionalArguments_typedef_parameter() {
1513 Source source = addSource(r''' 1513 Source source = addSource(r'''
1514 typedef A(p1, p2); 1514 typedef A(p1, p2);
1515 f(A a) { 1515 f(A a) {
1516 a(1, 2); 1516 a(1, 2);
1517 }'''); 1517 }''');
1518 resolve(source); 1518 computeLibrarySourceErrors(source);
1519 assertNoErrors(source); 1519 assertNoErrors(source);
1520 verify([source]); 1520 verify([source]);
1521 } 1521 }
1522 1522
1523 void test_fieldInitializedByMultipleInitializers() { 1523 void test_fieldInitializedByMultipleInitializers() {
1524 Source source = addSource(r''' 1524 Source source = addSource(r'''
1525 class A { 1525 class A {
1526 int x; 1526 int x;
1527 int y; 1527 int y;
1528 A() : x = 0, y = 0 {} 1528 A() : x = 0, y = 0 {}
1529 }'''); 1529 }''');
1530 resolve(source); 1530 computeLibrarySourceErrors(source);
1531 assertNoErrors(source); 1531 assertNoErrors(source);
1532 verify([source]); 1532 verify([source]);
1533 } 1533 }
1534 1534
1535 void test_fieldInitializedInInitializerAndDeclaration_fieldNotFinal() { 1535 void test_fieldInitializedInInitializerAndDeclaration_fieldNotFinal() {
1536 Source source = addSource(r''' 1536 Source source = addSource(r'''
1537 class A { 1537 class A {
1538 int x = 0; 1538 int x = 0;
1539 A() : x = 1 {} 1539 A() : x = 1 {}
1540 }'''); 1540 }''');
1541 resolve(source); 1541 computeLibrarySourceErrors(source);
1542 assertNoErrors(source); 1542 assertNoErrors(source);
1543 verify([source]); 1543 verify([source]);
1544 } 1544 }
1545 1545
1546 void test_fieldInitializedInInitializerAndDeclaration_finalFieldNotSet() { 1546 void test_fieldInitializedInInitializerAndDeclaration_finalFieldNotSet() {
1547 Source source = addSource(r''' 1547 Source source = addSource(r'''
1548 class A { 1548 class A {
1549 final int x; 1549 final int x;
1550 A() : x = 1 {} 1550 A() : x = 1 {}
1551 }'''); 1551 }''');
1552 resolve(source); 1552 computeLibrarySourceErrors(source);
1553 assertNoErrors(source); 1553 assertNoErrors(source);
1554 verify([source]); 1554 verify([source]);
1555 } 1555 }
1556 1556
1557 void test_fieldInitializerOutsideConstructor() { 1557 void test_fieldInitializerOutsideConstructor() {
1558 Source source = addSource(r''' 1558 Source source = addSource(r'''
1559 class A { 1559 class A {
1560 int x; 1560 int x;
1561 A(this.x) {} 1561 A(this.x) {}
1562 }'''); 1562 }''');
1563 resolve(source); 1563 computeLibrarySourceErrors(source);
1564 assertNoErrors(source); 1564 assertNoErrors(source);
1565 verify([source]); 1565 verify([source]);
1566 } 1566 }
1567 1567
1568 void test_fieldInitializerOutsideConstructor_defaultParameters() { 1568 void test_fieldInitializerOutsideConstructor_defaultParameters() {
1569 Source source = addSource(r''' 1569 Source source = addSource(r'''
1570 class A { 1570 class A {
1571 int x; 1571 int x;
1572 A([this.x]) {} 1572 A([this.x]) {}
1573 }'''); 1573 }''');
1574 resolve(source); 1574 computeLibrarySourceErrors(source);
1575 assertNoErrors(source); 1575 assertNoErrors(source);
1576 verify([source]); 1576 verify([source]);
1577 } 1577 }
1578 1578
1579 void test_fieldInitializerRedirectingConstructor_super() { 1579 void test_fieldInitializerRedirectingConstructor_super() {
1580 Source source = addSource(r''' 1580 Source source = addSource(r'''
1581 class A { 1581 class A {
1582 A() {} 1582 A() {}
1583 } 1583 }
1584 class B extends A { 1584 class B extends A {
1585 int x; 1585 int x;
1586 B(this.x) : super(); 1586 B(this.x) : super();
1587 }'''); 1587 }''');
1588 resolve(source); 1588 computeLibrarySourceErrors(source);
1589 assertNoErrors(source); 1589 assertNoErrors(source);
1590 verify([source]); 1590 verify([source]);
1591 } 1591 }
1592 1592
1593 void test_finalInitializedInDeclarationAndConstructor_initializer() { 1593 void test_finalInitializedInDeclarationAndConstructor_initializer() {
1594 Source source = addSource(r''' 1594 Source source = addSource(r'''
1595 class A { 1595 class A {
1596 final x; 1596 final x;
1597 A() : x = 1 {} 1597 A() : x = 1 {}
1598 }'''); 1598 }''');
1599 resolve(source); 1599 computeLibrarySourceErrors(source);
1600 assertNoErrors(source); 1600 assertNoErrors(source);
1601 verify([source]); 1601 verify([source]);
1602 } 1602 }
1603 1603
1604 void test_finalInitializedInDeclarationAndConstructor_initializingFormal() { 1604 void test_finalInitializedInDeclarationAndConstructor_initializingFormal() {
1605 Source source = addSource(r''' 1605 Source source = addSource(r'''
1606 class A { 1606 class A {
1607 final x; 1607 final x;
1608 A(this.x) {} 1608 A(this.x) {}
1609 }'''); 1609 }''');
1610 resolve(source); 1610 computeLibrarySourceErrors(source);
1611 assertNoErrors(source); 1611 assertNoErrors(source);
1612 verify([source]); 1612 verify([source]);
1613 } 1613 }
1614 1614
1615 void test_finalNotInitialized_atDeclaration() { 1615 void test_finalNotInitialized_atDeclaration() {
1616 Source source = addSource(r''' 1616 Source source = addSource(r'''
1617 class A { 1617 class A {
1618 final int x = 0; 1618 final int x = 0;
1619 A() {} 1619 A() {}
1620 }'''); 1620 }''');
1621 resolve(source); 1621 computeLibrarySourceErrors(source);
1622 assertNoErrors(source); 1622 assertNoErrors(source);
1623 verify([source]); 1623 verify([source]);
1624 } 1624 }
1625 1625
1626 void test_finalNotInitialized_fieldFormal() { 1626 void test_finalNotInitialized_fieldFormal() {
1627 Source source = addSource(r''' 1627 Source source = addSource(r'''
1628 class A { 1628 class A {
1629 final int x = 0; 1629 final int x = 0;
1630 A() {} 1630 A() {}
1631 }'''); 1631 }''');
1632 resolve(source); 1632 computeLibrarySourceErrors(source);
1633 assertNoErrors(source); 1633 assertNoErrors(source);
1634 verify([source]); 1634 verify([source]);
1635 } 1635 }
1636 1636
1637 void test_finalNotInitialized_functionTypedFieldFormal() { 1637 void test_finalNotInitialized_functionTypedFieldFormal() {
1638 Source source = addSource(r''' 1638 Source source = addSource(r'''
1639 class A { 1639 class A {
1640 final Function x; 1640 final Function x;
1641 A(int this.x(int p)) {} 1641 A(int this.x(int p)) {}
1642 }'''); 1642 }''');
1643 resolve(source); 1643 computeLibrarySourceErrors(source);
1644 assertNoErrors(source); 1644 assertNoErrors(source);
1645 verify([source]); 1645 verify([source]);
1646 } 1646 }
1647 1647
1648 void test_finalNotInitialized_hasNativeClause_hasConstructor() { 1648 void test_finalNotInitialized_hasNativeClause_hasConstructor() {
1649 Source source = addSource(r''' 1649 Source source = addSource(r'''
1650 class A native 'something' { 1650 class A native 'something' {
1651 final int x; 1651 final int x;
1652 A() {} 1652 A() {}
1653 }'''); 1653 }''');
1654 resolve(source); 1654 computeLibrarySourceErrors(source);
1655 assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]); 1655 assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]);
1656 verify([source]); 1656 verify([source]);
1657 } 1657 }
1658 1658
1659 void test_finalNotInitialized_hasNativeClause_noConstructor() { 1659 void test_finalNotInitialized_hasNativeClause_noConstructor() {
1660 Source source = addSource(r''' 1660 Source source = addSource(r'''
1661 class A native 'something' { 1661 class A native 'something' {
1662 final int x; 1662 final int x;
1663 }'''); 1663 }''');
1664 resolve(source); 1664 computeLibrarySourceErrors(source);
1665 assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]); 1665 assertErrors(source, [ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE]);
1666 verify([source]); 1666 verify([source]);
1667 } 1667 }
1668 1668
1669 void test_finalNotInitialized_initializer() { 1669 void test_finalNotInitialized_initializer() {
1670 Source source = addSource(r''' 1670 Source source = addSource(r'''
1671 class A { 1671 class A {
1672 final int x; 1672 final int x;
1673 A() : x = 0 {} 1673 A() : x = 0 {}
1674 }'''); 1674 }''');
1675 resolve(source); 1675 computeLibrarySourceErrors(source);
1676 assertNoErrors(source); 1676 assertNoErrors(source);
1677 verify([source]); 1677 verify([source]);
1678 } 1678 }
1679 1679
1680 void test_finalNotInitialized_redirectingConstructor() { 1680 void test_finalNotInitialized_redirectingConstructor() {
1681 Source source = addSource(r''' 1681 Source source = addSource(r'''
1682 class A { 1682 class A {
1683 final int x; 1683 final int x;
1684 A(this.x); 1684 A(this.x);
1685 A.named() : this (42); 1685 A.named() : this (42);
1686 }'''); 1686 }''');
1687 resolve(source); 1687 computeLibrarySourceErrors(source);
1688 assertNoErrors(source); 1688 assertNoErrors(source);
1689 verify([source]); 1689 verify([source]);
1690 } 1690 }
1691 1691
1692 void test_functionDeclaration_scope_returnType() { 1692 void test_functionDeclaration_scope_returnType() {
1693 Source source = addSource("int f(int) { return 0; }"); 1693 Source source = addSource("int f(int) { return 0; }");
1694 resolve(source); 1694 computeLibrarySourceErrors(source);
1695 assertNoErrors(source); 1695 assertNoErrors(source);
1696 verify([source]); 1696 verify([source]);
1697 } 1697 }
1698 1698
1699 void test_functionDeclaration_scope_signature() { 1699 void test_functionDeclaration_scope_signature() {
1700 Source source = addSource(r''' 1700 Source source = addSource(r'''
1701 const app = 0; 1701 const app = 0;
1702 f(@app int app) {}'''); 1702 f(@app int app) {}''');
1703 resolve(source); 1703 computeLibrarySourceErrors(source);
1704 assertNoErrors(source); 1704 assertNoErrors(source);
1705 verify([source]); 1705 verify([source]);
1706 } 1706 }
1707 1707
1708 void test_functionTypeAlias_scope_returnType() { 1708 void test_functionTypeAlias_scope_returnType() {
1709 Source source = addSource("typedef int f(int);"); 1709 Source source = addSource("typedef int f(int);");
1710 resolve(source); 1710 computeLibrarySourceErrors(source);
1711 assertNoErrors(source); 1711 assertNoErrors(source);
1712 verify([source]); 1712 verify([source]);
1713 } 1713 }
1714 1714
1715 void test_functionTypeAlias_scope_signature() { 1715 void test_functionTypeAlias_scope_signature() {
1716 Source source = addSource(r''' 1716 Source source = addSource(r'''
1717 const app = 0; 1717 const app = 0;
1718 typedef int f(@app int app);'''); 1718 typedef int f(@app int app);''');
1719 resolve(source); 1719 computeLibrarySourceErrors(source);
1720 assertNoErrors(source); 1720 assertNoErrors(source);
1721 verify([source]); 1721 verify([source]);
1722 } 1722 }
1723 1723
1724 void test_functionWithoutCall() { 1724 void test_functionWithoutCall() {
1725 Source source = addSource(r''' 1725 Source source = addSource(r'''
1726 abstract class A implements Function { 1726 abstract class A implements Function {
1727 } 1727 }
1728 class B implements A { 1728 class B implements A {
1729 void call() {} 1729 void call() {}
1730 } 1730 }
1731 class C extends A { 1731 class C extends A {
1732 void call() {} 1732 void call() {}
1733 } 1733 }
1734 class D extends C { 1734 class D extends C {
1735 }'''); 1735 }''');
1736 resolve(source); 1736 computeLibrarySourceErrors(source);
1737 assertNoErrors(source); 1737 assertNoErrors(source);
1738 verify([source]); 1738 verify([source]);
1739 } 1739 }
1740 1740
1741 void test_functionWithoutCall_doesNotImplementFunction() { 1741 void test_functionWithoutCall_doesNotImplementFunction() {
1742 Source source = addSource("class A {}"); 1742 Source source = addSource("class A {}");
1743 resolve(source); 1743 computeLibrarySourceErrors(source);
1744 assertNoErrors(source); 1744 assertNoErrors(source);
1745 verify([source]); 1745 verify([source]);
1746 } 1746 }
1747 1747
1748 void test_functionWithoutCall_staticCallMethod() { 1748 void test_functionWithoutCall_staticCallMethod() {
1749 Source source = addSource(r''' 1749 Source source = addSource(r'''
1750 class A { } 1750 class A { }
1751 class B extends A { 1751 class B extends A {
1752 static call() { } 1752 static call() { }
1753 } 1753 }
1754 '''); 1754 ''');
1755 resolve(source); 1755 computeLibrarySourceErrors(source);
1756 assertNoErrors(source); 1756 assertNoErrors(source);
1757 verify([source]); 1757 verify([source]);
1758 } 1758 }
1759 1759
1760 void test_functionWithoutCall_withNoSuchMethod() { 1760 void test_functionWithoutCall_withNoSuchMethod() {
1761 // 16078 1761 // 16078
1762 Source source = addSource(r''' 1762 Source source = addSource(r'''
1763 class A implements Function { 1763 class A implements Function {
1764 noSuchMethod(inv) { 1764 noSuchMethod(inv) {
1765 return 42; 1765 return 42;
1766 } 1766 }
1767 }'''); 1767 }''');
1768 resolve(source); 1768 computeLibrarySourceErrors(source);
1769 assertNoErrors(source); 1769 assertNoErrors(source);
1770 verify([source]); 1770 verify([source]);
1771 } 1771 }
1772 1772
1773 void test_implicitConstructorDependencies() { 1773 void test_implicitConstructorDependencies() {
1774 // No warning should be generated for the code below; this requires that 1774 // No warning should be generated for the code below; this requires that
1775 // implicit constructors are generated for C1 before C2, even though C1 1775 // implicit constructors are generated for C1 before C2, even though C1
1776 // follows C2 in the file. See dartbug.com/21600. 1776 // follows C2 in the file. See dartbug.com/21600.
1777 Source source = addSource(r''' 1777 Source source = addSource(r'''
1778 class B { 1778 class B {
1779 B(int i); 1779 B(int i);
1780 } 1780 }
1781 class M1 {} 1781 class M1 {}
1782 class M2 {} 1782 class M2 {}
1783 1783
1784 class C2 = C1 with M2; 1784 class C2 = C1 with M2;
1785 class C1 = B with M1; 1785 class C1 = B with M1;
1786 1786
1787 main() { 1787 main() {
1788 new C2(5); 1788 new C2(5);
1789 } 1789 }
1790 '''); 1790 ''');
1791 resolve(source); 1791 computeLibrarySourceErrors(source);
1792 assertNoErrors(source); 1792 assertNoErrors(source);
1793 verify([source]); 1793 verify([source]);
1794 } 1794 }
1795 1795
1796 void test_implicitThisReferenceInInitializer_constructorName() { 1796 void test_implicitThisReferenceInInitializer_constructorName() {
1797 Source source = addSource(r''' 1797 Source source = addSource(r'''
1798 class A { 1798 class A {
1799 A.named() {} 1799 A.named() {}
1800 } 1800 }
1801 class B { 1801 class B {
1802 var v; 1802 var v;
1803 B() : v = new A.named(); 1803 B() : v = new A.named();
1804 }'''); 1804 }''');
1805 resolve(source); 1805 computeLibrarySourceErrors(source);
1806 assertNoErrors(source); 1806 assertNoErrors(source);
1807 verify([source]); 1807 verify([source]);
1808 } 1808 }
1809 1809
1810 void test_implicitThisReferenceInInitializer_importPrefix() { 1810 void test_implicitThisReferenceInInitializer_importPrefix() {
1811 Source source = addSource(r''' 1811 Source source = addSource(r'''
1812 import 'dart:async' as abstract; 1812 import 'dart:async' as abstract;
1813 class A { 1813 class A {
1814 var v = new abstract.Completer(); 1814 var v = new abstract.Completer();
1815 }'''); 1815 }''');
1816 resolve(source); 1816 computeLibrarySourceErrors(source);
1817 assertNoErrors(source); 1817 assertNoErrors(source);
1818 verify([source]); 1818 verify([source]);
1819 } 1819 }
1820 1820
1821 void test_implicitThisReferenceInInitializer_prefixedIdentifier() { 1821 void test_implicitThisReferenceInInitializer_prefixedIdentifier() {
1822 Source source = addSource(r''' 1822 Source source = addSource(r'''
1823 class A { 1823 class A {
1824 var f; 1824 var f;
1825 } 1825 }
1826 class B { 1826 class B {
1827 var v; 1827 var v;
1828 B(A a) : v = a.f; 1828 B(A a) : v = a.f;
1829 }'''); 1829 }''');
1830 resolve(source); 1830 computeLibrarySourceErrors(source);
1831 assertNoErrors(source); 1831 assertNoErrors(source);
1832 verify([source]); 1832 verify([source]);
1833 } 1833 }
1834 1834
1835 void test_implicitThisReferenceInInitializer_qualifiedMethodInvocation() { 1835 void test_implicitThisReferenceInInitializer_qualifiedMethodInvocation() {
1836 Source source = addSource(r''' 1836 Source source = addSource(r'''
1837 class A { 1837 class A {
1838 f() {} 1838 f() {}
1839 } 1839 }
1840 class B { 1840 class B {
1841 var v; 1841 var v;
1842 B() : v = new A().f(); 1842 B() : v = new A().f();
1843 }'''); 1843 }''');
1844 resolve(source); 1844 computeLibrarySourceErrors(source);
1845 assertNoErrors(source); 1845 assertNoErrors(source);
1846 verify([source]); 1846 verify([source]);
1847 } 1847 }
1848 1848
1849 void test_implicitThisReferenceInInitializer_qualifiedPropertyAccess() { 1849 void test_implicitThisReferenceInInitializer_qualifiedPropertyAccess() {
1850 Source source = addSource(r''' 1850 Source source = addSource(r'''
1851 class A { 1851 class A {
1852 var f; 1852 var f;
1853 } 1853 }
1854 class B { 1854 class B {
1855 var v; 1855 var v;
1856 B() : v = new A().f; 1856 B() : v = new A().f;
1857 }'''); 1857 }''');
1858 resolve(source); 1858 computeLibrarySourceErrors(source);
1859 assertNoErrors(source); 1859 assertNoErrors(source);
1860 verify([source]); 1860 verify([source]);
1861 } 1861 }
1862 1862
1863 void test_implicitThisReferenceInInitializer_staticField_thisClass() { 1863 void test_implicitThisReferenceInInitializer_staticField_thisClass() {
1864 Source source = addSource(r''' 1864 Source source = addSource(r'''
1865 class A { 1865 class A {
1866 var v; 1866 var v;
1867 A() : v = f; 1867 A() : v = f;
1868 static var f; 1868 static var f;
1869 }'''); 1869 }''');
1870 resolve(source); 1870 computeLibrarySourceErrors(source);
1871 assertNoErrors(source); 1871 assertNoErrors(source);
1872 verify([source]); 1872 verify([source]);
1873 } 1873 }
1874 1874
1875 void test_implicitThisReferenceInInitializer_staticGetter() { 1875 void test_implicitThisReferenceInInitializer_staticGetter() {
1876 Source source = addSource(r''' 1876 Source source = addSource(r'''
1877 class A { 1877 class A {
1878 var v; 1878 var v;
1879 A() : v = f; 1879 A() : v = f;
1880 static get f => 42; 1880 static get f => 42;
1881 }'''); 1881 }''');
1882 resolve(source); 1882 computeLibrarySourceErrors(source);
1883 assertNoErrors(source); 1883 assertNoErrors(source);
1884 verify([source]); 1884 verify([source]);
1885 } 1885 }
1886 1886
1887 void test_implicitThisReferenceInInitializer_staticMethod() { 1887 void test_implicitThisReferenceInInitializer_staticMethod() {
1888 Source source = addSource(r''' 1888 Source source = addSource(r'''
1889 class A { 1889 class A {
1890 var v; 1890 var v;
1891 A() : v = f(); 1891 A() : v = f();
1892 static f() => 42; 1892 static f() => 42;
1893 }'''); 1893 }''');
1894 resolve(source); 1894 computeLibrarySourceErrors(source);
1895 assertNoErrors(source); 1895 assertNoErrors(source);
1896 verify([source]); 1896 verify([source]);
1897 } 1897 }
1898 1898
1899 void test_implicitThisReferenceInInitializer_topLevelField() { 1899 void test_implicitThisReferenceInInitializer_topLevelField() {
1900 Source source = addSource(r''' 1900 Source source = addSource(r'''
1901 class A { 1901 class A {
1902 var v; 1902 var v;
1903 A() : v = f; 1903 A() : v = f;
1904 } 1904 }
1905 var f = 42;'''); 1905 var f = 42;''');
1906 resolve(source); 1906 computeLibrarySourceErrors(source);
1907 assertNoErrors(source); 1907 assertNoErrors(source);
1908 verify([source]); 1908 verify([source]);
1909 } 1909 }
1910 1910
1911 void test_implicitThisReferenceInInitializer_topLevelFunction() { 1911 void test_implicitThisReferenceInInitializer_topLevelFunction() {
1912 Source source = addSource(r''' 1912 Source source = addSource(r'''
1913 class A { 1913 class A {
1914 var v; 1914 var v;
1915 A() : v = f(); 1915 A() : v = f();
1916 } 1916 }
1917 f() => 42;'''); 1917 f() => 42;''');
1918 resolve(source); 1918 computeLibrarySourceErrors(source);
1919 assertNoErrors(source); 1919 assertNoErrors(source);
1920 verify([source]); 1920 verify([source]);
1921 } 1921 }
1922 1922
1923 void test_implicitThisReferenceInInitializer_topLevelGetter() { 1923 void test_implicitThisReferenceInInitializer_topLevelGetter() {
1924 Source source = addSource(r''' 1924 Source source = addSource(r'''
1925 class A { 1925 class A {
1926 var v; 1926 var v;
1927 A() : v = f; 1927 A() : v = f;
1928 } 1928 }
1929 get f => 42;'''); 1929 get f => 42;''');
1930 resolve(source); 1930 computeLibrarySourceErrors(source);
1931 assertNoErrors(source); 1931 assertNoErrors(source);
1932 verify([source]); 1932 verify([source]);
1933 } 1933 }
1934 1934
1935 void test_implicitThisReferenceInInitializer_typeParameter() { 1935 void test_implicitThisReferenceInInitializer_typeParameter() {
1936 Source source = addSource(r''' 1936 Source source = addSource(r'''
1937 class A<T> { 1937 class A<T> {
1938 var v; 1938 var v;
1939 A(p) : v = (p is T); 1939 A(p) : v = (p is T);
1940 }'''); 1940 }''');
1941 resolve(source); 1941 computeLibrarySourceErrors(source);
1942 assertNoErrors(source); 1942 assertNoErrors(source);
1943 verify([source]); 1943 verify([source]);
1944 } 1944 }
1945 1945
1946 void test_importDuplicatedLibraryName() { 1946 void test_importDuplicatedLibraryName() {
1947 Source source = addSource(r''' 1947 Source source = addSource(r'''
1948 library test; 1948 library test;
1949 import 'lib.dart'; 1949 import 'lib.dart';
1950 import 'lib.dart';'''); 1950 import 'lib.dart';''');
1951 addNamedSource("/lib.dart", "library lib;"); 1951 addNamedSource("/lib.dart", "library lib;");
1952 resolve(source); 1952 computeLibrarySourceErrors(source);
1953 assertErrors(source, [ 1953 assertErrors(source, [
1954 HintCode.UNUSED_IMPORT, 1954 HintCode.UNUSED_IMPORT,
1955 HintCode.UNUSED_IMPORT, 1955 HintCode.UNUSED_IMPORT,
1956 HintCode.DUPLICATE_IMPORT 1956 HintCode.DUPLICATE_IMPORT
1957 ]); 1957 ]);
1958 verify([source]); 1958 verify([source]);
1959 } 1959 }
1960 1960
1961 void test_importOfNonLibrary_libraryDeclared() { 1961 void test_importOfNonLibrary_libraryDeclared() {
1962 Source source = addSource(r''' 1962 Source source = addSource(r'''
1963 library lib; 1963 library lib;
1964 import 'part.dart'; 1964 import 'part.dart';
1965 A a;'''); 1965 A a;''');
1966 addNamedSource("/part.dart", r''' 1966 addNamedSource("/part.dart", r'''
1967 library lib1; 1967 library lib1;
1968 class A {}'''); 1968 class A {}''');
1969 resolve(source); 1969 computeLibrarySourceErrors(source);
1970 assertNoErrors(source); 1970 assertNoErrors(source);
1971 verify([source]); 1971 verify([source]);
1972 } 1972 }
1973 1973
1974 void test_importOfNonLibrary_libraryNotDeclared() { 1974 void test_importOfNonLibrary_libraryNotDeclared() {
1975 Source source = addSource(r''' 1975 Source source = addSource(r'''
1976 library lib; 1976 library lib;
1977 import 'part.dart'; 1977 import 'part.dart';
1978 A a;'''); 1978 A a;''');
1979 addNamedSource("/part.dart", "class A {}"); 1979 addNamedSource("/part.dart", "class A {}");
1980 resolve(source); 1980 computeLibrarySourceErrors(source);
1981 assertNoErrors(source); 1981 assertNoErrors(source);
1982 verify([source]); 1982 verify([source]);
1983 } 1983 }
1984 1984
1985 void test_importPrefixes_withFirstLetterDifference() { 1985 void test_importPrefixes_withFirstLetterDifference() {
1986 Source source = addSource(r''' 1986 Source source = addSource(r'''
1987 library L; 1987 library L;
1988 import 'lib1.dart' as math; 1988 import 'lib1.dart' as math;
1989 import 'lib2.dart' as path; 1989 import 'lib2.dart' as path;
1990 main() { 1990 main() {
1991 math.test1(); 1991 math.test1();
1992 path.test2(); 1992 path.test2();
1993 }'''); 1993 }''');
1994 addNamedSource("/lib1.dart", r''' 1994 addNamedSource("/lib1.dart", r'''
1995 library lib1; 1995 library lib1;
1996 test1() {}'''); 1996 test1() {}''');
1997 addNamedSource("/lib2.dart", r''' 1997 addNamedSource("/lib2.dart", r'''
1998 library lib2; 1998 library lib2;
1999 test2() {}'''); 1999 test2() {}''');
2000 resolve(source); 2000 computeLibrarySourceErrors(source);
2001 assertNoErrors(source); 2001 assertNoErrors(source);
2002 verify([source]); 2002 verify([source]);
2003 } 2003 }
2004 2004
2005 void test_inconsistentCaseExpressionTypes() { 2005 void test_inconsistentCaseExpressionTypes() {
2006 Source source = addSource(r''' 2006 Source source = addSource(r'''
2007 f(var p) { 2007 f(var p) {
2008 switch (p) { 2008 switch (p) {
2009 case 1: 2009 case 1:
2010 break; 2010 break;
2011 case 2: 2011 case 2:
2012 break; 2012 break;
2013 } 2013 }
2014 }'''); 2014 }''');
2015 resolve(source); 2015 computeLibrarySourceErrors(source);
2016 assertNoErrors(source); 2016 assertNoErrors(source);
2017 verify([source]); 2017 verify([source]);
2018 } 2018 }
2019 2019
2020 void test_inconsistentMethodInheritance_accessors_typeParameter2() { 2020 void test_inconsistentMethodInheritance_accessors_typeParameter2() {
2021 Source source = addSource(r''' 2021 Source source = addSource(r'''
2022 abstract class A<E> { 2022 abstract class A<E> {
2023 E get x {return null;} 2023 E get x {return null;}
2024 } 2024 }
2025 class B<E> { 2025 class B<E> {
2026 E get x {return null;} 2026 E get x {return null;}
2027 } 2027 }
2028 class C<E> extends A<E> implements B<E> {}'''); 2028 class C<E> extends A<E> implements B<E> {}''');
2029 resolve(source); 2029 computeLibrarySourceErrors(source);
2030 assertNoErrors(source); 2030 assertNoErrors(source);
2031 verify([source]); 2031 verify([source]);
2032 } 2032 }
2033 2033
2034 void test_inconsistentMethodInheritance_accessors_typeParameters1() { 2034 void test_inconsistentMethodInheritance_accessors_typeParameters1() {
2035 Source source = addSource(r''' 2035 Source source = addSource(r'''
2036 abstract class A<E> { 2036 abstract class A<E> {
2037 E get x; 2037 E get x;
2038 } 2038 }
2039 abstract class B<E> { 2039 abstract class B<E> {
2040 E get x; 2040 E get x;
2041 } 2041 }
2042 class C<E> implements A<E>, B<E> { 2042 class C<E> implements A<E>, B<E> {
2043 E get x => null; 2043 E get x => null;
2044 }'''); 2044 }''');
2045 resolve(source); 2045 computeLibrarySourceErrors(source);
2046 assertNoErrors(source); 2046 assertNoErrors(source);
2047 verify([source]); 2047 verify([source]);
2048 } 2048 }
2049 2049
2050 void test_inconsistentMethodInheritance_accessors_typeParameters_diamond() { 2050 void test_inconsistentMethodInheritance_accessors_typeParameters_diamond() {
2051 Source source = addSource(r''' 2051 Source source = addSource(r'''
2052 abstract class F<E> extends B<E> {} 2052 abstract class F<E> extends B<E> {}
2053 class D<E> extends F<E> { 2053 class D<E> extends F<E> {
2054 external E get g; 2054 external E get g;
2055 } 2055 }
2056 abstract class C<E> { 2056 abstract class C<E> {
2057 E get g; 2057 E get g;
2058 } 2058 }
2059 abstract class B<E> implements C<E> { 2059 abstract class B<E> implements C<E> {
2060 E get g { return null; } 2060 E get g { return null; }
2061 } 2061 }
2062 class A<E> extends B<E> implements D<E> { 2062 class A<E> extends B<E> implements D<E> {
2063 }'''); 2063 }''');
2064 resolve(source); 2064 computeLibrarySourceErrors(source);
2065 assertNoErrors(source); 2065 assertNoErrors(source);
2066 verify([source]); 2066 verify([source]);
2067 } 2067 }
2068 2068
2069 void test_inconsistentMethodInheritance_methods_typeParameter2() { 2069 void test_inconsistentMethodInheritance_methods_typeParameter2() {
2070 Source source = addSource(r''' 2070 Source source = addSource(r'''
2071 class A<E> { 2071 class A<E> {
2072 x(E e) {} 2072 x(E e) {}
2073 } 2073 }
2074 class B<E> { 2074 class B<E> {
2075 x(E e) {} 2075 x(E e) {}
2076 } 2076 }
2077 class C<E> extends A<E> implements B<E> { 2077 class C<E> extends A<E> implements B<E> {
2078 x(E e) {} 2078 x(E e) {}
2079 }'''); 2079 }''');
2080 resolve(source); 2080 computeLibrarySourceErrors(source);
2081 assertNoErrors(source); 2081 assertNoErrors(source);
2082 verify([source]); 2082 verify([source]);
2083 } 2083 }
2084 2084
2085 void test_inconsistentMethodInheritance_methods_typeParameters1() { 2085 void test_inconsistentMethodInheritance_methods_typeParameters1() {
2086 Source source = addSource(r''' 2086 Source source = addSource(r'''
2087 class A<E> { 2087 class A<E> {
2088 x(E e) {} 2088 x(E e) {}
2089 } 2089 }
2090 class B<E> { 2090 class B<E> {
2091 x(E e) {} 2091 x(E e) {}
2092 } 2092 }
2093 class C<E> implements A<E>, B<E> { 2093 class C<E> implements A<E>, B<E> {
2094 x(E e) {} 2094 x(E e) {}
2095 }'''); 2095 }''');
2096 resolve(source); 2096 computeLibrarySourceErrors(source);
2097 assertNoErrors(source); 2097 assertNoErrors(source);
2098 verify([source]); 2098 verify([source]);
2099 } 2099 }
2100 2100
2101 void test_inconsistentMethodInheritance_overrideTrumpsInherits_getter() { 2101 void test_inconsistentMethodInheritance_overrideTrumpsInherits_getter() {
2102 // 16134 2102 // 16134
2103 Source source = addSource(r''' 2103 Source source = addSource(r'''
2104 class B<S> { 2104 class B<S> {
2105 S get g => null; 2105 S get g => null;
2106 } 2106 }
2107 abstract class I<U> { 2107 abstract class I<U> {
2108 U get g => null; 2108 U get g => null;
2109 } 2109 }
2110 class C extends B<double> implements I<int> { 2110 class C extends B<double> implements I<int> {
2111 num get g => null; 2111 num get g => null;
2112 }'''); 2112 }''');
2113 resolve(source); 2113 computeLibrarySourceErrors(source);
2114 assertNoErrors(source); 2114 assertNoErrors(source);
2115 verify([source]); 2115 verify([source]);
2116 } 2116 }
2117 2117
2118 void test_inconsistentMethodInheritance_overrideTrumpsInherits_method() { 2118 void test_inconsistentMethodInheritance_overrideTrumpsInherits_method() {
2119 // 16134 2119 // 16134
2120 Source source = addSource(r''' 2120 Source source = addSource(r'''
2121 class B<S> { 2121 class B<S> {
2122 m(S s) => null; 2122 m(S s) => null;
2123 } 2123 }
2124 abstract class I<U> { 2124 abstract class I<U> {
2125 m(U u) => null; 2125 m(U u) => null;
2126 } 2126 }
2127 class C extends B<double> implements I<int> { 2127 class C extends B<double> implements I<int> {
2128 m(num n) => null; 2128 m(num n) => null;
2129 }'''); 2129 }''');
2130 resolve(source); 2130 computeLibrarySourceErrors(source);
2131 assertNoErrors(source); 2131 assertNoErrors(source);
2132 verify([source]); 2132 verify([source]);
2133 } 2133 }
2134 2134
2135 void test_inconsistentMethodInheritance_overrideTrumpsInherits_setter() { 2135 void test_inconsistentMethodInheritance_overrideTrumpsInherits_setter() {
2136 // 16134 2136 // 16134
2137 Source source = addSource(r''' 2137 Source source = addSource(r'''
2138 class B<S> { 2138 class B<S> {
2139 set t(S s) {} 2139 set t(S s) {}
2140 } 2140 }
2141 abstract class I<U> { 2141 abstract class I<U> {
2142 set t(U u) {} 2142 set t(U u) {}
2143 } 2143 }
2144 class C extends B<double> implements I<int> { 2144 class C extends B<double> implements I<int> {
2145 set t(num n) {} 2145 set t(num n) {}
2146 }'''); 2146 }''');
2147 resolve(source); 2147 computeLibrarySourceErrors(source);
2148 assertNoErrors(source); 2148 assertNoErrors(source);
2149 verify([source]); 2149 verify([source]);
2150 } 2150 }
2151 2151
2152 void test_inconsistentMethodInheritance_simple() { 2152 void test_inconsistentMethodInheritance_simple() {
2153 Source source = addSource(r''' 2153 Source source = addSource(r'''
2154 abstract class A { 2154 abstract class A {
2155 x(); 2155 x();
2156 } 2156 }
2157 abstract class B { 2157 abstract class B {
2158 x(); 2158 x();
2159 } 2159 }
2160 class C implements A, B { 2160 class C implements A, B {
2161 x() {} 2161 x() {}
2162 }'''); 2162 }''');
2163 resolve(source); 2163 computeLibrarySourceErrors(source);
2164 assertNoErrors(source); 2164 assertNoErrors(source);
2165 verify([source]); 2165 verify([source]);
2166 } 2166 }
2167 2167
2168 void test_initializingFormalForNonExistentField() { 2168 void test_initializingFormalForNonExistentField() {
2169 Source source = addSource(r''' 2169 Source source = addSource(r'''
2170 class A { 2170 class A {
2171 int x; 2171 int x;
2172 A(this.x) {} 2172 A(this.x) {}
2173 }'''); 2173 }''');
2174 resolve(source); 2174 computeLibrarySourceErrors(source);
2175 assertNoErrors(source); 2175 assertNoErrors(source);
2176 verify([source]); 2176 verify([source]);
2177 } 2177 }
2178 2178
2179 void test_instance_creation_inside_annotation() { 2179 void test_instance_creation_inside_annotation() {
2180 Source source = addSource(''' 2180 Source source = addSource('''
2181 class C { 2181 class C {
2182 const C(); 2182 const C();
2183 } 2183 }
2184 class D { 2184 class D {
2185 final C c; 2185 final C c;
2186 const D(this.c); 2186 const D(this.c);
2187 } 2187 }
2188 @D(const C()) 2188 @D(const C())
2189 f() {} 2189 f() {}
2190 '''); 2190 ''');
2191 resolve(source); 2191 computeLibrarySourceErrors(source);
2192 assertNoErrors(source); 2192 assertNoErrors(source);
2193 verify([source]); 2193 verify([source]);
2194 } 2194 }
2195 2195
2196 void test_instanceAccessToStaticMember_fromComment() { 2196 void test_instanceAccessToStaticMember_fromComment() {
2197 Source source = addSource(r''' 2197 Source source = addSource(r'''
2198 class A { 2198 class A {
2199 static m() {} 2199 static m() {}
2200 } 2200 }
2201 /// [A.m] 2201 /// [A.m]
2202 main() { 2202 main() {
2203 }'''); 2203 }''');
2204 resolve(source); 2204 computeLibrarySourceErrors(source);
2205 assertNoErrors(source); 2205 assertNoErrors(source);
2206 verify([source]); 2206 verify([source]);
2207 } 2207 }
2208 2208
2209 void test_instanceAccessToStaticMember_topLevel() { 2209 void test_instanceAccessToStaticMember_topLevel() {
2210 Source source = addSource(r''' 2210 Source source = addSource(r'''
2211 m() {} 2211 m() {}
2212 main() { 2212 main() {
2213 m(); 2213 m();
2214 }'''); 2214 }''');
2215 resolve(source); 2215 computeLibrarySourceErrors(source);
2216 assertNoErrors(source); 2216 assertNoErrors(source);
2217 verify([source]); 2217 verify([source]);
2218 } 2218 }
2219 2219
2220 void test_instanceMemberAccessFromStatic_fromComment() { 2220 void test_instanceMemberAccessFromStatic_fromComment() {
2221 Source source = addSource(r''' 2221 Source source = addSource(r'''
2222 class A { 2222 class A {
2223 m() {} 2223 m() {}
2224 /// [m] 2224 /// [m]
2225 static foo() { 2225 static foo() {
2226 } 2226 }
2227 }'''); 2227 }''');
2228 resolve(source); 2228 computeLibrarySourceErrors(source);
2229 assertNoErrors(source); 2229 assertNoErrors(source);
2230 verify([source]); 2230 verify([source]);
2231 } 2231 }
2232 2232
2233 void test_instanceMethodNameCollidesWithSuperclassStatic_field() { 2233 void test_instanceMethodNameCollidesWithSuperclassStatic_field() {
2234 Source source = addSource(r''' 2234 Source source = addSource(r'''
2235 import 'lib.dart'; 2235 import 'lib.dart';
2236 class B extends A { 2236 class B extends A {
2237 _m() {} 2237 _m() {}
2238 }'''); 2238 }''');
2239 addNamedSource("/lib.dart", r''' 2239 addNamedSource("/lib.dart", r'''
2240 library L; 2240 library L;
2241 class A { 2241 class A {
2242 static var _m; 2242 static var _m;
2243 }'''); 2243 }''');
2244 resolve(source); 2244 computeLibrarySourceErrors(source);
2245 assertNoErrors(source); 2245 assertNoErrors(source);
2246 verify([source]); 2246 verify([source]);
2247 } 2247 }
2248 2248
2249 void test_instanceMethodNameCollidesWithSuperclassStatic_method() { 2249 void test_instanceMethodNameCollidesWithSuperclassStatic_method() {
2250 Source source = addSource(r''' 2250 Source source = addSource(r'''
2251 import 'lib.dart'; 2251 import 'lib.dart';
2252 class B extends A { 2252 class B extends A {
2253 _m() {} 2253 _m() {}
2254 }'''); 2254 }''');
2255 addNamedSource("/lib.dart", r''' 2255 addNamedSource("/lib.dart", r'''
2256 library L; 2256 library L;
2257 class A { 2257 class A {
2258 static _m() {} 2258 static _m() {}
2259 }'''); 2259 }''');
2260 resolve(source); 2260 computeLibrarySourceErrors(source);
2261 assertNoErrors(source); 2261 assertNoErrors(source);
2262 verify([source]); 2262 verify([source]);
2263 } 2263 }
2264 2264
2265 void test_invalidAnnotation_constantVariable_field() { 2265 void test_invalidAnnotation_constantVariable_field() {
2266 Source source = addSource(r''' 2266 Source source = addSource(r'''
2267 @A.C 2267 @A.C
2268 class A { 2268 class A {
2269 static const C = 0; 2269 static const C = 0;
2270 }'''); 2270 }''');
2271 resolve(source); 2271 computeLibrarySourceErrors(source);
2272 assertNoErrors(source); 2272 assertNoErrors(source);
2273 verify([source]); 2273 verify([source]);
2274 } 2274 }
2275 2275
2276 void test_invalidAnnotation_constantVariable_field_importWithPrefix() { 2276 void test_invalidAnnotation_constantVariable_field_importWithPrefix() {
2277 addNamedSource("/lib.dart", r''' 2277 addNamedSource("/lib.dart", r'''
2278 library lib; 2278 library lib;
2279 class A { 2279 class A {
2280 static const C = 0; 2280 static const C = 0;
2281 }'''); 2281 }''');
2282 Source source = addSource(r''' 2282 Source source = addSource(r'''
2283 import 'lib.dart' as p; 2283 import 'lib.dart' as p;
2284 @p.A.C 2284 @p.A.C
2285 main() { 2285 main() {
2286 }'''); 2286 }''');
2287 resolve(source); 2287 computeLibrarySourceErrors(source);
2288 assertNoErrors(source); 2288 assertNoErrors(source);
2289 verify([source]); 2289 verify([source]);
2290 } 2290 }
2291 2291
2292 void test_invalidAnnotation_constantVariable_topLevel() { 2292 void test_invalidAnnotation_constantVariable_topLevel() {
2293 Source source = addSource(r''' 2293 Source source = addSource(r'''
2294 const C = 0; 2294 const C = 0;
2295 @C 2295 @C
2296 main() { 2296 main() {
2297 }'''); 2297 }''');
2298 resolve(source); 2298 computeLibrarySourceErrors(source);
2299 assertNoErrors(source); 2299 assertNoErrors(source);
2300 verify([source]); 2300 verify([source]);
2301 } 2301 }
2302 2302
2303 void test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() { 2303 void test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() {
2304 addNamedSource("/lib.dart", r''' 2304 addNamedSource("/lib.dart", r'''
2305 library lib; 2305 library lib;
2306 const C = 0;'''); 2306 const C = 0;''');
2307 Source source = addSource(r''' 2307 Source source = addSource(r'''
2308 import 'lib.dart' as p; 2308 import 'lib.dart' as p;
2309 @p.C 2309 @p.C
2310 main() { 2310 main() {
2311 }'''); 2311 }''');
2312 resolve(source); 2312 computeLibrarySourceErrors(source);
2313 assertNoErrors(source); 2313 assertNoErrors(source);
2314 verify([source]); 2314 verify([source]);
2315 } 2315 }
2316 2316
2317 void test_invalidAnnotation_constConstructor_importWithPrefix() { 2317 void test_invalidAnnotation_constConstructor_importWithPrefix() {
2318 addNamedSource("/lib.dart", r''' 2318 addNamedSource("/lib.dart", r'''
2319 library lib; 2319 library lib;
2320 class A { 2320 class A {
2321 const A(int p); 2321 const A(int p);
2322 }'''); 2322 }''');
2323 Source source = addSource(r''' 2323 Source source = addSource(r'''
2324 import 'lib.dart' as p; 2324 import 'lib.dart' as p;
2325 @p.A(42) 2325 @p.A(42)
2326 main() { 2326 main() {
2327 }'''); 2327 }''');
2328 resolve(source); 2328 computeLibrarySourceErrors(source);
2329 assertNoErrors(source); 2329 assertNoErrors(source);
2330 verify([source]); 2330 verify([source]);
2331 } 2331 }
2332 2332
2333 void test_invalidAnnotation_constConstructor_named_importWithPrefix() { 2333 void test_invalidAnnotation_constConstructor_named_importWithPrefix() {
2334 addNamedSource("/lib.dart", r''' 2334 addNamedSource("/lib.dart", r'''
2335 library lib; 2335 library lib;
2336 class A { 2336 class A {
2337 const A.named(int p); 2337 const A.named(int p);
2338 }'''); 2338 }''');
2339 Source source = addSource(r''' 2339 Source source = addSource(r'''
2340 import 'lib.dart' as p; 2340 import 'lib.dart' as p;
2341 @p.A.named(42) 2341 @p.A.named(42)
2342 main() { 2342 main() {
2343 }'''); 2343 }''');
2344 resolve(source); 2344 computeLibrarySourceErrors(source);
2345 assertNoErrors(source); 2345 assertNoErrors(source);
2346 verify([source]); 2346 verify([source]);
2347 } 2347 }
2348 2348
2349 void test_invalidAssignment() { 2349 void test_invalidAssignment() {
2350 Source source = addSource(r''' 2350 Source source = addSource(r'''
2351 f() { 2351 f() {
2352 var x; 2352 var x;
2353 var y; 2353 var y;
2354 x = y; 2354 x = y;
2355 }'''); 2355 }''');
2356 resolve(source); 2356 computeLibrarySourceErrors(source);
2357 assertNoErrors(source); 2357 assertNoErrors(source);
2358 verify([source]); 2358 verify([source]);
2359 } 2359 }
2360 2360
2361 void test_invalidAssignment_compoundAssignment() { 2361 void test_invalidAssignment_compoundAssignment() {
2362 Source source = addSource(r''' 2362 Source source = addSource(r'''
2363 class byte { 2363 class byte {
2364 int _value; 2364 int _value;
2365 byte(this._value); 2365 byte(this._value);
2366 byte operator +(int val) { return this; } 2366 byte operator +(int val) { return this; }
2367 } 2367 }
2368 2368
2369 void main() { 2369 void main() {
2370 byte b = new byte(52); 2370 byte b = new byte(52);
2371 b += 3; 2371 b += 3;
2372 }'''); 2372 }''');
2373 resolve(source); 2373 computeLibrarySourceErrors(source);
2374 assertNoErrors(source); 2374 assertNoErrors(source);
2375 verify([source]); 2375 verify([source]);
2376 } 2376 }
2377 2377
2378 void test_invalidAssignment_defaultValue_named() { 2378 void test_invalidAssignment_defaultValue_named() {
2379 Source source = addSource(r''' 2379 Source source = addSource(r'''
2380 f({String x: '0'}) { 2380 f({String x: '0'}) {
2381 }'''); 2381 }''');
2382 resolve(source); 2382 computeLibrarySourceErrors(source);
2383 assertNoErrors(source); 2383 assertNoErrors(source);
2384 verify([source]); 2384 verify([source]);
2385 } 2385 }
2386 2386
2387 void test_invalidAssignment_defaultValue_optional() { 2387 void test_invalidAssignment_defaultValue_optional() {
2388 Source source = addSource(r''' 2388 Source source = addSource(r'''
2389 f([String x = '0']) { 2389 f([String x = '0']) {
2390 }'''); 2390 }''');
2391 resolve(source); 2391 computeLibrarySourceErrors(source);
2392 assertNoErrors(source); 2392 assertNoErrors(source);
2393 verify([source]); 2393 verify([source]);
2394 } 2394 }
2395 2395
2396 void test_invalidAssignment_ifNullAssignment_compatibleType() { 2396 void test_invalidAssignment_ifNullAssignment_compatibleType() {
2397 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); 2397 AnalysisOptionsImpl options = new AnalysisOptionsImpl();
2398 options.enableNullAwareOperators = true; 2398 options.enableNullAwareOperators = true;
2399 resetWithOptions(options); 2399 resetWithOptions(options);
2400 Source source = addSource(''' 2400 Source source = addSource('''
2401 void f(int i) { 2401 void f(int i) {
2402 num n; 2402 num n;
2403 n ??= i; 2403 n ??= i;
2404 } 2404 }
2405 '''); 2405 ''');
2406 resolve(source); 2406 computeLibrarySourceErrors(source);
2407 assertNoErrors(source); 2407 assertNoErrors(source);
2408 verify([source]); 2408 verify([source]);
2409 } 2409 }
2410 2410
2411 void test_invalidAssignment_ifNullAssignment_sameType() { 2411 void test_invalidAssignment_ifNullAssignment_sameType() {
2412 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); 2412 AnalysisOptionsImpl options = new AnalysisOptionsImpl();
2413 options.enableNullAwareOperators = true; 2413 options.enableNullAwareOperators = true;
2414 resetWithOptions(options); 2414 resetWithOptions(options);
2415 Source source = addSource(''' 2415 Source source = addSource('''
2416 void f(int i) { 2416 void f(int i) {
2417 int j; 2417 int j;
2418 j ??= i; 2418 j ??= i;
2419 } 2419 }
2420 '''); 2420 ''');
2421 resolve(source); 2421 computeLibrarySourceErrors(source);
2422 assertNoErrors(source); 2422 assertNoErrors(source);
2423 verify([source]); 2423 verify([source]);
2424 } 2424 }
2425 2425
2426 void test_invalidAssignment_implicitlyImplementFunctionViaCall_1() { 2426 void test_invalidAssignment_implicitlyImplementFunctionViaCall_1() {
2427 // 18341 2427 // 18341
2428 // 2428 //
2429 // This test and 2429 // This test and
2430 // 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()' 2430 // 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()'
2431 // are closely related: here we see that 'I' checks as a subtype of 2431 // are closely related: here we see that 'I' checks as a subtype of
2432 // 'IntToInt'. 2432 // 'IntToInt'.
2433 Source source = addSource(r''' 2433 Source source = addSource(r'''
2434 class I { 2434 class I {
2435 int call(int x) => 0; 2435 int call(int x) => 0;
2436 } 2436 }
2437 class C implements I { 2437 class C implements I {
2438 noSuchMethod(_) => null; 2438 noSuchMethod(_) => null;
2439 } 2439 }
2440 typedef int IntToInt(int x); 2440 typedef int IntToInt(int x);
2441 IntToInt f = new I();'''); 2441 IntToInt f = new I();''');
2442 resolve(source); 2442 computeLibrarySourceErrors(source);
2443 assertNoErrors(source); 2443 assertNoErrors(source);
2444 verify([source]); 2444 verify([source]);
2445 } 2445 }
2446 2446
2447 void test_invalidAssignment_implicitlyImplementFunctionViaCall_2() { 2447 void test_invalidAssignment_implicitlyImplementFunctionViaCall_2() {
2448 // 18341 2448 // 18341
2449 // 2449 //
2450 // Here 'C' checks as a subtype of 'I', but 'C' does not 2450 // Here 'C' checks as a subtype of 'I', but 'C' does not
2451 // check as a subtype of 'IntToInt'. Together with 2451 // check as a subtype of 'IntToInt'. Together with
2452 // 'test_invalidAssignment_implicitlyImplementFunctionViaCall_1()' we see 2452 // 'test_invalidAssignment_implicitlyImplementFunctionViaCall_1()' we see
2453 // that subtyping is not transitive here. 2453 // that subtyping is not transitive here.
2454 Source source = addSource(r''' 2454 Source source = addSource(r'''
2455 class I { 2455 class I {
2456 int call(int x) => 0; 2456 int call(int x) => 0;
2457 } 2457 }
2458 class C implements I { 2458 class C implements I {
2459 noSuchMethod(_) => null; 2459 noSuchMethod(_) => null;
2460 } 2460 }
2461 typedef int IntToInt(int x); 2461 typedef int IntToInt(int x);
2462 IntToInt f = new C();'''); 2462 IntToInt f = new C();''');
2463 resolve(source); 2463 computeLibrarySourceErrors(source);
2464 assertNoErrors(source); 2464 assertNoErrors(source);
2465 verify([source]); 2465 verify([source]);
2466 } 2466 }
2467 2467
2468 void test_invalidAssignment_implicitlyImplementFunctionViaCall_3() { 2468 void test_invalidAssignment_implicitlyImplementFunctionViaCall_3() {
2469 // 18341 2469 // 18341
2470 // 2470 //
2471 // Like 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()', 2471 // Like 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()',
2472 // but uses type 'Function' instead of more precise type 'IntToInt' for 'f'. 2472 // but uses type 'Function' instead of more precise type 'IntToInt' for 'f'.
2473 Source source = addSource(r''' 2473 Source source = addSource(r'''
2474 class I { 2474 class I {
2475 int call(int x) => 0; 2475 int call(int x) => 0;
2476 } 2476 }
2477 class C implements I { 2477 class C implements I {
2478 noSuchMethod(_) => null; 2478 noSuchMethod(_) => null;
2479 } 2479 }
2480 typedef int IntToInt(int x); 2480 typedef int IntToInt(int x);
2481 Function f = new C();'''); 2481 Function f = new C();''');
2482 resolve(source); 2482 computeLibrarySourceErrors(source);
2483 assertNoErrors(source); 2483 assertNoErrors(source);
2484 verify([source]); 2484 verify([source]);
2485 } 2485 }
2486 2486
2487 void test_invalidAssignment_implicitlyImplementFunctionViaCall_4() { 2487 void test_invalidAssignment_implicitlyImplementFunctionViaCall_4() {
2488 // 18341 2488 // 18341
2489 // 2489 //
2490 // Like 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()', 2490 // Like 'test_invalidAssignment_implicitlyImplementFunctionViaCall_2()',
2491 // but uses type 'VoidToInt' instead of more precise type 'IntToInt' for 2491 // but uses type 'VoidToInt' instead of more precise type 'IntToInt' for
2492 // 'f'. 2492 // 'f'.
2493 // 2493 //
2494 // Here 'C <: IntToInt <: VoidToInt', but the spec gives no transitivity 2494 // Here 'C <: IntToInt <: VoidToInt', but the spec gives no transitivity
2495 // rule for '<:'. However, many of the :/tools/test.py tests assume this 2495 // rule for '<:'. However, many of the :/tools/test.py tests assume this
2496 // transitivity for 'JsBuilder' objects, assigning them to 2496 // transitivity for 'JsBuilder' objects, assigning them to
2497 // '(String) -> dynamic'. The declared type of 'JsBuilder.call' is 2497 // '(String) -> dynamic'. The declared type of 'JsBuilder.call' is
2498 // '(String, [dynamic]) -> Expression'. 2498 // '(String, [dynamic]) -> Expression'.
2499 Source source = addSource(r''' 2499 Source source = addSource(r'''
2500 class I { 2500 class I {
2501 int call([int x]) => 0; 2501 int call([int x]) => 0;
2502 } 2502 }
2503 class C implements I { 2503 class C implements I {
2504 noSuchMethod(_) => null; 2504 noSuchMethod(_) => null;
2505 } 2505 }
2506 typedef int VoidToInt(); 2506 typedef int VoidToInt();
2507 VoidToInt f = new C();'''); 2507 VoidToInt f = new C();''');
2508 resolve(source); 2508 computeLibrarySourceErrors(source);
2509 assertNoErrors(source); 2509 assertNoErrors(source);
2510 verify([source]); 2510 verify([source]);
2511 } 2511 }
2512 2512
2513 void test_invalidAssignment_toDynamic() { 2513 void test_invalidAssignment_toDynamic() {
2514 Source source = addSource(r''' 2514 Source source = addSource(r'''
2515 f() { 2515 f() {
2516 var g; 2516 var g;
2517 g = () => 0; 2517 g = () => 0;
2518 }'''); 2518 }''');
2519 resolve(source); 2519 computeLibrarySourceErrors(source);
2520 assertNoErrors(source); 2520 assertNoErrors(source);
2521 verify([source]); 2521 verify([source]);
2522 } 2522 }
2523 2523
2524 void test_invalidFactoryNameNotAClass() { 2524 void test_invalidFactoryNameNotAClass() {
2525 Source source = addSource(r''' 2525 Source source = addSource(r'''
2526 class A { 2526 class A {
2527 factory A() {} 2527 factory A() {}
2528 }'''); 2528 }''');
2529 resolve(source); 2529 computeLibrarySourceErrors(source);
2530 assertNoErrors(source); 2530 assertNoErrors(source);
2531 verify([source]); 2531 verify([source]);
2532 } 2532 }
2533 2533
2534 void test_invalidIdentifierInAsync() { 2534 void test_invalidIdentifierInAsync() {
2535 Source source = addSource(r''' 2535 Source source = addSource(r'''
2536 class A { 2536 class A {
2537 m() { 2537 m() {
2538 int async; 2538 int async;
2539 int await; 2539 int await;
2540 int yield; 2540 int yield;
2541 } 2541 }
2542 }'''); 2542 }''');
2543 resolve(source); 2543 computeLibrarySourceErrors(source);
2544 assertNoErrors(source); 2544 assertNoErrors(source);
2545 verify([source]); 2545 verify([source]);
2546 } 2546 }
2547 2547
2548 void test_invalidMethodOverrideNamedParamType() { 2548 void test_invalidMethodOverrideNamedParamType() {
2549 Source source = addSource(r''' 2549 Source source = addSource(r'''
2550 class A { 2550 class A {
2551 m({int a}) {} 2551 m({int a}) {}
2552 } 2552 }
2553 class B implements A { 2553 class B implements A {
2554 m({int a, int b}) {} 2554 m({int a, int b}) {}
2555 }'''); 2555 }''');
2556 resolve(source); 2556 computeLibrarySourceErrors(source);
2557 assertNoErrors(source); 2557 assertNoErrors(source);
2558 verify([source]); 2558 verify([source]);
2559 } 2559 }
2560 2560
2561 void test_invalidOverrideDifferentDefaultValues_named() { 2561 void test_invalidOverrideDifferentDefaultValues_named() {
2562 Source source = addSource(r''' 2562 Source source = addSource(r'''
2563 class A { 2563 class A {
2564 m({int p : 0}) {} 2564 m({int p : 0}) {}
2565 } 2565 }
2566 class B extends A { 2566 class B extends A {
2567 m({int p : 0}) {} 2567 m({int p : 0}) {}
2568 }'''); 2568 }''');
2569 resolve(source); 2569 computeLibrarySourceErrors(source);
2570 assertNoErrors(source); 2570 assertNoErrors(source);
2571 verify([source]); 2571 verify([source]);
2572 } 2572 }
2573 2573
2574 void test_invalidOverrideDifferentDefaultValues_named_function() { 2574 void test_invalidOverrideDifferentDefaultValues_named_function() {
2575 Source source = addSource(r''' 2575 Source source = addSource(r'''
2576 nothing() => 'nothing'; 2576 nothing() => 'nothing';
2577 class A { 2577 class A {
2578 thing(String a, {orElse : nothing}) {} 2578 thing(String a, {orElse : nothing}) {}
2579 } 2579 }
2580 class B extends A { 2580 class B extends A {
2581 thing(String a, {orElse : nothing}) {} 2581 thing(String a, {orElse : nothing}) {}
2582 }'''); 2582 }''');
2583 resolve(source); 2583 computeLibrarySourceErrors(source);
2584 assertNoErrors(source); 2584 assertNoErrors(source);
2585 verify([source]); 2585 verify([source]);
2586 } 2586 }
2587 2587
2588 void test_invalidOverrideDifferentDefaultValues_positional() { 2588 void test_invalidOverrideDifferentDefaultValues_positional() {
2589 Source source = addSource(r''' 2589 Source source = addSource(r'''
2590 class A { 2590 class A {
2591 m([int p = 0]) {} 2591 m([int p = 0]) {}
2592 } 2592 }
2593 class B extends A { 2593 class B extends A {
2594 m([int p = 0]) {} 2594 m([int p = 0]) {}
2595 }'''); 2595 }''');
2596 resolve(source); 2596 computeLibrarySourceErrors(source);
2597 assertNoErrors(source); 2597 assertNoErrors(source);
2598 verify([source]); 2598 verify([source]);
2599 } 2599 }
2600 2600
2601 void test_invalidOverrideDifferentDefaultValues_positional_changedOrder() { 2601 void test_invalidOverrideDifferentDefaultValues_positional_changedOrder() {
2602 Source source = addSource(r''' 2602 Source source = addSource(r'''
2603 class A { 2603 class A {
2604 m([int a = 0, String b = '0']) {} 2604 m([int a = 0, String b = '0']) {}
2605 } 2605 }
2606 class B extends A { 2606 class B extends A {
2607 m([int b = 0, String a = '0']) {} 2607 m([int b = 0, String a = '0']) {}
2608 }'''); 2608 }''');
2609 resolve(source); 2609 computeLibrarySourceErrors(source);
2610 assertNoErrors(source); 2610 assertNoErrors(source);
2611 verify([source]); 2611 verify([source]);
2612 } 2612 }
2613 2613
2614 void test_invalidOverrideDifferentDefaultValues_positional_function() { 2614 void test_invalidOverrideDifferentDefaultValues_positional_function() {
2615 Source source = addSource(r''' 2615 Source source = addSource(r'''
2616 nothing() => 'nothing'; 2616 nothing() => 'nothing';
2617 class A { 2617 class A {
2618 thing(String a, [orElse = nothing]) {} 2618 thing(String a, [orElse = nothing]) {}
2619 } 2619 }
2620 class B extends A { 2620 class B extends A {
2621 thing(String a, [orElse = nothing]) {} 2621 thing(String a, [orElse = nothing]) {}
2622 }'''); 2622 }''');
2623 resolve(source); 2623 computeLibrarySourceErrors(source);
2624 assertNoErrors(source); 2624 assertNoErrors(source);
2625 verify([source]); 2625 verify([source]);
2626 } 2626 }
2627 2627
2628 void test_invalidOverrideNamed_unorderedNamedParameter() { 2628 void test_invalidOverrideNamed_unorderedNamedParameter() {
2629 Source source = addSource(r''' 2629 Source source = addSource(r'''
2630 class A { 2630 class A {
2631 m({a, b}) {} 2631 m({a, b}) {}
2632 } 2632 }
2633 class B extends A { 2633 class B extends A {
2634 m({b, a}) {} 2634 m({b, a}) {}
2635 }'''); 2635 }''');
2636 resolve(source); 2636 computeLibrarySourceErrors(source);
2637 assertNoErrors(source); 2637 assertNoErrors(source);
2638 verify([source]); 2638 verify([source]);
2639 } 2639 }
2640 2640
2641 void test_invalidOverrideRequired_less() { 2641 void test_invalidOverrideRequired_less() {
2642 Source source = addSource(r''' 2642 Source source = addSource(r'''
2643 class A { 2643 class A {
2644 m(a, b) {} 2644 m(a, b) {}
2645 } 2645 }
2646 class B extends A { 2646 class B extends A {
2647 m(a, [b]) {} 2647 m(a, [b]) {}
2648 }'''); 2648 }''');
2649 resolve(source); 2649 computeLibrarySourceErrors(source);
2650 assertNoErrors(source); 2650 assertNoErrors(source);
2651 verify([source]); 2651 verify([source]);
2652 } 2652 }
2653 2653
2654 void test_invalidOverrideRequired_same() { 2654 void test_invalidOverrideRequired_same() {
2655 Source source = addSource(r''' 2655 Source source = addSource(r'''
2656 class A { 2656 class A {
2657 m(a) {} 2657 m(a) {}
2658 } 2658 }
2659 class B extends A { 2659 class B extends A {
2660 m(a) {} 2660 m(a) {}
2661 }'''); 2661 }''');
2662 resolve(source); 2662 computeLibrarySourceErrors(source);
2663 assertNoErrors(source); 2663 assertNoErrors(source);
2664 verify([source]); 2664 verify([source]);
2665 } 2665 }
2666 2666
2667 void test_invalidOverrideReturnType_returnType_interface() { 2667 void test_invalidOverrideReturnType_returnType_interface() {
2668 Source source = addNamedSource("/test.dart", r''' 2668 Source source = addNamedSource("/test.dart", r'''
2669 abstract class A { 2669 abstract class A {
2670 num m(); 2670 num m();
2671 } 2671 }
2672 class B implements A { 2672 class B implements A {
2673 int m() { return 1; } 2673 int m() { return 1; }
2674 }'''); 2674 }''');
2675 resolve(source); 2675 computeLibrarySourceErrors(source);
2676 assertNoErrors(source); 2676 assertNoErrors(source);
2677 verify([source]); 2677 verify([source]);
2678 } 2678 }
2679 2679
2680 void test_invalidOverrideReturnType_returnType_interface2() { 2680 void test_invalidOverrideReturnType_returnType_interface2() {
2681 Source source = addNamedSource("/test.dart", r''' 2681 Source source = addNamedSource("/test.dart", r'''
2682 abstract class A { 2682 abstract class A {
2683 num m(); 2683 num m();
2684 } 2684 }
2685 abstract class B implements A { 2685 abstract class B implements A {
2686 } 2686 }
2687 class C implements B { 2687 class C implements B {
2688 int m() { return 1; } 2688 int m() { return 1; }
2689 }'''); 2689 }''');
2690 resolve(source); 2690 computeLibrarySourceErrors(source);
2691 assertNoErrors(source); 2691 assertNoErrors(source);
2692 verify([source]); 2692 verify([source]);
2693 } 2693 }
2694 2694
2695 void test_invalidOverrideReturnType_returnType_mixin() { 2695 void test_invalidOverrideReturnType_returnType_mixin() {
2696 Source source = addNamedSource("/test.dart", r''' 2696 Source source = addNamedSource("/test.dart", r'''
2697 class A { 2697 class A {
2698 num m() { return 0; } 2698 num m() { return 0; }
2699 } 2699 }
2700 class B extends Object with A { 2700 class B extends Object with A {
2701 int m() { return 1; } 2701 int m() { return 1; }
2702 }'''); 2702 }''');
2703 resolve(source); 2703 computeLibrarySourceErrors(source);
2704 assertNoErrors(source); 2704 assertNoErrors(source);
2705 verify([source]); 2705 verify([source]);
2706 } 2706 }
2707 2707
2708 void test_invalidOverrideReturnType_returnType_parameterizedTypes() { 2708 void test_invalidOverrideReturnType_returnType_parameterizedTypes() {
2709 Source source = addSource(r''' 2709 Source source = addSource(r'''
2710 abstract class A<E> { 2710 abstract class A<E> {
2711 List<E> m(); 2711 List<E> m();
2712 } 2712 }
2713 class B extends A<dynamic> { 2713 class B extends A<dynamic> {
2714 List<dynamic> m() { return new List<dynamic>(); } 2714 List<dynamic> m() { return new List<dynamic>(); }
2715 }'''); 2715 }''');
2716 resolve(source); 2716 computeLibrarySourceErrors(source);
2717 assertNoErrors(source); 2717 assertNoErrors(source);
2718 verify([source]); 2718 verify([source]);
2719 } 2719 }
2720 2720
2721 void test_invalidOverrideReturnType_returnType_sameType() { 2721 void test_invalidOverrideReturnType_returnType_sameType() {
2722 Source source = addNamedSource("/test.dart", r''' 2722 Source source = addNamedSource("/test.dart", r'''
2723 class A { 2723 class A {
2724 int m() { return 0; } 2724 int m() { return 0; }
2725 } 2725 }
2726 class B extends A { 2726 class B extends A {
2727 int m() { return 1; } 2727 int m() { return 1; }
2728 }'''); 2728 }''');
2729 resolve(source); 2729 computeLibrarySourceErrors(source);
2730 assertNoErrors(source); 2730 assertNoErrors(source);
2731 verify([source]); 2731 verify([source]);
2732 } 2732 }
2733 2733
2734 void test_invalidOverrideReturnType_returnType_superclass() { 2734 void test_invalidOverrideReturnType_returnType_superclass() {
2735 Source source = addNamedSource("/test.dart", r''' 2735 Source source = addNamedSource("/test.dart", r'''
2736 class A { 2736 class A {
2737 num m() { return 0; } 2737 num m() { return 0; }
2738 } 2738 }
2739 class B extends A { 2739 class B extends A {
2740 int m() { return 1; } 2740 int m() { return 1; }
2741 }'''); 2741 }''');
2742 resolve(source); 2742 computeLibrarySourceErrors(source);
2743 assertNoErrors(source); 2743 assertNoErrors(source);
2744 verify([source]); 2744 verify([source]);
2745 } 2745 }
2746 2746
2747 void test_invalidOverrideReturnType_returnType_superclass2() { 2747 void test_invalidOverrideReturnType_returnType_superclass2() {
2748 Source source = addNamedSource("/test.dart", r''' 2748 Source source = addNamedSource("/test.dart", r'''
2749 class A { 2749 class A {
2750 num m() { return 0; } 2750 num m() { return 0; }
2751 } 2751 }
2752 class B extends A { 2752 class B extends A {
2753 } 2753 }
2754 class C extends B { 2754 class C extends B {
2755 int m() { return 1; } 2755 int m() { return 1; }
2756 }'''); 2756 }''');
2757 resolve(source); 2757 computeLibrarySourceErrors(source);
2758 assertNoErrors(source); 2758 assertNoErrors(source);
2759 verify([source]); 2759 verify([source]);
2760 } 2760 }
2761 2761
2762 void test_invalidOverrideReturnType_returnType_void() { 2762 void test_invalidOverrideReturnType_returnType_void() {
2763 Source source = addSource(r''' 2763 Source source = addSource(r'''
2764 class A { 2764 class A {
2765 void m() {} 2765 void m() {}
2766 } 2766 }
2767 class B extends A { 2767 class B extends A {
2768 int m() { return 0; } 2768 int m() { return 0; }
2769 }'''); 2769 }''');
2770 resolve(source); 2770 computeLibrarySourceErrors(source);
2771 assertNoErrors(source); 2771 assertNoErrors(source);
2772 verify([source]); 2772 verify([source]);
2773 } 2773 }
2774 2774
2775 void test_invalidReferenceToThis_constructor() { 2775 void test_invalidReferenceToThis_constructor() {
2776 Source source = addSource(r''' 2776 Source source = addSource(r'''
2777 class A { 2777 class A {
2778 A() { 2778 A() {
2779 var v = this; 2779 var v = this;
2780 } 2780 }
2781 }'''); 2781 }''');
2782 resolve(source); 2782 computeLibrarySourceErrors(source);
2783 assertNoErrors(source); 2783 assertNoErrors(source);
2784 verify([source]); 2784 verify([source]);
2785 } 2785 }
2786 2786
2787 void test_invalidReferenceToThis_instanceMethod() { 2787 void test_invalidReferenceToThis_instanceMethod() {
2788 Source source = addSource(r''' 2788 Source source = addSource(r'''
2789 class A { 2789 class A {
2790 m() { 2790 m() {
2791 var v = this; 2791 var v = this;
2792 } 2792 }
2793 }'''); 2793 }''');
2794 resolve(source); 2794 computeLibrarySourceErrors(source);
2795 assertNoErrors(source); 2795 assertNoErrors(source);
2796 verify([source]); 2796 verify([source]);
2797 } 2797 }
2798 2798
2799 void test_invalidTypeArgumentForKey() { 2799 void test_invalidTypeArgumentForKey() {
2800 Source source = addSource(r''' 2800 Source source = addSource(r'''
2801 class A { 2801 class A {
2802 m() { 2802 m() {
2803 return const <int, int>{}; 2803 return const <int, int>{};
2804 } 2804 }
2805 }'''); 2805 }''');
2806 resolve(source); 2806 computeLibrarySourceErrors(source);
2807 assertNoErrors(source); 2807 assertNoErrors(source);
2808 verify([source]); 2808 verify([source]);
2809 } 2809 }
2810 2810
2811 void test_invalidTypeArgumentInConstList() { 2811 void test_invalidTypeArgumentInConstList() {
2812 Source source = addSource(r''' 2812 Source source = addSource(r'''
2813 class A<E> { 2813 class A<E> {
2814 m() { 2814 m() {
2815 return <E>[]; 2815 return <E>[];
2816 } 2816 }
2817 }'''); 2817 }''');
2818 resolve(source); 2818 computeLibrarySourceErrors(source);
2819 assertNoErrors(source); 2819 assertNoErrors(source);
2820 verify([source]); 2820 verify([source]);
2821 } 2821 }
2822 2822
2823 void test_invalidTypeArgumentInConstMap() { 2823 void test_invalidTypeArgumentInConstMap() {
2824 Source source = addSource(r''' 2824 Source source = addSource(r'''
2825 class A<E> { 2825 class A<E> {
2826 m() { 2826 m() {
2827 return <String, E>{}; 2827 return <String, E>{};
2828 } 2828 }
2829 }'''); 2829 }''');
2830 resolve(source); 2830 computeLibrarySourceErrors(source);
2831 assertNoErrors(source); 2831 assertNoErrors(source);
2832 verify([source]); 2832 verify([source]);
2833 } 2833 }
2834 2834
2835 void test_invocationOfNonFunction_dynamic() { 2835 void test_invocationOfNonFunction_dynamic() {
2836 Source source = addSource(r''' 2836 Source source = addSource(r'''
2837 class A { 2837 class A {
2838 var f; 2838 var f;
2839 } 2839 }
2840 class B extends A { 2840 class B extends A {
2841 g() { 2841 g() {
2842 f(); 2842 f();
2843 } 2843 }
2844 }'''); 2844 }''');
2845 resolve(source); 2845 computeLibrarySourceErrors(source);
2846 assertNoErrors(source); 2846 assertNoErrors(source);
2847 verify([source]); 2847 verify([source]);
2848 } 2848 }
2849 2849
2850 void test_invocationOfNonFunction_getter() { 2850 void test_invocationOfNonFunction_getter() {
2851 Source source = addSource(r''' 2851 Source source = addSource(r'''
2852 class A { 2852 class A {
2853 var g; 2853 var g;
2854 } 2854 }
2855 f() { 2855 f() {
2856 A a; 2856 A a;
2857 a.g(); 2857 a.g();
2858 }'''); 2858 }''');
2859 resolve(source); 2859 computeLibrarySourceErrors(source);
2860 assertNoErrors(source); 2860 assertNoErrors(source);
2861 verify([source]); 2861 verify([source]);
2862 } 2862 }
2863 2863
2864 void test_invocationOfNonFunction_localVariable() { 2864 void test_invocationOfNonFunction_localVariable() {
2865 Source source = addSource(r''' 2865 Source source = addSource(r'''
2866 f() { 2866 f() {
2867 var g; 2867 var g;
2868 g(); 2868 g();
2869 }'''); 2869 }''');
2870 resolve(source); 2870 computeLibrarySourceErrors(source);
2871 assertNoErrors(source); 2871 assertNoErrors(source);
2872 verify([source]); 2872 verify([source]);
2873 } 2873 }
2874 2874
2875 void test_invocationOfNonFunction_localVariable_dynamic() { 2875 void test_invocationOfNonFunction_localVariable_dynamic() {
2876 Source source = addSource(r''' 2876 Source source = addSource(r'''
2877 f() {} 2877 f() {}
2878 main() { 2878 main() {
2879 var v = f; 2879 var v = f;
2880 v(); 2880 v();
2881 }'''); 2881 }''');
2882 resolve(source); 2882 computeLibrarySourceErrors(source);
2883 assertNoErrors(source); 2883 assertNoErrors(source);
2884 verify([source]); 2884 verify([source]);
2885 } 2885 }
2886 2886
2887 void test_invocationOfNonFunction_localVariable_dynamic2() { 2887 void test_invocationOfNonFunction_localVariable_dynamic2() {
2888 Source source = addSource(r''' 2888 Source source = addSource(r'''
2889 f() {} 2889 f() {}
2890 main() { 2890 main() {
2891 var v = f; 2891 var v = f;
2892 v = 1; 2892 v = 1;
2893 v(); 2893 v();
2894 }'''); 2894 }''');
2895 resolve(source); 2895 computeLibrarySourceErrors(source);
2896 assertNoErrors(source); 2896 assertNoErrors(source);
2897 verify([source]); 2897 verify([source]);
2898 } 2898 }
2899 2899
2900 void test_invocationOfNonFunction_Object() { 2900 void test_invocationOfNonFunction_Object() {
2901 Source source = addSource(r''' 2901 Source source = addSource(r'''
2902 main() { 2902 main() {
2903 Object v = null; 2903 Object v = null;
2904 v(); 2904 v();
2905 }'''); 2905 }''');
2906 resolve(source); 2906 computeLibrarySourceErrors(source);
2907 assertNoErrors(source); 2907 assertNoErrors(source);
2908 verify([source]); 2908 verify([source]);
2909 } 2909 }
2910 2910
2911 void test_invocationOfNonFunction_proxyOnFunctionClass() { 2911 void test_invocationOfNonFunction_proxyOnFunctionClass() {
2912 // 16078 2912 // 16078
2913 Source source = addSource(r''' 2913 Source source = addSource(r'''
2914 @proxy 2914 @proxy
2915 class Functor implements Function { 2915 class Functor implements Function {
2916 noSuchMethod(inv) { 2916 noSuchMethod(inv) {
2917 return 42; 2917 return 42;
2918 } 2918 }
2919 } 2919 }
2920 main() { 2920 main() {
2921 Functor f = new Functor(); 2921 Functor f = new Functor();
2922 f(); 2922 f();
2923 }'''); 2923 }''');
2924 resolve(source); 2924 computeLibrarySourceErrors(source);
2925 assertNoErrors(source); 2925 assertNoErrors(source);
2926 verify([source]); 2926 verify([source]);
2927 } 2927 }
2928 2928
2929 void test_listElementTypeNotAssignable() { 2929 void test_listElementTypeNotAssignable() {
2930 Source source = addSource(r''' 2930 Source source = addSource(r'''
2931 var v1 = <int> [42]; 2931 var v1 = <int> [42];
2932 var v2 = const <int> [42];'''); 2932 var v2 = const <int> [42];''');
2933 resolve(source); 2933 computeLibrarySourceErrors(source);
2934 assertNoErrors(source); 2934 assertNoErrors(source);
2935 verify([source]); 2935 verify([source]);
2936 } 2936 }
2937 2937
2938 void test_loadLibraryDefined() { 2938 void test_loadLibraryDefined() {
2939 resolveWithErrors(<String>[ 2939 resolveWithErrors(<String>[
2940 r''' 2940 r'''
2941 library lib1; 2941 library lib1;
2942 foo() => 22;''', 2942 foo() => 22;''',
2943 r''' 2943 r'''
2944 import 'lib1.dart' deferred as other; 2944 import 'lib1.dart' deferred as other;
2945 main() { 2945 main() {
2946 other.loadLibrary().then((_) => other.foo()); 2946 other.loadLibrary().then((_) => other.foo());
2947 }''' 2947 }'''
2948 ], <ErrorCode>[]); 2948 ], <ErrorCode>[]);
2949 } 2949 }
2950 2950
2951 void test_local_generator_async() { 2951 void test_local_generator_async() {
2952 Source source = addSource(''' 2952 Source source = addSource('''
2953 f() { 2953 f() {
2954 return () async* { yield 0; }; 2954 return () async* { yield 0; };
2955 } 2955 }
2956 '''); 2956 ''');
2957 resolve(source); 2957 computeLibrarySourceErrors(source);
2958 assertNoErrors(source); 2958 assertNoErrors(source);
2959 verify([source]); 2959 verify([source]);
2960 } 2960 }
2961 2961
2962 void test_local_generator_sync() { 2962 void test_local_generator_sync() {
2963 Source source = addSource(''' 2963 Source source = addSource('''
2964 f() { 2964 f() {
2965 return () sync* { yield 0; }; 2965 return () sync* { yield 0; };
2966 } 2966 }
2967 '''); 2967 ''');
2968 resolve(source); 2968 computeLibrarySourceErrors(source);
2969 assertNoErrors(source); 2969 assertNoErrors(source);
2970 verify([source]); 2970 verify([source]);
2971 } 2971 }
2972 2972
2973 void test_mapKeyTypeNotAssignable() { 2973 void test_mapKeyTypeNotAssignable() {
2974 Source source = addSource("var v = <String, int > {'a' : 1};"); 2974 Source source = addSource("var v = <String, int > {'a' : 1};");
2975 resolve(source); 2975 computeLibrarySourceErrors(source);
2976 assertNoErrors(source); 2976 assertNoErrors(source);
2977 verify([source]); 2977 verify([source]);
2978 } 2978 }
2979 2979
2980 void test_memberWithClassName_setter() { 2980 void test_memberWithClassName_setter() {
2981 Source source = addSource(r''' 2981 Source source = addSource(r'''
2982 class A { 2982 class A {
2983 set A(v) {} 2983 set A(v) {}
2984 }'''); 2984 }''');
2985 resolve(source); 2985 computeLibrarySourceErrors(source);
2986 assertNoErrors(source); 2986 assertNoErrors(source);
2987 verify([source]); 2987 verify([source]);
2988 } 2988 }
2989 2989
2990 void test_methodDeclaration_scope_signature() { 2990 void test_methodDeclaration_scope_signature() {
2991 Source source = addSource(r''' 2991 Source source = addSource(r'''
2992 const app = 0; 2992 const app = 0;
2993 class A { 2993 class A {
2994 foo(@app int app) {} 2994 foo(@app int app) {}
2995 }'''); 2995 }''');
2996 resolve(source); 2996 computeLibrarySourceErrors(source);
2997 assertNoErrors(source); 2997 assertNoErrors(source);
2998 verify([source]); 2998 verify([source]);
2999 } 2999 }
3000 3000
3001 void test_misMatchedGetterAndSetterTypes_instance_sameTypes() { 3001 void test_misMatchedGetterAndSetterTypes_instance_sameTypes() {
3002 Source source = addSource(r''' 3002 Source source = addSource(r'''
3003 class C { 3003 class C {
3004 int get x => 0; 3004 int get x => 0;
3005 set x(int v) {} 3005 set x(int v) {}
3006 }'''); 3006 }''');
3007 resolve(source); 3007 computeLibrarySourceErrors(source);
3008 assertNoErrors(source); 3008 assertNoErrors(source);
3009 verify([source]); 3009 verify([source]);
3010 } 3010 }
3011 3011
3012 void test_misMatchedGetterAndSetterTypes_instance_unspecifiedGetter() { 3012 void test_misMatchedGetterAndSetterTypes_instance_unspecifiedGetter() {
3013 Source source = addSource(r''' 3013 Source source = addSource(r'''
3014 class C { 3014 class C {
3015 get x => 0; 3015 get x => 0;
3016 set x(String v) {} 3016 set x(String v) {}
3017 }'''); 3017 }''');
3018 resolve(source); 3018 computeLibrarySourceErrors(source);
3019 assertNoErrors(source); 3019 assertNoErrors(source);
3020 verify([source]); 3020 verify([source]);
3021 } 3021 }
3022 3022
3023 void test_misMatchedGetterAndSetterTypes_instance_unspecifiedSetter() { 3023 void test_misMatchedGetterAndSetterTypes_instance_unspecifiedSetter() {
3024 Source source = addSource(r''' 3024 Source source = addSource(r'''
3025 class C { 3025 class C {
3026 int get x => 0; 3026 int get x => 0;
3027 set x(v) {} 3027 set x(v) {}
3028 }'''); 3028 }''');
3029 resolve(source); 3029 computeLibrarySourceErrors(source);
3030 assertNoErrors(source); 3030 assertNoErrors(source);
3031 verify([source]); 3031 verify([source]);
3032 } 3032 }
3033 3033
3034 void test_misMatchedGetterAndSetterTypes_topLevel_sameTypes() { 3034 void test_misMatchedGetterAndSetterTypes_topLevel_sameTypes() {
3035 Source source = addSource(r''' 3035 Source source = addSource(r'''
3036 int get x => 0; 3036 int get x => 0;
3037 set x(int v) {}'''); 3037 set x(int v) {}''');
3038 resolve(source); 3038 computeLibrarySourceErrors(source);
3039 assertNoErrors(source); 3039 assertNoErrors(source);
3040 verify([source]); 3040 verify([source]);
3041 } 3041 }
3042 3042
3043 void test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedGetter() { 3043 void test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedGetter() {
3044 Source source = addSource(r''' 3044 Source source = addSource(r'''
3045 get x => 0; 3045 get x => 0;
3046 set x(String v) {}'''); 3046 set x(String v) {}''');
3047 resolve(source); 3047 computeLibrarySourceErrors(source);
3048 assertNoErrors(source); 3048 assertNoErrors(source);
3049 verify([source]); 3049 verify([source]);
3050 } 3050 }
3051 3051
3052 void test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedSetter() { 3052 void test_misMatchedGetterAndSetterTypes_topLevel_unspecifiedSetter() {
3053 Source source = addSource(r''' 3053 Source source = addSource(r'''
3054 int get x => 0; 3054 int get x => 0;
3055 set x(v) {}'''); 3055 set x(v) {}''');
3056 resolve(source); 3056 computeLibrarySourceErrors(source);
3057 assertNoErrors(source); 3057 assertNoErrors(source);
3058 verify([source]); 3058 verify([source]);
3059 } 3059 }
3060 3060
3061 void test_missingEnumConstantInSwitch_all() { 3061 void test_missingEnumConstantInSwitch_all() {
3062 Source source = addSource(r''' 3062 Source source = addSource(r'''
3063 enum E { A, B, C } 3063 enum E { A, B, C }
3064 3064
3065 f(E e) { 3065 f(E e) {
3066 switch (e) { 3066 switch (e) {
3067 case E.A: break; 3067 case E.A: break;
3068 case E.B: break; 3068 case E.B: break;
3069 case E.C: break; 3069 case E.C: break;
3070 } 3070 }
3071 }'''); 3071 }''');
3072 resolve(source); 3072 computeLibrarySourceErrors(source);
3073 assertNoErrors(source); 3073 assertNoErrors(source);
3074 verify([source]); 3074 verify([source]);
3075 } 3075 }
3076 3076
3077 void test_missingEnumConstantInSwitch_default() { 3077 void test_missingEnumConstantInSwitch_default() {
3078 Source source = addSource(r''' 3078 Source source = addSource(r'''
3079 enum E { A, B, C } 3079 enum E { A, B, C }
3080 3080
3081 f(E e) { 3081 f(E e) {
3082 switch (e) { 3082 switch (e) {
3083 case E.B: break; 3083 case E.B: break;
3084 default: break; 3084 default: break;
3085 } 3085 }
3086 }'''); 3086 }''');
3087 resolve(source); 3087 computeLibrarySourceErrors(source);
3088 assertNoErrors(source); 3088 assertNoErrors(source);
3089 verify([source]); 3089 verify([source]);
3090 } 3090 }
3091 3091
3092 void test_mixedReturnTypes_differentScopes() { 3092 void test_mixedReturnTypes_differentScopes() {
3093 Source source = addSource(r''' 3093 Source source = addSource(r'''
3094 class C { 3094 class C {
3095 m(int x) { 3095 m(int x) {
3096 f(int y) { 3096 f(int y) {
3097 return; 3097 return;
3098 } 3098 }
3099 f(x); 3099 f(x);
3100 return 0; 3100 return 0;
3101 } 3101 }
3102 }'''); 3102 }''');
3103 resolve(source); 3103 computeLibrarySourceErrors(source);
3104 assertNoErrors(source); 3104 assertNoErrors(source);
3105 verify([source]); 3105 verify([source]);
3106 } 3106 }
3107 3107
3108 void test_mixedReturnTypes_ignoreImplicit() { 3108 void test_mixedReturnTypes_ignoreImplicit() {
3109 Source source = addSource(r''' 3109 Source source = addSource(r'''
3110 f(bool p) { 3110 f(bool p) {
3111 if (p) return 42; 3111 if (p) return 42;
3112 // implicit 'return;' is ignored 3112 // implicit 'return;' is ignored
3113 }'''); 3113 }''');
3114 resolve(source); 3114 computeLibrarySourceErrors(source);
3115 assertNoErrors(source); 3115 assertNoErrors(source);
3116 verify([source]); 3116 verify([source]);
3117 } 3117 }
3118 3118
3119 void test_mixedReturnTypes_ignoreImplicit2() { 3119 void test_mixedReturnTypes_ignoreImplicit2() {
3120 Source source = addSource(r''' 3120 Source source = addSource(r'''
3121 f(bool p) { 3121 f(bool p) {
3122 if (p) { 3122 if (p) {
3123 return 42; 3123 return 42;
3124 } else { 3124 } else {
3125 return 42; 3125 return 42;
3126 } 3126 }
3127 // implicit 'return;' is ignored 3127 // implicit 'return;' is ignored
3128 }'''); 3128 }''');
3129 resolve(source); 3129 computeLibrarySourceErrors(source);
3130 assertNoErrors(source); 3130 assertNoErrors(source);
3131 verify([source]); 3131 verify([source]);
3132 } 3132 }
3133 3133
3134 void test_mixedReturnTypes_sameKind() { 3134 void test_mixedReturnTypes_sameKind() {
3135 Source source = addSource(r''' 3135 Source source = addSource(r'''
3136 class C { 3136 class C {
3137 m(int x) { 3137 m(int x) {
3138 if (x < 0) { 3138 if (x < 0) {
3139 return 1; 3139 return 1;
3140 } 3140 }
3141 return 0; 3141 return 0;
3142 } 3142 }
3143 }'''); 3143 }''');
3144 resolve(source); 3144 computeLibrarySourceErrors(source);
3145 assertNoErrors(source); 3145 assertNoErrors(source);
3146 verify([source]); 3146 verify([source]);
3147 } 3147 }
3148 3148
3149 void test_mixinDeclaresConstructor() { 3149 void test_mixinDeclaresConstructor() {
3150 Source source = addSource(r''' 3150 Source source = addSource(r'''
3151 class A { 3151 class A {
3152 m() {} 3152 m() {}
3153 } 3153 }
3154 class B extends Object with A {}'''); 3154 class B extends Object with A {}''');
3155 resolve(source); 3155 computeLibrarySourceErrors(source);
3156 assertNoErrors(source); 3156 assertNoErrors(source);
3157 verify([source]); 3157 verify([source]);
3158 } 3158 }
3159 3159
3160 void test_mixinDeclaresConstructor_factory() { 3160 void test_mixinDeclaresConstructor_factory() {
3161 Source source = addSource(r''' 3161 Source source = addSource(r'''
3162 class A { 3162 class A {
3163 factory A() {} 3163 factory A() {}
3164 } 3164 }
3165 class B extends Object with A {}'''); 3165 class B extends Object with A {}''');
3166 resolve(source); 3166 computeLibrarySourceErrors(source);
3167 assertNoErrors(source); 3167 assertNoErrors(source);
3168 verify([source]); 3168 verify([source]);
3169 } 3169 }
3170 3170
3171 void test_mixinInheritsFromNotObject_classDeclaration_mixTypeAlias() { 3171 void test_mixinInheritsFromNotObject_classDeclaration_mixTypeAlias() {
3172 Source source = addSource(r''' 3172 Source source = addSource(r'''
3173 class A {} 3173 class A {}
3174 class B = Object with A; 3174 class B = Object with A;
3175 class C extends Object with B {}'''); 3175 class C extends Object with B {}''');
3176 resolve(source); 3176 computeLibrarySourceErrors(source);
3177 assertNoErrors(source); 3177 assertNoErrors(source);
3178 verify([source]); 3178 verify([source]);
3179 } 3179 }
3180 3180
3181 void test_mixinInheritsFromNotObject_typedef_mixTypeAlias() { 3181 void test_mixinInheritsFromNotObject_typedef_mixTypeAlias() {
3182 Source source = addSource(r''' 3182 Source source = addSource(r'''
3183 class A {} 3183 class A {}
3184 class B = Object with A; 3184 class B = Object with A;
3185 class C = Object with B;'''); 3185 class C = Object with B;''');
3186 resolve(source); 3186 computeLibrarySourceErrors(source);
3187 assertNoErrors(source); 3187 assertNoErrors(source);
3188 verify([source]); 3188 verify([source]);
3189 } 3189 }
3190 3190
3191 void test_multipleSuperInitializers_no() { 3191 void test_multipleSuperInitializers_no() {
3192 Source source = addSource(r''' 3192 Source source = addSource(r'''
3193 class A {} 3193 class A {}
3194 class B extends A { 3194 class B extends A {
3195 B() {} 3195 B() {}
3196 }'''); 3196 }''');
3197 resolve(source); 3197 computeLibrarySourceErrors(source);
3198 assertNoErrors(source); 3198 assertNoErrors(source);
3199 verify([source]); 3199 verify([source]);
3200 } 3200 }
3201 3201
3202 void test_multipleSuperInitializers_single() { 3202 void test_multipleSuperInitializers_single() {
3203 Source source = addSource(r''' 3203 Source source = addSource(r'''
3204 class A {} 3204 class A {}
3205 class B extends A { 3205 class B extends A {
3206 B() : super() {} 3206 B() : super() {}
3207 }'''); 3207 }''');
3208 resolve(source); 3208 computeLibrarySourceErrors(source);
3209 assertNoErrors(source); 3209 assertNoErrors(source);
3210 verify([source]); 3210 verify([source]);
3211 } 3211 }
3212 3212
3213 void test_nativeFunctionBodyInNonSDKCode_function() { 3213 void test_nativeFunctionBodyInNonSDKCode_function() {
3214 Source source = addSource(r''' 3214 Source source = addSource(r'''
3215 import 'dart-ext:x'; 3215 import 'dart-ext:x';
3216 int m(a) native 'string';'''); 3216 int m(a) native 'string';''');
3217 resolve(source); 3217 computeLibrarySourceErrors(source);
3218 assertNoErrors(source); 3218 assertNoErrors(source);
3219 // Cannot verify the AST because the import's URI cannot be resolved. 3219 // Cannot verify the AST because the import's URI cannot be resolved.
3220 } 3220 }
3221 3221
3222 void test_newWithAbstractClass_factory() { 3222 void test_newWithAbstractClass_factory() {
3223 Source source = addSource(r''' 3223 Source source = addSource(r'''
3224 abstract class A { 3224 abstract class A {
3225 factory A() { return new B(); } 3225 factory A() { return new B(); }
3226 } 3226 }
3227 class B implements A { 3227 class B implements A {
3228 B() {} 3228 B() {}
3229 } 3229 }
3230 A f() { 3230 A f() {
3231 return new A(); 3231 return new A();
3232 }'''); 3232 }''');
3233 resolve(source); 3233 computeLibrarySourceErrors(source);
3234 assertNoErrors(source); 3234 assertNoErrors(source);
3235 verify([source]); 3235 verify([source]);
3236 } 3236 }
3237 3237
3238 void test_newWithUndefinedConstructor() { 3238 void test_newWithUndefinedConstructor() {
3239 Source source = addSource(r''' 3239 Source source = addSource(r'''
3240 class A { 3240 class A {
3241 A.name() {} 3241 A.name() {}
3242 } 3242 }
3243 f() { 3243 f() {
3244 new A.name(); 3244 new A.name();
3245 }'''); 3245 }''');
3246 resolve(source); 3246 computeLibrarySourceErrors(source);
3247 assertNoErrors(source); 3247 assertNoErrors(source);
3248 verify([source]); 3248 verify([source]);
3249 } 3249 }
3250 3250
3251 void test_newWithUndefinedConstructorDefault() { 3251 void test_newWithUndefinedConstructorDefault() {
3252 Source source = addSource(r''' 3252 Source source = addSource(r'''
3253 class A { 3253 class A {
3254 A() {} 3254 A() {}
3255 } 3255 }
3256 f() { 3256 f() {
3257 new A(); 3257 new A();
3258 }'''); 3258 }''');
3259 resolve(source); 3259 computeLibrarySourceErrors(source);
3260 assertNoErrors(source); 3260 assertNoErrors(source);
3261 verify([source]); 3261 verify([source]);
3262 } 3262 }
3263 3263
3264 void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcr etes_getter() { 3264 void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcr etes_getter() {
3265 Source source = addSource(r''' 3265 Source source = addSource(r'''
3266 class A { 3266 class A {
3267 int get g => 0; 3267 int get g => 0;
3268 } 3268 }
3269 abstract class B extends A { 3269 abstract class B extends A {
3270 int get g; 3270 int get g;
3271 } 3271 }
3272 class C extends B {}'''); 3272 class C extends B {}''');
3273 resolve(source); 3273 computeLibrarySourceErrors(source);
3274 assertNoErrors(source); 3274 assertNoErrors(source);
3275 verify([source]); 3275 verify([source]);
3276 } 3276 }
3277 3277
3278 void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcr etes_method() { 3278 void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcr etes_method() {
3279 Source source = addSource(r''' 3279 Source source = addSource(r'''
3280 class A { 3280 class A {
3281 m(p) {} 3281 m(p) {}
3282 } 3282 }
3283 abstract class B extends A { 3283 abstract class B extends A {
3284 m(p); 3284 m(p);
3285 } 3285 }
3286 class C extends B {}'''); 3286 class C extends B {}''');
3287 resolve(source); 3287 computeLibrarySourceErrors(source);
3288 assertNoErrors(source); 3288 assertNoErrors(source);
3289 verify([source]); 3289 verify([source]);
3290 } 3290 }
3291 3291
3292 void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcr etes_setter() { 3292 void test_nonAbstractClassInheritsAbstractMemberOne_abstractsDontOverrideConcr etes_setter() {
3293 Source source = addSource(r''' 3293 Source source = addSource(r'''
3294 class A { 3294 class A {
3295 set s(v) {} 3295 set s(v) {}
3296 } 3296 }
3297 abstract class B extends A { 3297 abstract class B extends A {
3298 set s(v); 3298 set s(v);
3299 } 3299 }
3300 class C extends B {}'''); 3300 class C extends B {}''');
3301 resolve(source); 3301 computeLibrarySourceErrors(source);
3302 assertNoErrors(source); 3302 assertNoErrors(source);
3303 verify([source]); 3303 verify([source]);
3304 } 3304 }
3305 3305
3306 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() { 3306 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface() {
3307 // 15979 3307 // 15979
3308 Source source = addSource(r''' 3308 Source source = addSource(r'''
3309 abstract class M {} 3309 abstract class M {}
3310 abstract class A {} 3310 abstract class A {}
3311 abstract class I { 3311 abstract class I {
3312 m(); 3312 m();
3313 } 3313 }
3314 abstract class B = A with M implements I;'''); 3314 abstract class B = A with M implements I;''');
3315 resolve(source); 3315 computeLibrarySourceErrors(source);
3316 assertNoErrors(source); 3316 assertNoErrors(source);
3317 verify([source]); 3317 verify([source]);
3318 } 3318 }
3319 3319
3320 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() { 3320 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() {
3321 // 15979 3321 // 15979
3322 Source source = addSource(r''' 3322 Source source = addSource(r'''
3323 abstract class M { 3323 abstract class M {
3324 m(); 3324 m();
3325 } 3325 }
3326 abstract class A {} 3326 abstract class A {}
3327 abstract class B = A with M;'''); 3327 abstract class B = A with M;''');
3328 resolve(source); 3328 computeLibrarySourceErrors(source);
3329 assertNoErrors(source); 3329 assertNoErrors(source);
3330 verify([source]); 3330 verify([source]);
3331 } 3331 }
3332 3332
3333 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass( ) { 3333 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass( ) {
3334 // 15979 3334 // 15979
3335 Source source = addSource(r''' 3335 Source source = addSource(r'''
3336 class M {} 3336 class M {}
3337 abstract class A { 3337 abstract class A {
3338 m(); 3338 m();
3339 } 3339 }
3340 abstract class B = A with M;'''); 3340 abstract class B = A with M;''');
3341 resolve(source); 3341 computeLibrarySourceErrors(source);
3342 assertNoErrors(source); 3342 assertNoErrors(source);
3343 verify([source]); 3343 verify([source]);
3344 } 3344 }
3345 3345
3346 void test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter() { 3346 void test_nonAbstractClassInheritsAbstractMemberOne_mixin_getter() {
3347 // 17034 3347 // 17034
3348 Source source = addSource(r''' 3348 Source source = addSource(r'''
3349 class A { 3349 class A {
3350 var a; 3350 var a;
3351 } 3351 }
3352 abstract class M { 3352 abstract class M {
3353 get a; 3353 get a;
3354 } 3354 }
3355 class B extends A with M {} 3355 class B extends A with M {}
3356 class C extends B {}'''); 3356 class C extends B {}''');
3357 resolve(source); 3357 computeLibrarySourceErrors(source);
3358 assertNoErrors(source); 3358 assertNoErrors(source);
3359 verify([source]); 3359 verify([source]);
3360 } 3360 }
3361 3361
3362 void test_nonAbstractClassInheritsAbstractMemberOne_mixin_method() { 3362 void test_nonAbstractClassInheritsAbstractMemberOne_mixin_method() {
3363 Source source = addSource(r''' 3363 Source source = addSource(r'''
3364 class A { 3364 class A {
3365 m() {} 3365 m() {}
3366 } 3366 }
3367 abstract class M { 3367 abstract class M {
3368 m(); 3368 m();
3369 } 3369 }
3370 class B extends A with M {} 3370 class B extends A with M {}
3371 class C extends B {}'''); 3371 class C extends B {}''');
3372 resolve(source); 3372 computeLibrarySourceErrors(source);
3373 assertNoErrors(source); 3373 assertNoErrors(source);
3374 verify([source]); 3374 verify([source]);
3375 } 3375 }
3376 3376
3377 void test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter() { 3377 void test_nonAbstractClassInheritsAbstractMemberOne_mixin_setter() {
3378 Source source = addSource(r''' 3378 Source source = addSource(r'''
3379 class A { 3379 class A {
3380 var a; 3380 var a;
3381 } 3381 }
3382 abstract class M { 3382 abstract class M {
3383 set a(dynamic v); 3383 set a(dynamic v);
3384 } 3384 }
3385 class B extends A with M {} 3385 class B extends A with M {}
3386 class C extends B {}'''); 3386 class C extends B {}''');
3387 resolve(source); 3387 computeLibrarySourceErrors(source);
3388 assertNoErrors(source); 3388 assertNoErrors(source);
3389 verify([source]); 3389 verify([source]);
3390 } 3390 }
3391 3391
3392 void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor() { 3392 void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_accessor() {
3393 Source source = addSource(r''' 3393 Source source = addSource(r'''
3394 abstract class A { 3394 abstract class A {
3395 int get g; 3395 int get g;
3396 } 3396 }
3397 class B extends A { 3397 class B extends A {
3398 noSuchMethod(v) => ''; 3398 noSuchMethod(v) => '';
3399 }'''); 3399 }''');
3400 resolve(source); 3400 computeLibrarySourceErrors(source);
3401 assertNoErrors(source); 3401 assertNoErrors(source);
3402 verify([source]); 3402 verify([source]);
3403 } 3403 }
3404 3404
3405 void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method() { 3405 void test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_method() {
3406 Source source = addSource(r''' 3406 Source source = addSource(r'''
3407 abstract class A { 3407 abstract class A {
3408 m(p); 3408 m(p);
3409 } 3409 }
3410 class B extends A { 3410 class B extends A {
3411 noSuchMethod(v) => ''; 3411 noSuchMethod(v) => '';
3412 }'''); 3412 }''');
3413 resolve(source); 3413 computeLibrarySourceErrors(source);
3414 assertNoErrors(source); 3414 assertNoErrors(source);
3415 verify([source]); 3415 verify([source]);
3416 } 3416 }
3417 3417
3418 void test_nonBoolExpression_functionType() { 3418 void test_nonBoolExpression_functionType() {
3419 Source source = addSource(r''' 3419 Source source = addSource(r'''
3420 bool makeAssertion() => true; 3420 bool makeAssertion() => true;
3421 f() { 3421 f() {
3422 assert(makeAssertion); 3422 assert(makeAssertion);
3423 }'''); 3423 }''');
3424 resolve(source); 3424 computeLibrarySourceErrors(source);
3425 assertNoErrors(source); 3425 assertNoErrors(source);
3426 verify([source]); 3426 verify([source]);
3427 } 3427 }
3428 3428
3429 void test_nonBoolExpression_interfaceType() { 3429 void test_nonBoolExpression_interfaceType() {
3430 Source source = addSource(r''' 3430 Source source = addSource(r'''
3431 f() { 3431 f() {
3432 assert(true); 3432 assert(true);
3433 }'''); 3433 }''');
3434 resolve(source); 3434 computeLibrarySourceErrors(source);
3435 assertNoErrors(source); 3435 assertNoErrors(source);
3436 verify([source]); 3436 verify([source]);
3437 } 3437 }
3438 3438
3439 void test_nonBoolNegationExpression() { 3439 void test_nonBoolNegationExpression() {
3440 Source source = addSource(r''' 3440 Source source = addSource(r'''
3441 f(bool pb, pd) { 3441 f(bool pb, pd) {
3442 !true; 3442 !true;
3443 !false; 3443 !false;
3444 !pb; 3444 !pb;
3445 !pd; 3445 !pd;
3446 }'''); 3446 }''');
3447 resolve(source); 3447 computeLibrarySourceErrors(source);
3448 assertNoErrors(source); 3448 assertNoErrors(source);
3449 verify([source]); 3449 verify([source]);
3450 } 3450 }
3451 3451
3452 void test_nonBoolOperand_and_bool() { 3452 void test_nonBoolOperand_and_bool() {
3453 Source source = addSource(r''' 3453 Source source = addSource(r'''
3454 bool f(bool left, bool right) { 3454 bool f(bool left, bool right) {
3455 return left && right; 3455 return left && right;
3456 }'''); 3456 }''');
3457 resolve(source); 3457 computeLibrarySourceErrors(source);
3458 assertNoErrors(source); 3458 assertNoErrors(source);
3459 verify([source]); 3459 verify([source]);
3460 } 3460 }
3461 3461
3462 void test_nonBoolOperand_and_dynamic() { 3462 void test_nonBoolOperand_and_dynamic() {
3463 Source source = addSource(r''' 3463 Source source = addSource(r'''
3464 bool f(left, dynamic right) { 3464 bool f(left, dynamic right) {
3465 return left && right; 3465 return left && right;
3466 }'''); 3466 }''');
3467 resolve(source); 3467 computeLibrarySourceErrors(source);
3468 assertNoErrors(source); 3468 assertNoErrors(source);
3469 verify([source]); 3469 verify([source]);
3470 } 3470 }
3471 3471
3472 void test_nonBoolOperand_or_bool() { 3472 void test_nonBoolOperand_or_bool() {
3473 Source source = addSource(r''' 3473 Source source = addSource(r'''
3474 bool f(bool left, bool right) { 3474 bool f(bool left, bool right) {
3475 return left || right; 3475 return left || right;
3476 }'''); 3476 }''');
3477 resolve(source); 3477 computeLibrarySourceErrors(source);
3478 assertNoErrors(source); 3478 assertNoErrors(source);
3479 verify([source]); 3479 verify([source]);
3480 } 3480 }
3481 3481
3482 void test_nonBoolOperand_or_dynamic() { 3482 void test_nonBoolOperand_or_dynamic() {
3483 Source source = addSource(r''' 3483 Source source = addSource(r'''
3484 bool f(dynamic left, right) { 3484 bool f(dynamic left, right) {
3485 return left || right; 3485 return left || right;
3486 }'''); 3486 }''');
3487 resolve(source); 3487 computeLibrarySourceErrors(source);
3488 assertNoErrors(source); 3488 assertNoErrors(source);
3489 verify([source]); 3489 verify([source]);
3490 } 3490 }
3491 3491
3492 void test_nonConstantDefaultValue_function_named() { 3492 void test_nonConstantDefaultValue_function_named() {
3493 Source source = addSource("f({x : 2 + 3}) {}"); 3493 Source source = addSource("f({x : 2 + 3}) {}");
3494 resolve(source); 3494 computeLibrarySourceErrors(source);
3495 assertNoErrors(source); 3495 assertNoErrors(source);
3496 verify([source]); 3496 verify([source]);
3497 } 3497 }
3498 3498
3499 void test_nonConstantDefaultValue_function_positional() { 3499 void test_nonConstantDefaultValue_function_positional() {
3500 Source source = addSource("f([x = 2 + 3]) {}"); 3500 Source source = addSource("f([x = 2 + 3]) {}");
3501 resolve(source); 3501 computeLibrarySourceErrors(source);
3502 assertNoErrors(source); 3502 assertNoErrors(source);
3503 verify([source]); 3503 verify([source]);
3504 } 3504 }
3505 3505
3506 void test_nonConstantDefaultValue_inConstructor_named() { 3506 void test_nonConstantDefaultValue_inConstructor_named() {
3507 Source source = addSource(r''' 3507 Source source = addSource(r'''
3508 class A { 3508 class A {
3509 A({x : 2 + 3}) {} 3509 A({x : 2 + 3}) {}
3510 }'''); 3510 }''');
3511 resolve(source); 3511 computeLibrarySourceErrors(source);
3512 assertNoErrors(source); 3512 assertNoErrors(source);
3513 verify([source]); 3513 verify([source]);
3514 } 3514 }
3515 3515
3516 void test_nonConstantDefaultValue_inConstructor_positional() { 3516 void test_nonConstantDefaultValue_inConstructor_positional() {
3517 Source source = addSource(r''' 3517 Source source = addSource(r'''
3518 class A { 3518 class A {
3519 A([x = 2 + 3]) {} 3519 A([x = 2 + 3]) {}
3520 }'''); 3520 }''');
3521 resolve(source); 3521 computeLibrarySourceErrors(source);
3522 assertNoErrors(source); 3522 assertNoErrors(source);
3523 verify([source]); 3523 verify([source]);
3524 } 3524 }
3525 3525
3526 void test_nonConstantDefaultValue_method_named() { 3526 void test_nonConstantDefaultValue_method_named() {
3527 Source source = addSource(r''' 3527 Source source = addSource(r'''
3528 class A { 3528 class A {
3529 m({x : 2 + 3}) {} 3529 m({x : 2 + 3}) {}
3530 }'''); 3530 }''');
3531 resolve(source); 3531 computeLibrarySourceErrors(source);
3532 assertNoErrors(source); 3532 assertNoErrors(source);
3533 verify([source]); 3533 verify([source]);
3534 } 3534 }
3535 3535
3536 void test_nonConstantDefaultValue_method_positional() { 3536 void test_nonConstantDefaultValue_method_positional() {
3537 Source source = addSource(r''' 3537 Source source = addSource(r'''
3538 class A { 3538 class A {
3539 m([x = 2 + 3]) {} 3539 m([x = 2 + 3]) {}
3540 }'''); 3540 }''');
3541 resolve(source); 3541 computeLibrarySourceErrors(source);
3542 assertNoErrors(source); 3542 assertNoErrors(source);
3543 verify([source]); 3543 verify([source]);
3544 } 3544 }
3545 3545
3546 void test_nonConstantValueInInitializer_namedArgument() { 3546 void test_nonConstantValueInInitializer_namedArgument() {
3547 Source source = addSource(r''' 3547 Source source = addSource(r'''
3548 class A { 3548 class A {
3549 final a; 3549 final a;
3550 const A({this.a}); 3550 const A({this.a});
3551 } 3551 }
3552 class B extends A { 3552 class B extends A {
3553 const B({b}) : super(a: b); 3553 const B({b}) : super(a: b);
3554 }'''); 3554 }''');
3555 resolve(source); 3555 computeLibrarySourceErrors(source);
3556 assertNoErrors(source); 3556 assertNoErrors(source);
3557 verify([source]); 3557 verify([source]);
3558 } 3558 }
3559 3559
3560 void test_nonConstCaseExpression() { 3560 void test_nonConstCaseExpression() {
3561 Source source = addSource(r''' 3561 Source source = addSource(r'''
3562 f(Type t) { 3562 f(Type t) {
3563 switch (t) { 3563 switch (t) {
3564 case bool: 3564 case bool:
3565 case int: 3565 case int:
3566 return true; 3566 return true;
3567 default: 3567 default:
3568 return false; 3568 return false;
3569 } 3569 }
3570 }'''); 3570 }''');
3571 resolve(source); 3571 computeLibrarySourceErrors(source);
3572 assertNoErrors(source); 3572 assertNoErrors(source);
3573 verify([source]); 3573 verify([source]);
3574 } 3574 }
3575 3575
3576 void test_nonConstMapAsExpressionStatement_const() { 3576 void test_nonConstMapAsExpressionStatement_const() {
3577 Source source = addSource(r''' 3577 Source source = addSource(r'''
3578 f() { 3578 f() {
3579 const {'a' : 0, 'b' : 1}; 3579 const {'a' : 0, 'b' : 1};
3580 }'''); 3580 }''');
3581 resolve(source); 3581 computeLibrarySourceErrors(source);
3582 assertNoErrors(source); 3582 assertNoErrors(source);
3583 verify([source]); 3583 verify([source]);
3584 } 3584 }
3585 3585
3586 void test_nonConstMapAsExpressionStatement_notExpressionStatement() { 3586 void test_nonConstMapAsExpressionStatement_notExpressionStatement() {
3587 Source source = addSource(r''' 3587 Source source = addSource(r'''
3588 f() { 3588 f() {
3589 var m = {'a' : 0, 'b' : 1}; 3589 var m = {'a' : 0, 'b' : 1};
3590 }'''); 3590 }''');
3591 resolve(source); 3591 computeLibrarySourceErrors(source);
3592 assertNoErrors(source); 3592 assertNoErrors(source);
3593 verify([source]); 3593 verify([source]);
3594 } 3594 }
3595 3595
3596 void test_nonConstMapAsExpressionStatement_typeArguments() { 3596 void test_nonConstMapAsExpressionStatement_typeArguments() {
3597 Source source = addSource(r''' 3597 Source source = addSource(r'''
3598 f() { 3598 f() {
3599 <String, int> {'a' : 0, 'b' : 1}; 3599 <String, int> {'a' : 0, 'b' : 1};
3600 }'''); 3600 }''');
3601 resolve(source); 3601 computeLibrarySourceErrors(source);
3602 assertNoErrors(source); 3602 assertNoErrors(source);
3603 verify([source]); 3603 verify([source]);
3604 } 3604 }
3605 3605
3606 void test_nonConstValueInInitializer_binary_bool() { 3606 void test_nonConstValueInInitializer_binary_bool() {
3607 Source source = addSource(r''' 3607 Source source = addSource(r'''
3608 class A { 3608 class A {
3609 final v; 3609 final v;
3610 const A.a1(bool p) : v = p && true; 3610 const A.a1(bool p) : v = p && true;
3611 const A.a2(bool p) : v = true && p; 3611 const A.a2(bool p) : v = true && p;
3612 const A.b1(bool p) : v = p || true; 3612 const A.b1(bool p) : v = p || true;
3613 const A.b2(bool p) : v = true || p; 3613 const A.b2(bool p) : v = true || p;
3614 }'''); 3614 }''');
3615 resolve(source); 3615 computeLibrarySourceErrors(source);
3616 assertErrors(source, [HintCode.DEAD_CODE]); 3616 assertErrors(source, [HintCode.DEAD_CODE]);
3617 verify([source]); 3617 verify([source]);
3618 } 3618 }
3619 3619
3620 void test_nonConstValueInInitializer_binary_dynamic() { 3620 void test_nonConstValueInInitializer_binary_dynamic() {
3621 Source source = addSource(r''' 3621 Source source = addSource(r'''
3622 class A { 3622 class A {
3623 final v; 3623 final v;
3624 const A.a1(p) : v = p + 5; 3624 const A.a1(p) : v = p + 5;
3625 const A.a2(p) : v = 5 + p; 3625 const A.a2(p) : v = 5 + p;
3626 const A.b1(p) : v = p - 5; 3626 const A.b1(p) : v = p - 5;
3627 const A.b2(p) : v = 5 - p; 3627 const A.b2(p) : v = 5 - p;
3628 const A.c1(p) : v = p * 5; 3628 const A.c1(p) : v = p * 5;
3629 const A.c2(p) : v = 5 * p; 3629 const A.c2(p) : v = 5 * p;
3630 const A.d1(p) : v = p / 5; 3630 const A.d1(p) : v = p / 5;
3631 const A.d2(p) : v = 5 / p; 3631 const A.d2(p) : v = 5 / p;
3632 const A.e1(p) : v = p ~/ 5; 3632 const A.e1(p) : v = p ~/ 5;
3633 const A.e2(p) : v = 5 ~/ p; 3633 const A.e2(p) : v = 5 ~/ p;
3634 const A.f1(p) : v = p > 5; 3634 const A.f1(p) : v = p > 5;
3635 const A.f2(p) : v = 5 > p; 3635 const A.f2(p) : v = 5 > p;
3636 const A.g1(p) : v = p < 5; 3636 const A.g1(p) : v = p < 5;
3637 const A.g2(p) : v = 5 < p; 3637 const A.g2(p) : v = 5 < p;
3638 const A.h1(p) : v = p >= 5; 3638 const A.h1(p) : v = p >= 5;
3639 const A.h2(p) : v = 5 >= p; 3639 const A.h2(p) : v = 5 >= p;
3640 const A.i1(p) : v = p <= 5; 3640 const A.i1(p) : v = p <= 5;
3641 const A.i2(p) : v = 5 <= p; 3641 const A.i2(p) : v = 5 <= p;
3642 const A.j1(p) : v = p % 5; 3642 const A.j1(p) : v = p % 5;
3643 const A.j2(p) : v = 5 % p; 3643 const A.j2(p) : v = 5 % p;
3644 }'''); 3644 }''');
3645 resolve(source); 3645 computeLibrarySourceErrors(source);
3646 assertNoErrors(source); 3646 assertNoErrors(source);
3647 // operations on "p" are not resolved 3647 // operations on "p" are not resolved
3648 } 3648 }
3649 3649
3650 void test_nonConstValueInInitializer_binary_int() { 3650 void test_nonConstValueInInitializer_binary_int() {
3651 Source source = addSource(r''' 3651 Source source = addSource(r'''
3652 class A { 3652 class A {
3653 final v; 3653 final v;
3654 const A.a1(int p) : v = p ^ 5; 3654 const A.a1(int p) : v = p ^ 5;
3655 const A.a2(int p) : v = 5 ^ p; 3655 const A.a2(int p) : v = 5 ^ p;
3656 const A.b1(int p) : v = p & 5; 3656 const A.b1(int p) : v = p & 5;
3657 const A.b2(int p) : v = 5 & p; 3657 const A.b2(int p) : v = 5 & p;
3658 const A.c1(int p) : v = p | 5; 3658 const A.c1(int p) : v = p | 5;
3659 const A.c2(int p) : v = 5 | p; 3659 const A.c2(int p) : v = 5 | p;
3660 const A.d1(int p) : v = p >> 5; 3660 const A.d1(int p) : v = p >> 5;
3661 const A.d2(int p) : v = 5 >> p; 3661 const A.d2(int p) : v = 5 >> p;
3662 const A.e1(int p) : v = p << 5; 3662 const A.e1(int p) : v = p << 5;
3663 const A.e2(int p) : v = 5 << p; 3663 const A.e2(int p) : v = 5 << p;
3664 }'''); 3664 }''');
3665 resolve(source); 3665 computeLibrarySourceErrors(source);
3666 assertNoErrors(source); 3666 assertNoErrors(source);
3667 verify([source]); 3667 verify([source]);
3668 } 3668 }
3669 3669
3670 void test_nonConstValueInInitializer_binary_num() { 3670 void test_nonConstValueInInitializer_binary_num() {
3671 Source source = addSource(r''' 3671 Source source = addSource(r'''
3672 class A { 3672 class A {
3673 final v; 3673 final v;
3674 const A.a1(num p) : v = p + 5; 3674 const A.a1(num p) : v = p + 5;
3675 const A.a2(num p) : v = 5 + p; 3675 const A.a2(num p) : v = 5 + p;
3676 const A.b1(num p) : v = p - 5; 3676 const A.b1(num p) : v = p - 5;
3677 const A.b2(num p) : v = 5 - p; 3677 const A.b2(num p) : v = 5 - p;
3678 const A.c1(num p) : v = p * 5; 3678 const A.c1(num p) : v = p * 5;
3679 const A.c2(num p) : v = 5 * p; 3679 const A.c2(num p) : v = 5 * p;
3680 const A.d1(num p) : v = p / 5; 3680 const A.d1(num p) : v = p / 5;
3681 const A.d2(num p) : v = 5 / p; 3681 const A.d2(num p) : v = 5 / p;
3682 const A.e1(num p) : v = p ~/ 5; 3682 const A.e1(num p) : v = p ~/ 5;
3683 const A.e2(num p) : v = 5 ~/ p; 3683 const A.e2(num p) : v = 5 ~/ p;
3684 const A.f1(num p) : v = p > 5; 3684 const A.f1(num p) : v = p > 5;
3685 const A.f2(num p) : v = 5 > p; 3685 const A.f2(num p) : v = 5 > p;
3686 const A.g1(num p) : v = p < 5; 3686 const A.g1(num p) : v = p < 5;
3687 const A.g2(num p) : v = 5 < p; 3687 const A.g2(num p) : v = 5 < p;
3688 const A.h1(num p) : v = p >= 5; 3688 const A.h1(num p) : v = p >= 5;
3689 const A.h2(num p) : v = 5 >= p; 3689 const A.h2(num p) : v = 5 >= p;
3690 const A.i1(num p) : v = p <= 5; 3690 const A.i1(num p) : v = p <= 5;
3691 const A.i2(num p) : v = 5 <= p; 3691 const A.i2(num p) : v = 5 <= p;
3692 const A.j1(num p) : v = p % 5; 3692 const A.j1(num p) : v = p % 5;
3693 const A.j2(num p) : v = 5 % p; 3693 const A.j2(num p) : v = 5 % p;
3694 }'''); 3694 }''');
3695 resolve(source); 3695 computeLibrarySourceErrors(source);
3696 assertNoErrors(source); 3696 assertNoErrors(source);
3697 verify([source]); 3697 verify([source]);
3698 } 3698 }
3699 3699
3700 void test_nonConstValueInInitializer_field() { 3700 void test_nonConstValueInInitializer_field() {
3701 Source source = addSource(r''' 3701 Source source = addSource(r'''
3702 class A { 3702 class A {
3703 final int a; 3703 final int a;
3704 const A() : a = 5; 3704 const A() : a = 5;
3705 }'''); 3705 }''');
3706 resolve(source); 3706 computeLibrarySourceErrors(source);
3707 assertNoErrors(source); 3707 assertNoErrors(source);
3708 verify([source]); 3708 verify([source]);
3709 } 3709 }
3710 3710
3711 void test_nonConstValueInInitializer_redirecting() { 3711 void test_nonConstValueInInitializer_redirecting() {
3712 Source source = addSource(r''' 3712 Source source = addSource(r'''
3713 class A { 3713 class A {
3714 const A.named(p); 3714 const A.named(p);
3715 const A() : this.named(42); 3715 const A() : this.named(42);
3716 }'''); 3716 }''');
3717 resolve(source); 3717 computeLibrarySourceErrors(source);
3718 assertNoErrors(source); 3718 assertNoErrors(source);
3719 verify([source]); 3719 verify([source]);
3720 } 3720 }
3721 3721
3722 void test_nonConstValueInInitializer_super() { 3722 void test_nonConstValueInInitializer_super() {
3723 Source source = addSource(r''' 3723 Source source = addSource(r'''
3724 class A { 3724 class A {
3725 const A(p); 3725 const A(p);
3726 } 3726 }
3727 class B extends A { 3727 class B extends A {
3728 const B() : super(42); 3728 const B() : super(42);
3729 }'''); 3729 }''');
3730 resolve(source); 3730 computeLibrarySourceErrors(source);
3731 assertNoErrors(source); 3731 assertNoErrors(source);
3732 verify([source]); 3732 verify([source]);
3733 } 3733 }
3734 3734
3735 void test_nonConstValueInInitializer_unary() { 3735 void test_nonConstValueInInitializer_unary() {
3736 Source source = addSource(r''' 3736 Source source = addSource(r'''
3737 class A { 3737 class A {
3738 final v; 3738 final v;
3739 const A.a(bool p) : v = !p; 3739 const A.a(bool p) : v = !p;
3740 const A.b(int p) : v = ~p; 3740 const A.b(int p) : v = ~p;
3741 const A.c(num p) : v = -p; 3741 const A.c(num p) : v = -p;
3742 }'''); 3742 }''');
3743 resolve(source); 3743 computeLibrarySourceErrors(source);
3744 assertNoErrors(source); 3744 assertNoErrors(source);
3745 verify([source]); 3745 verify([source]);
3746 } 3746 }
3747 3747
3748 void test_nonGenerativeConstructor() { 3748 void test_nonGenerativeConstructor() {
3749 Source source = addSource(r''' 3749 Source source = addSource(r'''
3750 class A { 3750 class A {
3751 A.named() {} 3751 A.named() {}
3752 factory A() {} 3752 factory A() {}
3753 } 3753 }
3754 class B extends A { 3754 class B extends A {
3755 B() : super.named(); 3755 B() : super.named();
3756 }'''); 3756 }''');
3757 resolve(source); 3757 computeLibrarySourceErrors(source);
3758 assertNoErrors(source); 3758 assertNoErrors(source);
3759 verify([source]); 3759 verify([source]);
3760 } 3760 }
3761 3761
3762 void test_nonTypeInCatchClause_isClass() { 3762 void test_nonTypeInCatchClause_isClass() {
3763 Source source = addSource(r''' 3763 Source source = addSource(r'''
3764 f() { 3764 f() {
3765 try { 3765 try {
3766 } on String catch (e) { 3766 } on String catch (e) {
3767 } 3767 }
3768 }'''); 3768 }''');
3769 resolve(source); 3769 computeLibrarySourceErrors(source);
3770 assertNoErrors(source); 3770 assertNoErrors(source);
3771 verify([source]); 3771 verify([source]);
3772 } 3772 }
3773 3773
3774 void test_nonTypeInCatchClause_isFunctionTypeAlias() { 3774 void test_nonTypeInCatchClause_isFunctionTypeAlias() {
3775 Source source = addSource(r''' 3775 Source source = addSource(r'''
3776 typedef F(); 3776 typedef F();
3777 f() { 3777 f() {
3778 try { 3778 try {
3779 } on F catch (e) { 3779 } on F catch (e) {
3780 } 3780 }
3781 }'''); 3781 }''');
3782 resolve(source); 3782 computeLibrarySourceErrors(source);
3783 assertNoErrors(source); 3783 assertNoErrors(source);
3784 verify([source]); 3784 verify([source]);
3785 } 3785 }
3786 3786
3787 void test_nonTypeInCatchClause_isTypeParameter() { 3787 void test_nonTypeInCatchClause_isTypeParameter() {
3788 Source source = addSource(r''' 3788 Source source = addSource(r'''
3789 class A<T> { 3789 class A<T> {
3790 f() { 3790 f() {
3791 try { 3791 try {
3792 } on T catch (e) { 3792 } on T catch (e) {
3793 } 3793 }
3794 } 3794 }
3795 }'''); 3795 }''');
3796 resolve(source); 3796 computeLibrarySourceErrors(source);
3797 assertNoErrors(source); 3797 assertNoErrors(source);
3798 verify([source]); 3798 verify([source]);
3799 } 3799 }
3800 3800
3801 void test_nonTypeInCatchClause_noType() { 3801 void test_nonTypeInCatchClause_noType() {
3802 Source source = addSource(r''' 3802 Source source = addSource(r'''
3803 f() { 3803 f() {
3804 try { 3804 try {
3805 } catch (e) { 3805 } catch (e) {
3806 } 3806 }
3807 }'''); 3807 }''');
3808 resolve(source); 3808 computeLibrarySourceErrors(source);
3809 assertNoErrors(source); 3809 assertNoErrors(source);
3810 verify([source]); 3810 verify([source]);
3811 } 3811 }
3812 3812
3813 void test_nonVoidReturnForOperator_no() { 3813 void test_nonVoidReturnForOperator_no() {
3814 Source source = addSource(r''' 3814 Source source = addSource(r'''
3815 class A { 3815 class A {
3816 operator []=(a, b) {} 3816 operator []=(a, b) {}
3817 }'''); 3817 }''');
3818 resolve(source); 3818 computeLibrarySourceErrors(source);
3819 assertNoErrors(source); 3819 assertNoErrors(source);
3820 verify([source]); 3820 verify([source]);
3821 } 3821 }
3822 3822
3823 void test_nonVoidReturnForOperator_void() { 3823 void test_nonVoidReturnForOperator_void() {
3824 Source source = addSource(r''' 3824 Source source = addSource(r'''
3825 class A { 3825 class A {
3826 void operator []=(a, b) {} 3826 void operator []=(a, b) {}
3827 }'''); 3827 }''');
3828 resolve(source); 3828 computeLibrarySourceErrors(source);
3829 assertNoErrors(source); 3829 assertNoErrors(source);
3830 verify([source]); 3830 verify([source]);
3831 } 3831 }
3832 3832
3833 void test_nonVoidReturnForSetter_function_no() { 3833 void test_nonVoidReturnForSetter_function_no() {
3834 Source source = addSource("set x(v) {}"); 3834 Source source = addSource("set x(v) {}");
3835 resolve(source); 3835 computeLibrarySourceErrors(source);
3836 assertNoErrors(source); 3836 assertNoErrors(source);
3837 verify([source]); 3837 verify([source]);
3838 } 3838 }
3839 3839
3840 void test_nonVoidReturnForSetter_function_void() { 3840 void test_nonVoidReturnForSetter_function_void() {
3841 Source source = addSource("void set x(v) {}"); 3841 Source source = addSource("void set x(v) {}");
3842 resolve(source); 3842 computeLibrarySourceErrors(source);
3843 assertNoErrors(source); 3843 assertNoErrors(source);
3844 verify([source]); 3844 verify([source]);
3845 } 3845 }
3846 3846
3847 void test_nonVoidReturnForSetter_method_no() { 3847 void test_nonVoidReturnForSetter_method_no() {
3848 Source source = addSource(r''' 3848 Source source = addSource(r'''
3849 class A { 3849 class A {
3850 set x(v) {} 3850 set x(v) {}
3851 }'''); 3851 }''');
3852 resolve(source); 3852 computeLibrarySourceErrors(source);
3853 assertNoErrors(source); 3853 assertNoErrors(source);
3854 verify([source]); 3854 verify([source]);
3855 } 3855 }
3856 3856
3857 void test_nonVoidReturnForSetter_method_void() { 3857 void test_nonVoidReturnForSetter_method_void() {
3858 Source source = addSource(r''' 3858 Source source = addSource(r'''
3859 class A { 3859 class A {
3860 void set x(v) {} 3860 void set x(v) {}
3861 }'''); 3861 }''');
3862 resolve(source); 3862 computeLibrarySourceErrors(source);
3863 assertNoErrors(source); 3863 assertNoErrors(source);
3864 verify([source]); 3864 verify([source]);
3865 } 3865 }
3866 3866
3867 void test_null_callMethod() { 3867 void test_null_callMethod() {
3868 Source source = addSource(r''' 3868 Source source = addSource(r'''
3869 main() { 3869 main() {
3870 null.m(); 3870 null.m();
3871 }'''); 3871 }''');
3872 resolve(source); 3872 computeLibrarySourceErrors(source);
3873 assertNoErrors(source); 3873 assertNoErrors(source);
3874 } 3874 }
3875 3875
3876 void test_null_callOperator() { 3876 void test_null_callOperator() {
3877 Source source = addSource(r''' 3877 Source source = addSource(r'''
3878 main() { 3878 main() {
3879 null + 5; 3879 null + 5;
3880 null == 5; 3880 null == 5;
3881 null[0]; 3881 null[0];
3882 }'''); 3882 }''');
3883 resolve(source); 3883 computeLibrarySourceErrors(source);
3884 assertNoErrors(source); 3884 assertNoErrors(source);
3885 } 3885 }
3886 3886
3887 void test_optionalParameterInOperator_required() { 3887 void test_optionalParameterInOperator_required() {
3888 Source source = addSource(r''' 3888 Source source = addSource(r'''
3889 class A { 3889 class A {
3890 operator +(p) {} 3890 operator +(p) {}
3891 }'''); 3891 }''');
3892 resolve(source); 3892 computeLibrarySourceErrors(source);
3893 assertNoErrors(source); 3893 assertNoErrors(source);
3894 verify([source]); 3894 verify([source]);
3895 } 3895 }
3896 3896
3897 void test_parameterDefaultDoesNotReferToParameterName() { 3897 void test_parameterDefaultDoesNotReferToParameterName() {
3898 // The final "f" should refer to the toplevel function "f", not to the 3898 // The final "f" should refer to the toplevel function "f", not to the
3899 // parameter called "f". See dartbug.com/13179. 3899 // parameter called "f". See dartbug.com/13179.
3900 Source source = addSource('void f([void f([x]) = f]) {}'); 3900 Source source = addSource('void f([void f([x]) = f]) {}');
3901 resolve(source); 3901 computeLibrarySourceErrors(source);
3902 assertNoErrors(source); 3902 assertNoErrors(source);
3903 verify([source]); 3903 verify([source]);
3904 } 3904 }
3905 3905
3906 void test_parameterScope_local() { 3906 void test_parameterScope_local() {
3907 // Parameter names shouldn't conflict with the name of the function they 3907 // Parameter names shouldn't conflict with the name of the function they
3908 // are enclosed in. 3908 // are enclosed in.
3909 Source source = addSource(r''' 3909 Source source = addSource(r'''
3910 f() { 3910 f() {
3911 g(g) { 3911 g(g) {
3912 h(g); 3912 h(g);
3913 } 3913 }
3914 } 3914 }
3915 h(x) {} 3915 h(x) {}
3916 '''); 3916 ''');
3917 resolve(source); 3917 computeLibrarySourceErrors(source);
3918 assertNoErrors(source); 3918 assertNoErrors(source);
3919 verify([source]); 3919 verify([source]);
3920 } 3920 }
3921 3921
3922 void test_parameterScope_method() { 3922 void test_parameterScope_method() {
3923 // Parameter names shouldn't conflict with the name of the function they 3923 // Parameter names shouldn't conflict with the name of the function they
3924 // are enclosed in. 3924 // are enclosed in.
3925 Source source = addSource(r''' 3925 Source source = addSource(r'''
3926 class C { 3926 class C {
3927 g(g) { 3927 g(g) {
3928 h(g); 3928 h(g);
3929 } 3929 }
3930 } 3930 }
3931 h(x) {} 3931 h(x) {}
3932 '''); 3932 ''');
3933 resolve(source); 3933 computeLibrarySourceErrors(source);
3934 assertNoErrors(source); 3934 assertNoErrors(source);
3935 verify([source]); 3935 verify([source]);
3936 } 3936 }
3937 3937
3938 void test_parameterScope_toplevel() { 3938 void test_parameterScope_toplevel() {
3939 // Parameter names shouldn't conflict with the name of the function they 3939 // Parameter names shouldn't conflict with the name of the function they
3940 // are enclosed in. 3940 // are enclosed in.
3941 Source source = addSource(r''' 3941 Source source = addSource(r'''
3942 g(g) { 3942 g(g) {
3943 h(g); 3943 h(g);
3944 } 3944 }
3945 h(x) {} 3945 h(x) {}
3946 '''); 3946 ''');
3947 resolve(source); 3947 computeLibrarySourceErrors(source);
3948 assertNoErrors(source); 3948 assertNoErrors(source);
3949 verify([source]); 3949 verify([source]);
3950 } 3950 }
3951 3951
3952 void test_prefixCollidesWithTopLevelMembers() { 3952 void test_prefixCollidesWithTopLevelMembers() {
3953 addNamedSource("/lib.dart", r''' 3953 addNamedSource("/lib.dart", r'''
3954 library lib; 3954 library lib;
3955 class A {}'''); 3955 class A {}''');
3956 Source source = addSource(r''' 3956 Source source = addSource(r'''
3957 import 'lib.dart' as p; 3957 import 'lib.dart' as p;
3958 typedef P(); 3958 typedef P();
3959 p2() {} 3959 p2() {}
3960 var p3; 3960 var p3;
3961 class p4 {} 3961 class p4 {}
3962 p.A a;'''); 3962 p.A a;''');
3963 resolve(source); 3963 computeLibrarySourceErrors(source);
3964 assertNoErrors(source); 3964 assertNoErrors(source);
3965 verify([source]); 3965 verify([source]);
3966 } 3966 }
3967 3967
3968 void test_propagateTypeArgs_intoBounds() { 3968 void test_propagateTypeArgs_intoBounds() {
3969 Source source = addSource(r''' 3969 Source source = addSource(r'''
3970 abstract class A<E> {} 3970 abstract class A<E> {}
3971 abstract class B<F> implements A<F>{} 3971 abstract class B<F> implements A<F>{}
3972 abstract class C<G, H extends A<G>> {} 3972 abstract class C<G, H extends A<G>> {}
3973 class D<I> extends C<I, B<I>> {}'''); 3973 class D<I> extends C<I, B<I>> {}''');
3974 resolve(source); 3974 computeLibrarySourceErrors(source);
3975 assertNoErrors(source); 3975 assertNoErrors(source);
3976 verify([source]); 3976 verify([source]);
3977 } 3977 }
3978 3978
3979 void test_propagateTypeArgs_intoSupertype() { 3979 void test_propagateTypeArgs_intoSupertype() {
3980 Source source = addSource(r''' 3980 Source source = addSource(r'''
3981 class A<T> { 3981 class A<T> {
3982 A(T p); 3982 A(T p);
3983 A.named(T p); 3983 A.named(T p);
3984 } 3984 }
3985 class B<S> extends A<S> { 3985 class B<S> extends A<S> {
3986 B(S p) : super(p); 3986 B(S p) : super(p);
3987 B.named(S p) : super.named(p); 3987 B.named(S p) : super.named(p);
3988 }'''); 3988 }''');
3989 resolve(source); 3989 computeLibrarySourceErrors(source);
3990 assertNoErrors(source); 3990 assertNoErrors(source);
3991 verify([source]); 3991 verify([source]);
3992 } 3992 }
3993 3993
3994 void test_proxy_annotation_prefixed() { 3994 void test_proxy_annotation_prefixed() {
3995 Source source = addSource(r''' 3995 Source source = addSource(r'''
3996 library L; 3996 library L;
3997 @proxy 3997 @proxy
3998 class A {} 3998 class A {}
3999 f(A a) { 3999 f(A a) {
4000 a.m(); 4000 a.m();
4001 var x = a.g; 4001 var x = a.g;
4002 a.s = 1; 4002 a.s = 1;
4003 var y = a + a; 4003 var y = a + a;
4004 a++; 4004 a++;
4005 ++a; 4005 ++a;
4006 }'''); 4006 }''');
4007 resolve(source); 4007 computeLibrarySourceErrors(source);
4008 assertNoErrors(source); 4008 assertNoErrors(source);
4009 } 4009 }
4010 4010
4011 void test_proxy_annotation_prefixed2() { 4011 void test_proxy_annotation_prefixed2() {
4012 Source source = addSource(r''' 4012 Source source = addSource(r'''
4013 library L; 4013 library L;
4014 @proxy 4014 @proxy
4015 class A {} 4015 class A {}
4016 class B { 4016 class B {
4017 f(A a) { 4017 f(A a) {
4018 a.m(); 4018 a.m();
4019 var x = a.g; 4019 var x = a.g;
4020 a.s = 1; 4020 a.s = 1;
4021 var y = a + a; 4021 var y = a + a;
4022 a++; 4022 a++;
4023 ++a; 4023 ++a;
4024 } 4024 }
4025 }'''); 4025 }''');
4026 resolve(source); 4026 computeLibrarySourceErrors(source);
4027 assertNoErrors(source); 4027 assertNoErrors(source);
4028 } 4028 }
4029 4029
4030 void test_proxy_annotation_prefixed3() { 4030 void test_proxy_annotation_prefixed3() {
4031 Source source = addSource(r''' 4031 Source source = addSource(r'''
4032 library L; 4032 library L;
4033 class B { 4033 class B {
4034 f(A a) { 4034 f(A a) {
4035 a.m(); 4035 a.m();
4036 var x = a.g; 4036 var x = a.g;
4037 a.s = 1; 4037 a.s = 1;
4038 var y = a + a; 4038 var y = a + a;
4039 a++; 4039 a++;
4040 ++a; 4040 ++a;
4041 } 4041 }
4042 } 4042 }
4043 @proxy 4043 @proxy
4044 class A {}'''); 4044 class A {}''');
4045 resolve(source); 4045 computeLibrarySourceErrors(source);
4046 assertNoErrors(source); 4046 assertNoErrors(source);
4047 } 4047 }
4048 4048
4049 void test_proxy_annotation_proxyHasPrefixedIdentifier() { 4049 void test_proxy_annotation_proxyHasPrefixedIdentifier() {
4050 Source source = addSource(r''' 4050 Source source = addSource(r'''
4051 library L; 4051 library L;
4052 import 'dart:core' as core; 4052 import 'dart:core' as core;
4053 @core.proxy class PrefixProxy {} 4053 @core.proxy class PrefixProxy {}
4054 main() { 4054 main() {
4055 new PrefixProxy().foo; 4055 new PrefixProxy().foo;
4056 new PrefixProxy().foo(); 4056 new PrefixProxy().foo();
4057 }'''); 4057 }''');
4058 resolve(source); 4058 computeLibrarySourceErrors(source);
4059 assertNoErrors(source); 4059 assertNoErrors(source);
4060 } 4060 }
4061 4061
4062 void test_proxy_annotation_simple() { 4062 void test_proxy_annotation_simple() {
4063 Source source = addSource(r''' 4063 Source source = addSource(r'''
4064 library L; 4064 library L;
4065 @proxy 4065 @proxy
4066 class B { 4066 class B {
4067 m() { 4067 m() {
4068 n(); 4068 n();
4069 var x = g; 4069 var x = g;
4070 s = 1; 4070 s = 1;
4071 var y = this + this; 4071 var y = this + this;
4072 } 4072 }
4073 }'''); 4073 }''');
4074 resolve(source); 4074 computeLibrarySourceErrors(source);
4075 assertNoErrors(source); 4075 assertNoErrors(source);
4076 } 4076 }
4077 4077
4078 void test_proxy_annotation_superclass() { 4078 void test_proxy_annotation_superclass() {
4079 Source source = addSource(r''' 4079 Source source = addSource(r'''
4080 library L; 4080 library L;
4081 class B extends A { 4081 class B extends A {
4082 m() { 4082 m() {
4083 n(); 4083 n();
4084 var x = g; 4084 var x = g;
4085 s = 1; 4085 s = 1;
4086 var y = this + this; 4086 var y = this + this;
4087 } 4087 }
4088 } 4088 }
4089 @proxy 4089 @proxy
4090 class A {}'''); 4090 class A {}''');
4091 resolve(source); 4091 computeLibrarySourceErrors(source);
4092 assertNoErrors(source); 4092 assertNoErrors(source);
4093 } 4093 }
4094 4094
4095 void test_proxy_annotation_superclass_mixin() { 4095 void test_proxy_annotation_superclass_mixin() {
4096 Source source = addSource(r''' 4096 Source source = addSource(r'''
4097 library L; 4097 library L;
4098 class B extends Object with A { 4098 class B extends Object with A {
4099 m() { 4099 m() {
4100 n(); 4100 n();
4101 var x = g; 4101 var x = g;
4102 s = 1; 4102 s = 1;
4103 var y = this + this; 4103 var y = this + this;
4104 } 4104 }
4105 } 4105 }
4106 @proxy 4106 @proxy
4107 class A {}'''); 4107 class A {}''');
4108 resolve(source); 4108 computeLibrarySourceErrors(source);
4109 assertNoErrors(source); 4109 assertNoErrors(source);
4110 } 4110 }
4111 4111
4112 void test_proxy_annotation_superinterface() { 4112 void test_proxy_annotation_superinterface() {
4113 Source source = addSource(r''' 4113 Source source = addSource(r'''
4114 library L; 4114 library L;
4115 class B implements A { 4115 class B implements A {
4116 m() { 4116 m() {
4117 n(); 4117 n();
4118 var x = g; 4118 var x = g;
4119 s = 1; 4119 s = 1;
4120 var y = this + this; 4120 var y = this + this;
4121 } 4121 }
4122 } 4122 }
4123 @proxy 4123 @proxy
4124 class A {}'''); 4124 class A {}''');
4125 resolve(source); 4125 computeLibrarySourceErrors(source);
4126 assertNoErrors(source); 4126 assertNoErrors(source);
4127 } 4127 }
4128 4128
4129 void test_proxy_annotation_superinterface_infiniteLoop() { 4129 void test_proxy_annotation_superinterface_infiniteLoop() {
4130 Source source = addSource(r''' 4130 Source source = addSource(r'''
4131 library L; 4131 library L;
4132 class C implements A { 4132 class C implements A {
4133 m() { 4133 m() {
4134 n(); 4134 n();
4135 var x = g; 4135 var x = g;
4136 s = 1; 4136 s = 1;
4137 var y = this + this; 4137 var y = this + this;
4138 } 4138 }
4139 } 4139 }
4140 class B implements A{} 4140 class B implements A{}
4141 class A implements B{}'''); 4141 class A implements B{}''');
4142 resolve(source); 4142 computeLibrarySourceErrors(source);
4143 // Test is that a stack overflow isn't reached in resolution 4143 // Test is that a stack overflow isn't reached in resolution
4144 // (previous line), no need to assert error set. 4144 // (previous line), no need to assert error set.
4145 } 4145 }
4146 4146
4147 void test_recursiveConstructorRedirect() { 4147 void test_recursiveConstructorRedirect() {
4148 Source source = addSource(r''' 4148 Source source = addSource(r'''
4149 class A { 4149 class A {
4150 A.a() : this.b(); 4150 A.a() : this.b();
4151 A.b() : this.c(); 4151 A.b() : this.c();
4152 A.c() {} 4152 A.c() {}
4153 }'''); 4153 }''');
4154 resolve(source); 4154 computeLibrarySourceErrors(source);
4155 assertNoErrors(source); 4155 assertNoErrors(source);
4156 verify([source]); 4156 verify([source]);
4157 } 4157 }
4158 4158
4159 void test_recursiveFactoryRedirect() { 4159 void test_recursiveFactoryRedirect() {
4160 Source source = addSource(r''' 4160 Source source = addSource(r'''
4161 class A { 4161 class A {
4162 factory A() = B; 4162 factory A() = B;
4163 } 4163 }
4164 class B implements A { 4164 class B implements A {
4165 factory B() = C; 4165 factory B() = C;
4166 } 4166 }
4167 class C implements B { 4167 class C implements B {
4168 factory C() {} 4168 factory C() {}
4169 }'''); 4169 }''');
4170 resolve(source); 4170 computeLibrarySourceErrors(source);
4171 assertNoErrors(source); 4171 assertNoErrors(source);
4172 verify([source]); 4172 verify([source]);
4173 } 4173 }
4174 4174
4175 void test_redirectToInvalidFunctionType() { 4175 void test_redirectToInvalidFunctionType() {
4176 Source source = addSource(r''' 4176 Source source = addSource(r'''
4177 class A implements B { 4177 class A implements B {
4178 A(int p) {} 4178 A(int p) {}
4179 } 4179 }
4180 class B { 4180 class B {
4181 factory B(int p) = A; 4181 factory B(int p) = A;
4182 }'''); 4182 }''');
4183 resolve(source); 4183 computeLibrarySourceErrors(source);
4184 assertNoErrors(source); 4184 assertNoErrors(source);
4185 verify([source]); 4185 verify([source]);
4186 } 4186 }
4187 4187
4188 void test_redirectToInvalidReturnType() { 4188 void test_redirectToInvalidReturnType() {
4189 Source source = addSource(r''' 4189 Source source = addSource(r'''
4190 class A { 4190 class A {
4191 A() {} 4191 A() {}
4192 } 4192 }
4193 class B extends A { 4193 class B extends A {
4194 factory B() = A; 4194 factory B() = A;
4195 }'''); 4195 }''');
4196 resolve(source); 4196 computeLibrarySourceErrors(source);
4197 assertNoErrors(source); 4197 assertNoErrors(source);
4198 verify([source]); 4198 verify([source]);
4199 } 4199 }
4200 4200
4201 void test_redirectToNonConstConstructor() { 4201 void test_redirectToNonConstConstructor() {
4202 Source source = addSource(r''' 4202 Source source = addSource(r'''
4203 class A { 4203 class A {
4204 const A.a(); 4204 const A.a();
4205 const factory A.b() = A.a; 4205 const factory A.b() = A.a;
4206 }'''); 4206 }''');
4207 resolve(source); 4207 computeLibrarySourceErrors(source);
4208 assertNoErrors(source); 4208 assertNoErrors(source);
4209 verify([source]); 4209 verify([source]);
4210 } 4210 }
4211 4211
4212 void test_referencedBeforeDeclaration_cascade() { 4212 void test_referencedBeforeDeclaration_cascade() {
4213 Source source = addSource(r''' 4213 Source source = addSource(r'''
4214 testRequestHandler() {} 4214 testRequestHandler() {}
4215 4215
4216 main() { 4216 main() {
4217 var s1 = null; 4217 var s1 = null;
4218 testRequestHandler() 4218 testRequestHandler()
4219 ..stream(s1); 4219 ..stream(s1);
4220 var stream = 123; 4220 var stream = 123;
4221 print(stream); 4221 print(stream);
4222 }'''); 4222 }''');
4223 resolve(source); 4223 computeLibrarySourceErrors(source);
4224 assertNoErrors(source); 4224 assertNoErrors(source);
4225 verify([source]); 4225 verify([source]);
4226 } 4226 }
4227 4227
4228 void test_referenceToDeclaredVariableInInitializer_constructorName() { 4228 void test_referenceToDeclaredVariableInInitializer_constructorName() {
4229 Source source = addSource(r''' 4229 Source source = addSource(r'''
4230 class A { 4230 class A {
4231 A.x() {} 4231 A.x() {}
4232 } 4232 }
4233 f() { 4233 f() {
4234 var x = new A.x(); 4234 var x = new A.x();
4235 }'''); 4235 }''');
4236 resolve(source); 4236 computeLibrarySourceErrors(source);
4237 assertNoErrors(source); 4237 assertNoErrors(source);
4238 verify([source]); 4238 verify([source]);
4239 } 4239 }
4240 4240
4241 void test_referenceToDeclaredVariableInInitializer_methodName() { 4241 void test_referenceToDeclaredVariableInInitializer_methodName() {
4242 Source source = addSource(r''' 4242 Source source = addSource(r'''
4243 class A { 4243 class A {
4244 x() {} 4244 x() {}
4245 } 4245 }
4246 f(A a) { 4246 f(A a) {
4247 var x = a.x(); 4247 var x = a.x();
4248 }'''); 4248 }''');
4249 resolve(source); 4249 computeLibrarySourceErrors(source);
4250 assertNoErrors(source); 4250 assertNoErrors(source);
4251 verify([source]); 4251 verify([source]);
4252 } 4252 }
4253 4253
4254 void test_referenceToDeclaredVariableInInitializer_propertyName() { 4254 void test_referenceToDeclaredVariableInInitializer_propertyName() {
4255 Source source = addSource(r''' 4255 Source source = addSource(r'''
4256 class A { 4256 class A {
4257 var x; 4257 var x;
4258 } 4258 }
4259 f(A a) { 4259 f(A a) {
4260 var x = a.x; 4260 var x = a.x;
4261 }'''); 4261 }''');
4262 resolve(source); 4262 computeLibrarySourceErrors(source);
4263 assertNoErrors(source); 4263 assertNoErrors(source);
4264 verify([source]); 4264 verify([source]);
4265 } 4265 }
4266 4266
4267 void test_rethrowOutsideCatch() { 4267 void test_rethrowOutsideCatch() {
4268 Source source = addSource(r''' 4268 Source source = addSource(r'''
4269 class A { 4269 class A {
4270 void m() { 4270 void m() {
4271 try {} catch (e) {rethrow;} 4271 try {} catch (e) {rethrow;}
4272 } 4272 }
4273 }'''); 4273 }''');
4274 resolve(source); 4274 computeLibrarySourceErrors(source);
4275 assertNoErrors(source); 4275 assertNoErrors(source);
4276 verify([source]); 4276 verify([source]);
4277 } 4277 }
4278 4278
4279 void test_return_in_generator_async() { 4279 void test_return_in_generator_async() {
4280 Source source = addSource(''' 4280 Source source = addSource('''
4281 import 'dart:async'; 4281 import 'dart:async';
4282 Stream<int> f() async* { 4282 Stream<int> f() async* {
4283 return; 4283 return;
4284 } 4284 }
4285 '''); 4285 ''');
4286 resolve(source); 4286 computeLibrarySourceErrors(source);
4287 assertNoErrors(source); 4287 assertNoErrors(source);
4288 verify([source]); 4288 verify([source]);
4289 } 4289 }
4290 4290
4291 void test_return_in_generator_sync() { 4291 void test_return_in_generator_sync() {
4292 Source source = addSource(''' 4292 Source source = addSource('''
4293 Iterable<int> f() sync* { 4293 Iterable<int> f() sync* {
4294 return; 4294 return;
4295 } 4295 }
4296 '''); 4296 ''');
4297 resolve(source); 4297 computeLibrarySourceErrors(source);
4298 assertNoErrors(source); 4298 assertNoErrors(source);
4299 verify([source]); 4299 verify([source]);
4300 } 4300 }
4301 4301
4302 void test_returnInGenerativeConstructor() { 4302 void test_returnInGenerativeConstructor() {
4303 Source source = addSource(r''' 4303 Source source = addSource(r'''
4304 class A { 4304 class A {
4305 A() { return; } 4305 A() { return; }
4306 }'''); 4306 }''');
4307 resolve(source); 4307 computeLibrarySourceErrors(source);
4308 assertNoErrors(source); 4308 assertNoErrors(source);
4309 verify([source]); 4309 verify([source]);
4310 } 4310 }
4311 4311
4312 void test_returnInGenerator_async() { 4312 void test_returnInGenerator_async() {
4313 Source source = addSource(r''' 4313 Source source = addSource(r'''
4314 f() async { 4314 f() async {
4315 return 0; 4315 return 0;
4316 }'''); 4316 }''');
4317 resolve(source); 4317 computeLibrarySourceErrors(source);
4318 assertNoErrors(source); 4318 assertNoErrors(source);
4319 verify([source]); 4319 verify([source]);
4320 } 4320 }
4321 4321
4322 void test_returnInGenerator_sync() { 4322 void test_returnInGenerator_sync() {
4323 Source source = addSource(r''' 4323 Source source = addSource(r'''
4324 f() { 4324 f() {
4325 return 0; 4325 return 0;
4326 }'''); 4326 }''');
4327 resolve(source); 4327 computeLibrarySourceErrors(source);
4328 assertNoErrors(source); 4328 assertNoErrors(source);
4329 verify([source]); 4329 verify([source]);
4330 } 4330 }
4331 4331
4332 void test_returnOfInvalidType_async() { 4332 void test_returnOfInvalidType_async() {
4333 Source source = addSource(r''' 4333 Source source = addSource(r'''
4334 import 'dart:async'; 4334 import 'dart:async';
4335 class A { 4335 class A {
4336 Future<int> m() async { 4336 Future<int> m() async {
4337 return 0; 4337 return 0;
4338 } 4338 }
4339 }'''); 4339 }''');
4340 resolve(source); 4340 computeLibrarySourceErrors(source);
4341 assertNoErrors(source); 4341 assertNoErrors(source);
4342 verify([source]); 4342 verify([source]);
4343 } 4343 }
4344 4344
4345 void test_returnOfInvalidType_dynamic() { 4345 void test_returnOfInvalidType_dynamic() {
4346 Source source = addSource(r''' 4346 Source source = addSource(r'''
4347 class TypeError {} 4347 class TypeError {}
4348 class A { 4348 class A {
4349 static void testLogicalOp() { 4349 static void testLogicalOp() {
4350 testOr(a, b, onTypeError) { 4350 testOr(a, b, onTypeError) {
4351 try { 4351 try {
4352 return a || b; 4352 return a || b;
4353 } on TypeError catch (t) { 4353 } on TypeError catch (t) {
4354 return onTypeError; 4354 return onTypeError;
4355 } 4355 }
4356 } 4356 }
4357 } 4357 }
4358 }'''); 4358 }''');
4359 resolve(source); 4359 computeLibrarySourceErrors(source);
4360 assertNoErrors(source); 4360 assertNoErrors(source);
4361 verify([source]); 4361 verify([source]);
4362 } 4362 }
4363 4363
4364 void test_returnOfInvalidType_dynamicAsTypeArgument() { 4364 void test_returnOfInvalidType_dynamicAsTypeArgument() {
4365 Source source = addSource(r''' 4365 Source source = addSource(r'''
4366 class I<T> { 4366 class I<T> {
4367 factory I() => new A<T>(); 4367 factory I() => new A<T>();
4368 } 4368 }
4369 class A<T> implements I { 4369 class A<T> implements I {
4370 }'''); 4370 }''');
4371 resolve(source); 4371 computeLibrarySourceErrors(source);
4372 assertNoErrors(source); 4372 assertNoErrors(source);
4373 verify([source]); 4373 verify([source]);
4374 } 4374 }
4375 4375
4376 void test_returnOfInvalidType_subtype() { 4376 void test_returnOfInvalidType_subtype() {
4377 Source source = addSource(r''' 4377 Source source = addSource(r'''
4378 class A {} 4378 class A {}
4379 class B extends A {} 4379 class B extends A {}
4380 A f(B b) { return b; }'''); 4380 A f(B b) { return b; }''');
4381 resolve(source); 4381 computeLibrarySourceErrors(source);
4382 assertNoErrors(source); 4382 assertNoErrors(source);
4383 verify([source]); 4383 verify([source]);
4384 } 4384 }
4385 4385
4386 void test_returnOfInvalidType_supertype() { 4386 void test_returnOfInvalidType_supertype() {
4387 Source source = addSource(r''' 4387 Source source = addSource(r'''
4388 class A {} 4388 class A {}
4389 class B extends A {} 4389 class B extends A {}
4390 B f(A a) { return a; }'''); 4390 B f(A a) { return a; }''');
4391 resolve(source); 4391 computeLibrarySourceErrors(source);
4392 assertNoErrors(source); 4392 assertNoErrors(source);
4393 verify([source]); 4393 verify([source]);
4394 } 4394 }
4395 4395
4396 void test_returnOfInvalidType_typeParameter_18468() { 4396 void test_returnOfInvalidType_typeParameter_18468() {
4397 // https://code.google.com/p/dart/issues/detail?id=18468 4397 // https://code.google.com/p/dart/issues/detail?id=18468
4398 // 4398 //
4399 // This test verifies that the type of T is more specific than Type, 4399 // This test verifies that the type of T is more specific than Type,
4400 // where T is a type parameter and Type is the type Type from 4400 // where T is a type parameter and Type is the type Type from
4401 // core, this particular test case comes from issue 18468. 4401 // core, this particular test case comes from issue 18468.
4402 // 4402 //
4403 // A test cannot be added to TypeParameterTypeImplTest since the types 4403 // A test cannot be added to TypeParameterTypeImplTest since the types
4404 // returned out of the TestTypeProvider don't have a mock 'dart.core' 4404 // returned out of the TestTypeProvider don't have a mock 'dart.core'
4405 // enclosing library element. 4405 // enclosing library element.
4406 // See TypeParameterTypeImpl.isMoreSpecificThan(). 4406 // See TypeParameterTypeImpl.isMoreSpecificThan().
4407 Source source = addSource(r''' 4407 Source source = addSource(r'''
4408 class Foo<T> { 4408 class Foo<T> {
4409 Type get t => T; 4409 Type get t => T;
4410 }'''); 4410 }''');
4411 resolve(source); 4411 computeLibrarySourceErrors(source);
4412 assertErrors(source); 4412 assertErrors(source);
4413 verify([source]); 4413 verify([source]);
4414 } 4414 }
4415 4415
4416 void test_returnOfInvalidType_void() { 4416 void test_returnOfInvalidType_void() {
4417 Source source = addSource(r''' 4417 Source source = addSource(r'''
4418 void f1() {} 4418 void f1() {}
4419 void f2() { return; } 4419 void f2() { return; }
4420 void f3() { return null; } 4420 void f3() { return null; }
4421 void f4() { return g1(); } 4421 void f4() { return g1(); }
4422 void f5() { return g2(); } 4422 void f5() { return g2(); }
4423 g1() {} 4423 g1() {}
4424 void g2() {} 4424 void g2() {}
4425 '''); 4425 ''');
4426 resolve(source); 4426 computeLibrarySourceErrors(source);
4427 assertNoErrors(source); 4427 assertNoErrors(source);
4428 verify([source]); 4428 verify([source]);
4429 } 4429 }
4430 4430
4431 void test_returnWithoutValue_noReturnType() { 4431 void test_returnWithoutValue_noReturnType() {
4432 Source source = addSource("f() { return; }"); 4432 Source source = addSource("f() { return; }");
4433 resolve(source); 4433 computeLibrarySourceErrors(source);
4434 assertNoErrors(source); 4434 assertNoErrors(source);
4435 verify([source]); 4435 verify([source]);
4436 } 4436 }
4437 4437
4438 void test_returnWithoutValue_void() { 4438 void test_returnWithoutValue_void() {
4439 Source source = addSource("void f() { return; }"); 4439 Source source = addSource("void f() { return; }");
4440 resolve(source); 4440 computeLibrarySourceErrors(source);
4441 assertNoErrors(source); 4441 assertNoErrors(source);
4442 verify([source]); 4442 verify([source]);
4443 } 4443 }
4444 4444
4445 void test_reversedTypeArguments() { 4445 void test_reversedTypeArguments() {
4446 Source source = addSource(r''' 4446 Source source = addSource(r'''
4447 class Codec<S1, T1> { 4447 class Codec<S1, T1> {
4448 Codec<T1, S1> get inverted => new _InvertedCodec<T1, S1>(this); 4448 Codec<T1, S1> get inverted => new _InvertedCodec<T1, S1>(this);
4449 } 4449 }
4450 class _InvertedCodec<T2, S2> extends Codec<T2, S2> { 4450 class _InvertedCodec<T2, S2> extends Codec<T2, S2> {
4451 _InvertedCodec(Codec<S2, T2> codec); 4451 _InvertedCodec(Codec<S2, T2> codec);
4452 }'''); 4452 }''');
4453 resolve(source); 4453 computeLibrarySourceErrors(source);
4454 assertNoErrors(source); 4454 assertNoErrors(source);
4455 verify([source]); 4455 verify([source]);
4456 } 4456 }
4457 4457
4458 void test_sharedDeferredPrefix() { 4458 void test_sharedDeferredPrefix() {
4459 resolveWithErrors(<String>[ 4459 resolveWithErrors(<String>[
4460 r''' 4460 r'''
4461 library lib1; 4461 library lib1;
4462 f1() {}''', 4462 f1() {}''',
4463 r''' 4463 r'''
(...skipping 12 matching lines...) Expand all
4476 } 4476 }
4477 4477
4478 void test_staticAccessToInstanceMember_annotation() { 4478 void test_staticAccessToInstanceMember_annotation() {
4479 Source source = addSource(r''' 4479 Source source = addSource(r'''
4480 class A { 4480 class A {
4481 const A.name(); 4481 const A.name();
4482 } 4482 }
4483 @A.name() 4483 @A.name()
4484 main() { 4484 main() {
4485 }'''); 4485 }''');
4486 resolve(source); 4486 computeLibrarySourceErrors(source);
4487 assertNoErrors(source); 4487 assertNoErrors(source);
4488 verify([source]); 4488 verify([source]);
4489 } 4489 }
4490 4490
4491 void test_staticAccessToInstanceMember_method() { 4491 void test_staticAccessToInstanceMember_method() {
4492 Source source = addSource(r''' 4492 Source source = addSource(r'''
4493 class A { 4493 class A {
4494 static m() {} 4494 static m() {}
4495 } 4495 }
4496 main() { 4496 main() {
4497 A.m; 4497 A.m;
4498 A.m(); 4498 A.m();
4499 }'''); 4499 }''');
4500 resolve(source); 4500 computeLibrarySourceErrors(source);
4501 assertNoErrors(source); 4501 assertNoErrors(source);
4502 verify([source]); 4502 verify([source]);
4503 } 4503 }
4504 4504
4505 void test_staticAccessToInstanceMember_propertyAccess_field() { 4505 void test_staticAccessToInstanceMember_propertyAccess_field() {
4506 Source source = addSource(r''' 4506 Source source = addSource(r'''
4507 class A { 4507 class A {
4508 static var f; 4508 static var f;
4509 } 4509 }
4510 main() { 4510 main() {
4511 A.f; 4511 A.f;
4512 A.f = 1; 4512 A.f = 1;
4513 }'''); 4513 }''');
4514 resolve(source); 4514 computeLibrarySourceErrors(source);
4515 assertNoErrors(source); 4515 assertNoErrors(source);
4516 verify([source]); 4516 verify([source]);
4517 } 4517 }
4518 4518
4519 void test_staticAccessToInstanceMember_propertyAccess_propertyAccessor() { 4519 void test_staticAccessToInstanceMember_propertyAccess_propertyAccessor() {
4520 Source source = addSource(r''' 4520 Source source = addSource(r'''
4521 class A { 4521 class A {
4522 static get f => 42; 4522 static get f => 42;
4523 static set f(x) {} 4523 static set f(x) {}
4524 } 4524 }
4525 main() { 4525 main() {
4526 A.f; 4526 A.f;
4527 A.f = 1; 4527 A.f = 1;
4528 }'''); 4528 }''');
4529 resolve(source); 4529 computeLibrarySourceErrors(source);
4530 assertNoErrors(source); 4530 assertNoErrors(source);
4531 verify([source]); 4531 verify([source]);
4532 } 4532 }
4533 4533
4534 void test_superInInvalidContext() { 4534 void test_superInInvalidContext() {
4535 Source source = addSource(r''' 4535 Source source = addSource(r'''
4536 class A { 4536 class A {
4537 m() {} 4537 m() {}
4538 } 4538 }
4539 class B extends A { 4539 class B extends A {
4540 B() { 4540 B() {
4541 var v = super.m(); 4541 var v = super.m();
4542 } 4542 }
4543 n() { 4543 n() {
4544 var v = super.m(); 4544 var v = super.m();
4545 } 4545 }
4546 }'''); 4546 }''');
4547 resolve(source); 4547 computeLibrarySourceErrors(source);
4548 assertNoErrors(source); 4548 assertNoErrors(source);
4549 verify([source]); 4549 verify([source]);
4550 } 4550 }
4551 4551
4552 void test_typeAliasCannotReferenceItself_returnClass_withTypeAlias() { 4552 void test_typeAliasCannotReferenceItself_returnClass_withTypeAlias() {
4553 Source source = addSource(r''' 4553 Source source = addSource(r'''
4554 typedef B A(); 4554 typedef B A();
4555 class B { 4555 class B {
4556 A a; 4556 A a;
4557 }'''); 4557 }''');
4558 resolve(source); 4558 computeLibrarySourceErrors(source);
4559 assertNoErrors(source); 4559 assertNoErrors(source);
4560 verify([source]); 4560 verify([source]);
4561 } 4561 }
4562 4562
4563 void test_typeArgumentNotMatchingBounds_const() { 4563 void test_typeArgumentNotMatchingBounds_const() {
4564 Source source = addSource(r''' 4564 Source source = addSource(r'''
4565 class A {} 4565 class A {}
4566 class B extends A {} 4566 class B extends A {}
4567 class G<E extends A> { 4567 class G<E extends A> {
4568 const G(); 4568 const G();
4569 } 4569 }
4570 f() { return const G<B>(); }'''); 4570 f() { return const G<B>(); }''');
4571 resolve(source); 4571 computeLibrarySourceErrors(source);
4572 assertNoErrors(source); 4572 assertNoErrors(source);
4573 verify([source]); 4573 verify([source]);
4574 } 4574 }
4575 4575
4576 void test_typeArgumentNotMatchingBounds_new() { 4576 void test_typeArgumentNotMatchingBounds_new() {
4577 Source source = addSource(r''' 4577 Source source = addSource(r'''
4578 class A {} 4578 class A {}
4579 class B extends A {} 4579 class B extends A {}
4580 class G<E extends A> {} 4580 class G<E extends A> {}
4581 f() { return new G<B>(); }'''); 4581 f() { return new G<B>(); }''');
4582 resolve(source); 4582 computeLibrarySourceErrors(source);
4583 assertNoErrors(source); 4583 assertNoErrors(source);
4584 verify([source]); 4584 verify([source]);
4585 } 4585 }
4586 4586
4587 void test_typeArgumentNotMatchingBounds_typeArgumentList_0() { 4587 void test_typeArgumentNotMatchingBounds_typeArgumentList_0() {
4588 Source source = addSource("abstract class A<T extends A>{}"); 4588 Source source = addSource("abstract class A<T extends A>{}");
4589 resolve(source); 4589 computeLibrarySourceErrors(source);
4590 assertNoErrors(source); 4590 assertNoErrors(source);
4591 verify([source]); 4591 verify([source]);
4592 } 4592 }
4593 4593
4594 void test_typeArgumentNotMatchingBounds_typeArgumentList_1() { 4594 void test_typeArgumentNotMatchingBounds_typeArgumentList_1() {
4595 Source source = addSource("abstract class A<T extends A<A>>{}"); 4595 Source source = addSource("abstract class A<T extends A<A>>{}");
4596 resolve(source); 4596 computeLibrarySourceErrors(source);
4597 assertNoErrors(source); 4597 assertNoErrors(source);
4598 verify([source]); 4598 verify([source]);
4599 } 4599 }
4600 4600
4601 void test_typeArgumentNotMatchingBounds_typeArgumentList_20() { 4601 void test_typeArgumentNotMatchingBounds_typeArgumentList_20() {
4602 Source source = addSource( 4602 Source source = addSource(
4603 "abstract class A<T extends A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A>>> >>>>>>>>>>>>>>>>>>{}"); 4603 "abstract class A<T extends A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A<A>>> >>>>>>>>>>>>>>>>>>{}");
4604 resolve(source); 4604 computeLibrarySourceErrors(source);
4605 assertNoErrors(source); 4605 assertNoErrors(source);
4606 verify([source]); 4606 verify([source]);
4607 } 4607 }
4608 4608
4609 void test_typePromotion_booleanAnd_useInRight() { 4609 void test_typePromotion_booleanAnd_useInRight() {
4610 Source source = addSource(r''' 4610 Source source = addSource(r'''
4611 main(Object p) { 4611 main(Object p) {
4612 p is String && p.length != 0; 4612 p is String && p.length != 0;
4613 }'''); 4613 }''');
4614 resolve(source); 4614 computeLibrarySourceErrors(source);
4615 assertNoErrors(source); 4615 assertNoErrors(source);
4616 verify([source]); 4616 verify([source]);
4617 } 4617 }
4618 4618
4619 void test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignm ent() { 4619 void test_typePromotion_booleanAnd_useInRight_accessedInClosureRight_noAssignm ent() {
4620 Source source = addSource(r''' 4620 Source source = addSource(r'''
4621 callMe(f()) { f(); } 4621 callMe(f()) { f(); }
4622 main(Object p) { 4622 main(Object p) {
4623 (p is String) && callMe(() { p.length; }); 4623 (p is String) && callMe(() { p.length; });
4624 }'''); 4624 }''');
4625 resolve(source); 4625 computeLibrarySourceErrors(source);
4626 assertNoErrors(source); 4626 assertNoErrors(source);
4627 verify([source]); 4627 verify([source]);
4628 } 4628 }
4629 4629
4630 void test_typePromotion_conditional_issue14655() { 4630 void test_typePromotion_conditional_issue14655() {
4631 Source source = addSource(r''' 4631 Source source = addSource(r'''
4632 class A {} 4632 class A {}
4633 class B extends A {} 4633 class B extends A {}
4634 class C extends B { 4634 class C extends B {
4635 mc() {} 4635 mc() {}
4636 } 4636 }
4637 print(_) {} 4637 print(_) {}
4638 main(A p) { 4638 main(A p) {
4639 (p is C) && (print(() => p) && (p is B)) ? p.mc() : p = null; 4639 (p is C) && (print(() => p) && (p is B)) ? p.mc() : p = null;
4640 }'''); 4640 }''');
4641 resolve(source); 4641 computeLibrarySourceErrors(source);
4642 assertNoErrors(source); 4642 assertNoErrors(source);
4643 verify([source]); 4643 verify([source]);
4644 } 4644 }
4645 4645
4646 void test_typePromotion_conditional_useInThen() { 4646 void test_typePromotion_conditional_useInThen() {
4647 Source source = addSource(r''' 4647 Source source = addSource(r'''
4648 main(Object p) { 4648 main(Object p) {
4649 p is String ? p.length : 0; 4649 p is String ? p.length : 0;
4650 }'''); 4650 }''');
4651 resolve(source); 4651 computeLibrarySourceErrors(source);
4652 assertNoErrors(source); 4652 assertNoErrors(source);
4653 verify([source]); 4653 verify([source]);
4654 } 4654 }
4655 4655
4656 void test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() { 4656 void test_typePromotion_conditional_useInThen_accessedInClosure_noAssignment() {
4657 Source source = addSource(r''' 4657 Source source = addSource(r'''
4658 callMe(f()) { f(); } 4658 callMe(f()) { f(); }
4659 main(Object p) { 4659 main(Object p) {
4660 p is String ? callMe(() { p.length; }) : 0; 4660 p is String ? callMe(() { p.length; }) : 0;
4661 }'''); 4661 }''');
4662 resolve(source); 4662 computeLibrarySourceErrors(source);
4663 assertNoErrors(source); 4663 assertNoErrors(source);
4664 verify([source]); 4664 verify([source]);
4665 } 4665 }
4666 4666
4667 void test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() { 4667 void test_typePromotion_functionType_arg_ignoreIfNotMoreSpecific() {
4668 Source source = addSource(r''' 4668 Source source = addSource(r'''
4669 typedef FuncB(B b); 4669 typedef FuncB(B b);
4670 typedef FuncA(A a); 4670 typedef FuncA(A a);
4671 class A {} 4671 class A {}
4672 class B {} 4672 class B {}
4673 main(FuncA f) { 4673 main(FuncA f) {
4674 if (f is FuncB) { 4674 if (f is FuncB) {
4675 f(new A()); 4675 f(new A());
4676 } 4676 }
4677 }'''); 4677 }''');
4678 resolve(source); 4678 computeLibrarySourceErrors(source);
4679 assertNoErrors(source); 4679 assertNoErrors(source);
4680 verify([source]); 4680 verify([source]);
4681 } 4681 }
4682 4682
4683 void test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() { 4683 void test_typePromotion_functionType_return_ignoreIfNotMoreSpecific() {
4684 Source source = addSource(r''' 4684 Source source = addSource(r'''
4685 class A {} 4685 class A {}
4686 typedef FuncAtoDyn(A a); 4686 typedef FuncAtoDyn(A a);
4687 typedef FuncDynToDyn(x); 4687 typedef FuncDynToDyn(x);
4688 main(FuncAtoDyn f) { 4688 main(FuncAtoDyn f) {
4689 if (f is FuncDynToDyn) { 4689 if (f is FuncDynToDyn) {
4690 A a = f(new A()); 4690 A a = f(new A());
4691 } 4691 }
4692 }'''); 4692 }''');
4693 resolve(source); 4693 computeLibrarySourceErrors(source);
4694 assertNoErrors(source); 4694 assertNoErrors(source);
4695 verify([source]); 4695 verify([source]);
4696 } 4696 }
4697 4697
4698 void test_typePromotion_functionType_return_voidToDynamic() { 4698 void test_typePromotion_functionType_return_voidToDynamic() {
4699 Source source = addSource(r''' 4699 Source source = addSource(r'''
4700 typedef FuncDynToDyn(x); 4700 typedef FuncDynToDyn(x);
4701 typedef void FuncDynToVoid(x); 4701 typedef void FuncDynToVoid(x);
4702 class A {} 4702 class A {}
4703 main(FuncDynToVoid f) { 4703 main(FuncDynToVoid f) {
4704 if (f is FuncDynToDyn) { 4704 if (f is FuncDynToDyn) {
4705 A a = f(null); 4705 A a = f(null);
4706 } 4706 }
4707 }'''); 4707 }''');
4708 resolve(source); 4708 computeLibrarySourceErrors(source);
4709 assertNoErrors(source); 4709 assertNoErrors(source);
4710 verify([source]); 4710 verify([source]);
4711 } 4711 }
4712 4712
4713 void test_typePromotion_if_accessedInClosure_noAssignment() { 4713 void test_typePromotion_if_accessedInClosure_noAssignment() {
4714 Source source = addSource(r''' 4714 Source source = addSource(r'''
4715 callMe(f()) { f(); } 4715 callMe(f()) { f(); }
4716 main(Object p) { 4716 main(Object p) {
4717 if (p is String) { 4717 if (p is String) {
4718 callMe(() { 4718 callMe(() {
4719 p.length; 4719 p.length;
4720 }); 4720 });
4721 } 4721 }
4722 }'''); 4722 }''');
4723 resolve(source); 4723 computeLibrarySourceErrors(source);
4724 assertNoErrors(source); 4724 assertNoErrors(source);
4725 verify([source]); 4725 verify([source]);
4726 } 4726 }
4727 4727
4728 void test_typePromotion_if_extends_moreSpecific() { 4728 void test_typePromotion_if_extends_moreSpecific() {
4729 Source source = addSource(r''' 4729 Source source = addSource(r'''
4730 class V {} 4730 class V {}
4731 class VP extends V {} 4731 class VP extends V {}
4732 class A<T> {} 4732 class A<T> {}
4733 class B<S> extends A<S> { 4733 class B<S> extends A<S> {
4734 var b; 4734 var b;
4735 } 4735 }
4736 4736
4737 main(A<V> p) { 4737 main(A<V> p) {
4738 if (p is B<VP>) { 4738 if (p is B<VP>) {
4739 p.b; 4739 p.b;
4740 } 4740 }
4741 }'''); 4741 }''');
4742 resolve(source); 4742 computeLibrarySourceErrors(source);
4743 assertNoErrors(source); 4743 assertNoErrors(source);
4744 verify([source]); 4744 verify([source]);
4745 } 4745 }
4746 4746
4747 void test_typePromotion_if_hasAssignment_outsideAfter() { 4747 void test_typePromotion_if_hasAssignment_outsideAfter() {
4748 Source source = addSource(r''' 4748 Source source = addSource(r'''
4749 main(Object p) { 4749 main(Object p) {
4750 if (p is String) { 4750 if (p is String) {
4751 p.length; 4751 p.length;
4752 } 4752 }
4753 p = 0; 4753 p = 0;
4754 }'''); 4754 }''');
4755 resolve(source); 4755 computeLibrarySourceErrors(source);
4756 assertNoErrors(source); 4756 assertNoErrors(source);
4757 verify([source]); 4757 verify([source]);
4758 } 4758 }
4759 4759
4760 void test_typePromotion_if_hasAssignment_outsideBefore() { 4760 void test_typePromotion_if_hasAssignment_outsideBefore() {
4761 Source source = addSource(r''' 4761 Source source = addSource(r'''
4762 main(Object p, Object p2) { 4762 main(Object p, Object p2) {
4763 p = p2; 4763 p = p2;
4764 if (p is String) { 4764 if (p is String) {
4765 p.length; 4765 p.length;
4766 } 4766 }
4767 }'''); 4767 }''');
4768 resolve(source); 4768 computeLibrarySourceErrors(source);
4769 assertNoErrors(source); 4769 assertNoErrors(source);
4770 verify([source]); 4770 verify([source]);
4771 } 4771 }
4772 4772
4773 void test_typePromotion_if_implements_moreSpecific() { 4773 void test_typePromotion_if_implements_moreSpecific() {
4774 Source source = addSource(r''' 4774 Source source = addSource(r'''
4775 class V {} 4775 class V {}
4776 class VP extends V {} 4776 class VP extends V {}
4777 class A<T> {} 4777 class A<T> {}
4778 class B<S> implements A<S> { 4778 class B<S> implements A<S> {
4779 var b; 4779 var b;
4780 } 4780 }
4781 4781
4782 main(A<V> p) { 4782 main(A<V> p) {
4783 if (p is B<VP>) { 4783 if (p is B<VP>) {
4784 p.b; 4784 p.b;
4785 } 4785 }
4786 }'''); 4786 }''');
4787 resolve(source); 4787 computeLibrarySourceErrors(source);
4788 assertNoErrors(source); 4788 assertNoErrors(source);
4789 verify([source]); 4789 verify([source]);
4790 } 4790 }
4791 4791
4792 void test_typePromotion_if_inClosure_assignedAfter_inSameFunction() { 4792 void test_typePromotion_if_inClosure_assignedAfter_inSameFunction() {
4793 Source source = addSource(r''' 4793 Source source = addSource(r'''
4794 main() { 4794 main() {
4795 f(Object p) { 4795 f(Object p) {
4796 if (p is String) { 4796 if (p is String) {
4797 p.length; 4797 p.length;
4798 } 4798 }
4799 p = 0; 4799 p = 0;
4800 }; 4800 };
4801 }'''); 4801 }''');
4802 resolve(source); 4802 computeLibrarySourceErrors(source);
4803 assertNoErrors(source); 4803 assertNoErrors(source);
4804 verify([source]); 4804 verify([source]);
4805 } 4805 }
4806 4806
4807 void test_typePromotion_if_is_and_left() { 4807 void test_typePromotion_if_is_and_left() {
4808 Source source = addSource(r''' 4808 Source source = addSource(r'''
4809 bool tt() => true; 4809 bool tt() => true;
4810 main(Object p) { 4810 main(Object p) {
4811 if (p is String && tt()) { 4811 if (p is String && tt()) {
4812 p.length; 4812 p.length;
4813 } 4813 }
4814 }'''); 4814 }''');
4815 resolve(source); 4815 computeLibrarySourceErrors(source);
4816 assertNoErrors(source); 4816 assertNoErrors(source);
4817 verify([source]); 4817 verify([source]);
4818 } 4818 }
4819 4819
4820 void test_typePromotion_if_is_and_right() { 4820 void test_typePromotion_if_is_and_right() {
4821 Source source = addSource(r''' 4821 Source source = addSource(r'''
4822 bool tt() => true; 4822 bool tt() => true;
4823 main(Object p) { 4823 main(Object p) {
4824 if (tt() && p is String) { 4824 if (tt() && p is String) {
4825 p.length; 4825 p.length;
4826 } 4826 }
4827 }'''); 4827 }''');
4828 resolve(source); 4828 computeLibrarySourceErrors(source);
4829 assertNoErrors(source); 4829 assertNoErrors(source);
4830 verify([source]); 4830 verify([source]);
4831 } 4831 }
4832 4832
4833 void test_typePromotion_if_is_and_subThenSuper() { 4833 void test_typePromotion_if_is_and_subThenSuper() {
4834 Source source = addSource(r''' 4834 Source source = addSource(r'''
4835 class A { 4835 class A {
4836 var a; 4836 var a;
4837 } 4837 }
4838 class B extends A { 4838 class B extends A {
4839 var b; 4839 var b;
4840 } 4840 }
4841 main(Object p) { 4841 main(Object p) {
4842 if (p is B && p is A) { 4842 if (p is B && p is A) {
4843 p.a; 4843 p.a;
4844 p.b; 4844 p.b;
4845 } 4845 }
4846 }'''); 4846 }''');
4847 resolve(source); 4847 computeLibrarySourceErrors(source);
4848 assertNoErrors(source); 4848 assertNoErrors(source);
4849 verify([source]); 4849 verify([source]);
4850 } 4850 }
4851 4851
4852 void test_typePromotion_if_is_parenthesized() { 4852 void test_typePromotion_if_is_parenthesized() {
4853 Source source = addSource(r''' 4853 Source source = addSource(r'''
4854 main(Object p) { 4854 main(Object p) {
4855 if ((p is String)) { 4855 if ((p is String)) {
4856 p.length; 4856 p.length;
4857 } 4857 }
4858 }'''); 4858 }''');
4859 resolve(source); 4859 computeLibrarySourceErrors(source);
4860 assertNoErrors(source); 4860 assertNoErrors(source);
4861 verify([source]); 4861 verify([source]);
4862 } 4862 }
4863 4863
4864 void test_typePromotion_if_is_single() { 4864 void test_typePromotion_if_is_single() {
4865 Source source = addSource(r''' 4865 Source source = addSource(r'''
4866 main(Object p) { 4866 main(Object p) {
4867 if (p is String) { 4867 if (p is String) {
4868 p.length; 4868 p.length;
4869 } 4869 }
4870 }'''); 4870 }''');
4871 resolve(source); 4871 computeLibrarySourceErrors(source);
4872 assertNoErrors(source); 4872 assertNoErrors(source);
4873 verify([source]); 4873 verify([source]);
4874 } 4874 }
4875 4875
4876 void test_typePromotion_parentheses() { 4876 void test_typePromotion_parentheses() {
4877 Source source = addSource(r''' 4877 Source source = addSource(r'''
4878 main(Object p) { 4878 main(Object p) {
4879 (p is String) ? p.length : 0; 4879 (p is String) ? p.length : 0;
4880 (p) is String ? p.length : 0; 4880 (p) is String ? p.length : 0;
4881 ((p)) is String ? p.length : 0; 4881 ((p)) is String ? p.length : 0;
4882 ((p) is String) ? p.length : 0; 4882 ((p) is String) ? p.length : 0;
4883 }'''); 4883 }''');
4884 resolve(source); 4884 computeLibrarySourceErrors(source);
4885 assertNoErrors(source); 4885 assertNoErrors(source);
4886 verify([source]); 4886 verify([source]);
4887 } 4887 }
4888 4888
4889 void test_typeType_class() { 4889 void test_typeType_class() {
4890 Source source = addSource(r''' 4890 Source source = addSource(r'''
4891 class C {} 4891 class C {}
4892 f(Type t) {} 4892 f(Type t) {}
4893 main() { 4893 main() {
4894 f(C); 4894 f(C);
4895 }'''); 4895 }''');
4896 resolve(source); 4896 computeLibrarySourceErrors(source);
4897 assertNoErrors(source); 4897 assertNoErrors(source);
4898 verify([source]); 4898 verify([source]);
4899 } 4899 }
4900 4900
4901 void test_typeType_class_prefixed() { 4901 void test_typeType_class_prefixed() {
4902 addNamedSource("/lib.dart", r''' 4902 addNamedSource("/lib.dart", r'''
4903 library lib; 4903 library lib;
4904 class C {}'''); 4904 class C {}''');
4905 Source source = addSource(r''' 4905 Source source = addSource(r'''
4906 import 'lib.dart' as p; 4906 import 'lib.dart' as p;
4907 f(Type t) {} 4907 f(Type t) {}
4908 main() { 4908 main() {
4909 f(p.C); 4909 f(p.C);
4910 }'''); 4910 }''');
4911 resolve(source); 4911 computeLibrarySourceErrors(source);
4912 assertNoErrors(source); 4912 assertNoErrors(source);
4913 verify([source]); 4913 verify([source]);
4914 } 4914 }
4915 4915
4916 void test_typeType_functionTypeAlias() { 4916 void test_typeType_functionTypeAlias() {
4917 Source source = addSource(r''' 4917 Source source = addSource(r'''
4918 typedef F(); 4918 typedef F();
4919 f(Type t) {} 4919 f(Type t) {}
4920 main() { 4920 main() {
4921 f(F); 4921 f(F);
4922 }'''); 4922 }''');
4923 resolve(source); 4923 computeLibrarySourceErrors(source);
4924 assertNoErrors(source); 4924 assertNoErrors(source);
4925 verify([source]); 4925 verify([source]);
4926 } 4926 }
4927 4927
4928 void test_typeType_functionTypeAlias_prefixed() { 4928 void test_typeType_functionTypeAlias_prefixed() {
4929 addNamedSource("/lib.dart", r''' 4929 addNamedSource("/lib.dart", r'''
4930 library lib; 4930 library lib;
4931 typedef F();'''); 4931 typedef F();''');
4932 Source source = addSource(r''' 4932 Source source = addSource(r'''
4933 import 'lib.dart' as p; 4933 import 'lib.dart' as p;
4934 f(Type t) {} 4934 f(Type t) {}
4935 main() { 4935 main() {
4936 f(p.F); 4936 f(p.F);
4937 }'''); 4937 }''');
4938 resolve(source); 4938 computeLibrarySourceErrors(source);
4939 assertNoErrors(source); 4939 assertNoErrors(source);
4940 verify([source]); 4940 verify([source]);
4941 } 4941 }
4942 4942
4943 void test_undefinedConstructorInInitializer_explicit_named() { 4943 void test_undefinedConstructorInInitializer_explicit_named() {
4944 Source source = addSource(r''' 4944 Source source = addSource(r'''
4945 class A { 4945 class A {
4946 A.named() {} 4946 A.named() {}
4947 } 4947 }
4948 class B extends A { 4948 class B extends A {
4949 B() : super.named(); 4949 B() : super.named();
4950 }'''); 4950 }''');
4951 resolve(source); 4951 computeLibrarySourceErrors(source);
4952 assertNoErrors(source); 4952 assertNoErrors(source);
4953 verify([source]); 4953 verify([source]);
4954 } 4954 }
4955 4955
4956 void test_undefinedConstructorInInitializer_explicit_unnamed() { 4956 void test_undefinedConstructorInInitializer_explicit_unnamed() {
4957 Source source = addSource(r''' 4957 Source source = addSource(r'''
4958 class A { 4958 class A {
4959 A() {} 4959 A() {}
4960 } 4960 }
4961 class B extends A { 4961 class B extends A {
4962 B() : super(); 4962 B() : super();
4963 }'''); 4963 }''');
4964 resolve(source); 4964 computeLibrarySourceErrors(source);
4965 assertNoErrors(source); 4965 assertNoErrors(source);
4966 verify([source]); 4966 verify([source]);
4967 } 4967 }
4968 4968
4969 void test_undefinedConstructorInInitializer_hasOptionalParameters() { 4969 void test_undefinedConstructorInInitializer_hasOptionalParameters() {
4970 Source source = addSource(r''' 4970 Source source = addSource(r'''
4971 class A { 4971 class A {
4972 A([p]) {} 4972 A([p]) {}
4973 } 4973 }
4974 class B extends A { 4974 class B extends A {
4975 B(); 4975 B();
4976 }'''); 4976 }''');
4977 resolve(source); 4977 computeLibrarySourceErrors(source);
4978 assertNoErrors(source); 4978 assertNoErrors(source);
4979 verify([source]); 4979 verify([source]);
4980 } 4980 }
4981 4981
4982 void test_undefinedConstructorInInitializer_implicit() { 4982 void test_undefinedConstructorInInitializer_implicit() {
4983 Source source = addSource(r''' 4983 Source source = addSource(r'''
4984 class A { 4984 class A {
4985 A() {} 4985 A() {}
4986 } 4986 }
4987 class B extends A { 4987 class B extends A {
4988 B(); 4988 B();
4989 }'''); 4989 }''');
4990 resolve(source); 4990 computeLibrarySourceErrors(source);
4991 assertNoErrors(source); 4991 assertNoErrors(source);
4992 verify([source]); 4992 verify([source]);
4993 } 4993 }
4994 4994
4995 void test_undefinedConstructorInInitializer_implicit_typeAlias() { 4995 void test_undefinedConstructorInInitializer_implicit_typeAlias() {
4996 Source source = addSource(r''' 4996 Source source = addSource(r'''
4997 class M {} 4997 class M {}
4998 class A = Object with M; 4998 class A = Object with M;
4999 class B extends A { 4999 class B extends A {
5000 B(); 5000 B();
5001 }'''); 5001 }''');
5002 resolve(source); 5002 computeLibrarySourceErrors(source);
5003 assertNoErrors(source); 5003 assertNoErrors(source);
5004 verify([source]); 5004 verify([source]);
5005 } 5005 }
5006 5006
5007 void test_undefinedConstructorInInitializer_redirecting() { 5007 void test_undefinedConstructorInInitializer_redirecting() {
5008 Source source = addSource(r''' 5008 Source source = addSource(r'''
5009 class Foo { 5009 class Foo {
5010 Foo.ctor(); 5010 Foo.ctor();
5011 } 5011 }
5012 class Bar extends Foo { 5012 class Bar extends Foo {
5013 Bar() : this.ctor(); 5013 Bar() : this.ctor();
5014 Bar.ctor() : super.ctor(); 5014 Bar.ctor() : super.ctor();
5015 }'''); 5015 }''');
5016 resolve(source); 5016 computeLibrarySourceErrors(source);
5017 assertNoErrors(source); 5017 assertNoErrors(source);
5018 verify([source]); 5018 verify([source]);
5019 } 5019 }
5020 5020
5021 void test_undefinedGetter_typeLiteral_conditionalAccess() { 5021 void test_undefinedGetter_typeLiteral_conditionalAccess() {
5022 // When applied to a type literal, the conditional access operator '?.' can 5022 // When applied to a type literal, the conditional access operator '?.' can
5023 // be used to access instance getters of Type. 5023 // be used to access instance getters of Type.
5024 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); 5024 AnalysisOptionsImpl options = new AnalysisOptionsImpl();
5025 options.enableNullAwareOperators = true; 5025 options.enableNullAwareOperators = true;
5026 resetWithOptions(options); 5026 resetWithOptions(options);
5027 Source source = addSource(''' 5027 Source source = addSource('''
5028 class A {} 5028 class A {}
5029 f() => A?.hashCode; 5029 f() => A?.hashCode;
5030 '''); 5030 ''');
5031 resolve(source); 5031 computeLibrarySourceErrors(source);
5032 assertNoErrors(source); 5032 assertNoErrors(source);
5033 verify([source]); 5033 verify([source]);
5034 } 5034 }
5035 5035
5036 void test_undefinedGetter_typeSubstitution() { 5036 void test_undefinedGetter_typeSubstitution() {
5037 Source source = addSource(r''' 5037 Source source = addSource(r'''
5038 class A<E> { 5038 class A<E> {
5039 E element; 5039 E element;
5040 } 5040 }
5041 class B extends A<List> { 5041 class B extends A<List> {
5042 m() { 5042 m() {
5043 element.last; 5043 element.last;
5044 } 5044 }
5045 }'''); 5045 }''');
5046 resolve(source); 5046 computeLibrarySourceErrors(source);
5047 assertNoErrors(source); 5047 assertNoErrors(source);
5048 verify([source]); 5048 verify([source]);
5049 } 5049 }
5050 5050
5051 void test_undefinedIdentifier_hide() { 5051 void test_undefinedIdentifier_hide() {
5052 Source source = addSource(r''' 5052 Source source = addSource(r'''
5053 library L; 5053 library L;
5054 export 'lib1.dart' hide a;'''); 5054 export 'lib1.dart' hide a;''');
5055 addNamedSource("/lib1.dart", "library lib1;"); 5055 addNamedSource("/lib1.dart", "library lib1;");
5056 resolve(source); 5056 computeLibrarySourceErrors(source);
5057 assertNoErrors(source); 5057 assertNoErrors(source);
5058 verify([source]); 5058 verify([source]);
5059 } 5059 }
5060 5060
5061 void test_undefinedIdentifier_show() { 5061 void test_undefinedIdentifier_show() {
5062 Source source = addSource(r''' 5062 Source source = addSource(r'''
5063 library L; 5063 library L;
5064 export 'lib1.dart' show a;'''); 5064 export 'lib1.dart' show a;''');
5065 addNamedSource("/lib1.dart", "library lib1;"); 5065 addNamedSource("/lib1.dart", "library lib1;");
5066 resolve(source); 5066 computeLibrarySourceErrors(source);
5067 assertNoErrors(source); 5067 assertNoErrors(source);
5068 verify([source]); 5068 verify([source]);
5069 } 5069 }
5070 5070
5071 void test_undefinedIdentifier_synthetic_whenExpression() { 5071 void test_undefinedIdentifier_synthetic_whenExpression() {
5072 Source source = addSource(r''' 5072 Source source = addSource(r'''
5073 print(x) {} 5073 print(x) {}
5074 main() { 5074 main() {
5075 print(is String); 5075 print(is String);
5076 }'''); 5076 }''');
5077 resolve(source); 5077 computeLibrarySourceErrors(source);
5078 assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]); 5078 assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
5079 } 5079 }
5080 5080
5081 void test_undefinedIdentifier_synthetic_whenMethodName() { 5081 void test_undefinedIdentifier_synthetic_whenMethodName() {
5082 Source source = addSource(r''' 5082 Source source = addSource(r'''
5083 print(x) {} 5083 print(x) {}
5084 main(int p) { 5084 main(int p) {
5085 p.(); 5085 p.();
5086 }'''); 5086 }''');
5087 resolve(source); 5087 computeLibrarySourceErrors(source);
5088 assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]); 5088 assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
5089 } 5089 }
5090 5090
5091 void test_undefinedMethod_functionExpression_callMethod() { 5091 void test_undefinedMethod_functionExpression_callMethod() {
5092 Source source = addSource(r''' 5092 Source source = addSource(r'''
5093 main() { 5093 main() {
5094 (() => null).call(); 5094 (() => null).call();
5095 }'''); 5095 }''');
5096 resolve(source); 5096 computeLibrarySourceErrors(source);
5097 assertNoErrors(source); 5097 assertNoErrors(source);
5098 // A call to verify(source) fails as '.call()' isn't resolved. 5098 // A call to verify(source) fails as '.call()' isn't resolved.
5099 } 5099 }
5100 5100
5101 void test_undefinedMethod_functionExpression_directCall() { 5101 void test_undefinedMethod_functionExpression_directCall() {
5102 Source source = addSource(r''' 5102 Source source = addSource(r'''
5103 main() { 5103 main() {
5104 (() => null)(); 5104 (() => null)();
5105 }'''); 5105 }''');
5106 resolve(source); 5106 computeLibrarySourceErrors(source);
5107 assertNoErrors(source); 5107 assertNoErrors(source);
5108 // A call to verify(source) fails as '(() => null)()' isn't resolved. 5108 // A call to verify(source) fails as '(() => null)()' isn't resolved.
5109 } 5109 }
5110 5110
5111 void test_undefinedMethod_typeLiteral_conditionalAccess() { 5111 void test_undefinedMethod_typeLiteral_conditionalAccess() {
5112 // When applied to a type literal, the conditional access operator '?.' can 5112 // When applied to a type literal, the conditional access operator '?.' can
5113 // be used to access instance methods of Type. 5113 // be used to access instance methods of Type.
5114 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); 5114 AnalysisOptionsImpl options = new AnalysisOptionsImpl();
5115 options.enableNullAwareOperators = true; 5115 options.enableNullAwareOperators = true;
5116 resetWithOptions(options); 5116 resetWithOptions(options);
5117 Source source = addSource(''' 5117 Source source = addSource('''
5118 class A {} 5118 class A {}
5119 f() => A?.toString(); 5119 f() => A?.toString();
5120 '''); 5120 ''');
5121 resolve(source); 5121 computeLibrarySourceErrors(source);
5122 assertNoErrors(source); 5122 assertNoErrors(source);
5123 verify([source]); 5123 verify([source]);
5124 } 5124 }
5125 5125
5126 void test_undefinedOperator_index() { 5126 void test_undefinedOperator_index() {
5127 Source source = addSource(r''' 5127 Source source = addSource(r'''
5128 class A { 5128 class A {
5129 operator [](a) {} 5129 operator [](a) {}
5130 operator []=(a, b) {} 5130 operator []=(a, b) {}
5131 } 5131 }
5132 f(A a) { 5132 f(A a) {
5133 a[0]; 5133 a[0];
5134 a[0] = 1; 5134 a[0] = 1;
5135 }'''); 5135 }''');
5136 resolve(source); 5136 computeLibrarySourceErrors(source);
5137 assertNoErrors(source); 5137 assertNoErrors(source);
5138 verify([source]); 5138 verify([source]);
5139 } 5139 }
5140 5140
5141 void test_undefinedOperator_tilde() { 5141 void test_undefinedOperator_tilde() {
5142 Source source = addSource(r''' 5142 Source source = addSource(r'''
5143 const A = 3; 5143 const A = 3;
5144 const B = ~((1 << A) - 1);'''); 5144 const B = ~((1 << A) - 1);''');
5145 resolve(source); 5145 computeLibrarySourceErrors(source);
5146 assertNoErrors(source); 5146 assertNoErrors(source);
5147 verify([source]); 5147 verify([source]);
5148 } 5148 }
5149 5149
5150 void test_undefinedSetter_importWithPrefix() { 5150 void test_undefinedSetter_importWithPrefix() {
5151 addNamedSource("/lib.dart", r''' 5151 addNamedSource("/lib.dart", r'''
5152 library lib; 5152 library lib;
5153 set y(int value) {}'''); 5153 set y(int value) {}''');
5154 Source source = addSource(r''' 5154 Source source = addSource(r'''
5155 import 'lib.dart' as x; 5155 import 'lib.dart' as x;
5156 main() { 5156 main() {
5157 x.y = 0; 5157 x.y = 0;
5158 }'''); 5158 }''');
5159 resolve(source); 5159 computeLibrarySourceErrors(source);
5160 assertNoErrors(source); 5160 assertNoErrors(source);
5161 verify([source]); 5161 verify([source]);
5162 } 5162 }
5163 5163
5164 void test_undefinedSuperMethod_field() { 5164 void test_undefinedSuperMethod_field() {
5165 Source source = addSource(r''' 5165 Source source = addSource(r'''
5166 class A { 5166 class A {
5167 var m; 5167 var m;
5168 } 5168 }
5169 class B extends A { 5169 class B extends A {
5170 f() { 5170 f() {
5171 super.m(); 5171 super.m();
5172 } 5172 }
5173 }'''); 5173 }''');
5174 resolve(source); 5174 computeLibrarySourceErrors(source);
5175 assertNoErrors(source); 5175 assertNoErrors(source);
5176 verify([source]); 5176 verify([source]);
5177 } 5177 }
5178 5178
5179 void test_undefinedSuperMethod_method() { 5179 void test_undefinedSuperMethod_method() {
5180 Source source = addSource(r''' 5180 Source source = addSource(r'''
5181 class A { 5181 class A {
5182 m() {} 5182 m() {}
5183 } 5183 }
5184 class B extends A { 5184 class B extends A {
5185 f() { 5185 f() {
5186 super.m(); 5186 super.m();
5187 } 5187 }
5188 }'''); 5188 }''');
5189 resolve(source); 5189 computeLibrarySourceErrors(source);
5190 assertNoErrors(source); 5190 assertNoErrors(source);
5191 verify([source]); 5191 verify([source]);
5192 } 5192 }
5193 5193
5194 void test_unqualified_invocation_of_method_with_same_name_as_prefix() { 5194 void test_unqualified_invocation_of_method_with_same_name_as_prefix() {
5195 // If p is an import prefix, then within a method body, p() should be 5195 // If p is an import prefix, then within a method body, p() should be
5196 // considered equivalent to this.p(). 5196 // considered equivalent to this.p().
5197 addNamedSource("/lib.dart", r''' 5197 addNamedSource("/lib.dart", r'''
5198 library lib; 5198 library lib;
5199 '''); 5199 ''');
5200 Source source = addSource(r''' 5200 Source source = addSource(r'''
5201 import 'lib.dart' as p; 5201 import 'lib.dart' as p;
5202 class Base { 5202 class Base {
5203 p() {} 5203 p() {}
5204 } 5204 }
5205 class Derived extends Base { 5205 class Derived extends Base {
5206 f() { 5206 f() {
5207 p(); 5207 p();
5208 } 5208 }
5209 } 5209 }
5210 '''); 5210 ''');
5211 resolve(source); 5211 computeLibrarySourceErrors(source);
5212 assertErrors(source, [HintCode.UNUSED_IMPORT]); 5212 assertErrors(source, [HintCode.UNUSED_IMPORT]);
5213 verify([source]); 5213 verify([source]);
5214 } 5214 }
5215 5215
5216 void test_unqualifiedReferenceToNonLocalStaticMember_fromComment_new() { 5216 void test_unqualifiedReferenceToNonLocalStaticMember_fromComment_new() {
5217 Source source = addSource(r''' 5217 Source source = addSource(r'''
5218 class A { 5218 class A {
5219 A() {} 5219 A() {}
5220 A.named() {} 5220 A.named() {}
5221 } 5221 }
5222 /// [new A] or [new A.named] 5222 /// [new A] or [new A.named]
5223 main() { 5223 main() {
5224 }'''); 5224 }''');
5225 resolve(source); 5225 computeLibrarySourceErrors(source);
5226 assertNoErrors(source); 5226 assertNoErrors(source);
5227 verify([source]); 5227 verify([source]);
5228 } 5228 }
5229 5229
5230 void test_uriDoesNotExist_dll() { 5230 void test_uriDoesNotExist_dll() {
5231 addNamedSource("/lib.dll", ""); 5231 addNamedSource("/lib.dll", "");
5232 Source source = addSource("import 'dart-ext:lib';"); 5232 Source source = addSource("import 'dart-ext:lib';");
5233 resolve(source); 5233 computeLibrarySourceErrors(source);
5234 assertNoErrors(source); 5234 assertNoErrors(source);
5235 } 5235 }
5236 5236
5237 void test_uriDoesNotExist_dylib() { 5237 void test_uriDoesNotExist_dylib() {
5238 addNamedSource("/lib.dylib", ""); 5238 addNamedSource("/lib.dylib", "");
5239 Source source = addSource("import 'dart-ext:lib';"); 5239 Source source = addSource("import 'dart-ext:lib';");
5240 resolve(source); 5240 computeLibrarySourceErrors(source);
5241 assertNoErrors(source); 5241 assertNoErrors(source);
5242 } 5242 }
5243 5243
5244 void test_uriDoesNotExist_so() { 5244 void test_uriDoesNotExist_so() {
5245 addNamedSource("/lib.so", ""); 5245 addNamedSource("/lib.so", "");
5246 Source source = addSource("import 'dart-ext:lib';"); 5246 Source source = addSource("import 'dart-ext:lib';");
5247 resolve(source); 5247 computeLibrarySourceErrors(source);
5248 assertNoErrors(source); 5248 assertNoErrors(source);
5249 } 5249 }
5250 5250
5251 void test_wrongNumberOfParametersForOperator1() { 5251 void test_wrongNumberOfParametersForOperator1() {
5252 _check_wrongNumberOfParametersForOperator1("<"); 5252 _check_wrongNumberOfParametersForOperator1("<");
5253 _check_wrongNumberOfParametersForOperator1(">"); 5253 _check_wrongNumberOfParametersForOperator1(">");
5254 _check_wrongNumberOfParametersForOperator1("<="); 5254 _check_wrongNumberOfParametersForOperator1("<=");
5255 _check_wrongNumberOfParametersForOperator1(">="); 5255 _check_wrongNumberOfParametersForOperator1(">=");
5256 _check_wrongNumberOfParametersForOperator1("+"); 5256 _check_wrongNumberOfParametersForOperator1("+");
5257 _check_wrongNumberOfParametersForOperator1("/"); 5257 _check_wrongNumberOfParametersForOperator1("/");
5258 _check_wrongNumberOfParametersForOperator1("~/"); 5258 _check_wrongNumberOfParametersForOperator1("~/");
5259 _check_wrongNumberOfParametersForOperator1("*"); 5259 _check_wrongNumberOfParametersForOperator1("*");
5260 _check_wrongNumberOfParametersForOperator1("%"); 5260 _check_wrongNumberOfParametersForOperator1("%");
5261 _check_wrongNumberOfParametersForOperator1("|"); 5261 _check_wrongNumberOfParametersForOperator1("|");
5262 _check_wrongNumberOfParametersForOperator1("^"); 5262 _check_wrongNumberOfParametersForOperator1("^");
5263 _check_wrongNumberOfParametersForOperator1("&"); 5263 _check_wrongNumberOfParametersForOperator1("&");
5264 _check_wrongNumberOfParametersForOperator1("<<"); 5264 _check_wrongNumberOfParametersForOperator1("<<");
5265 _check_wrongNumberOfParametersForOperator1(">>"); 5265 _check_wrongNumberOfParametersForOperator1(">>");
5266 _check_wrongNumberOfParametersForOperator1("[]"); 5266 _check_wrongNumberOfParametersForOperator1("[]");
5267 } 5267 }
5268 5268
5269 void test_wrongNumberOfParametersForOperator_index() { 5269 void test_wrongNumberOfParametersForOperator_index() {
5270 Source source = addSource(r''' 5270 Source source = addSource(r'''
5271 class A { 5271 class A {
5272 operator []=(a, b) {} 5272 operator []=(a, b) {}
5273 }'''); 5273 }''');
5274 resolve(source); 5274 computeLibrarySourceErrors(source);
5275 assertNoErrors(source); 5275 assertNoErrors(source);
5276 verify([source]); 5276 verify([source]);
5277 } 5277 }
5278 5278
5279 void test_wrongNumberOfParametersForOperator_minus() { 5279 void test_wrongNumberOfParametersForOperator_minus() {
5280 _check_wrongNumberOfParametersForOperator("-", ""); 5280 _check_wrongNumberOfParametersForOperator("-", "");
5281 _check_wrongNumberOfParametersForOperator("-", "a"); 5281 _check_wrongNumberOfParametersForOperator("-", "a");
5282 } 5282 }
5283 5283
5284 void test_wrongNumberOfParametersForSetter() { 5284 void test_wrongNumberOfParametersForSetter() {
5285 Source source = addSource(r''' 5285 Source source = addSource(r'''
5286 class A { 5286 class A {
5287 set x(a) {} 5287 set x(a) {}
5288 }'''); 5288 }''');
5289 resolve(source); 5289 computeLibrarySourceErrors(source);
5290 assertNoErrors(source); 5290 assertNoErrors(source);
5291 verify([source]); 5291 verify([source]);
5292 } 5292 }
5293 5293
5294 void test_yield_async_to_dynamic_type() { 5294 void test_yield_async_to_dynamic_type() {
5295 Source source = addSource(''' 5295 Source source = addSource('''
5296 dynamic f() async* { 5296 dynamic f() async* {
5297 yield 3; 5297 yield 3;
5298 } 5298 }
5299 '''); 5299 ''');
5300 resolve(source); 5300 computeLibrarySourceErrors(source);
5301 assertNoErrors(source); 5301 assertNoErrors(source);
5302 verify([source]); 5302 verify([source]);
5303 } 5303 }
5304 5304
5305 void test_yield_async_to_generic_type() { 5305 void test_yield_async_to_generic_type() {
5306 Source source = addSource(''' 5306 Source source = addSource('''
5307 import 'dart:async'; 5307 import 'dart:async';
5308 Stream f() async* { 5308 Stream f() async* {
5309 yield 3; 5309 yield 3;
5310 } 5310 }
5311 '''); 5311 ''');
5312 resolve(source); 5312 computeLibrarySourceErrors(source);
5313 assertNoErrors(source); 5313 assertNoErrors(source);
5314 verify([source]); 5314 verify([source]);
5315 } 5315 }
5316 5316
5317 void test_yield_async_to_parameterized_type() { 5317 void test_yield_async_to_parameterized_type() {
5318 Source source = addSource(''' 5318 Source source = addSource('''
5319 import 'dart:async'; 5319 import 'dart:async';
5320 Stream<int> f() async* { 5320 Stream<int> f() async* {
5321 yield 3; 5321 yield 3;
5322 } 5322 }
5323 '''); 5323 ''');
5324 resolve(source); 5324 computeLibrarySourceErrors(source);
5325 assertNoErrors(source); 5325 assertNoErrors(source);
5326 verify([source]); 5326 verify([source]);
5327 } 5327 }
5328 5328
5329 void test_yield_async_to_untyped() { 5329 void test_yield_async_to_untyped() {
5330 Source source = addSource(''' 5330 Source source = addSource('''
5331 f() async* { 5331 f() async* {
5332 yield 3; 5332 yield 3;
5333 } 5333 }
5334 '''); 5334 ''');
5335 resolve(source); 5335 computeLibrarySourceErrors(source);
5336 assertNoErrors(source); 5336 assertNoErrors(source);
5337 verify([source]); 5337 verify([source]);
5338 } 5338 }
5339 5339
5340 void test_yield_each_async_dynamic_to_dynamic() { 5340 void test_yield_each_async_dynamic_to_dynamic() {
5341 Source source = addSource(''' 5341 Source source = addSource('''
5342 f() async* { 5342 f() async* {
5343 yield* g(); 5343 yield* g();
5344 } 5344 }
5345 g() => null; 5345 g() => null;
5346 '''); 5346 ''');
5347 resolve(source); 5347 computeLibrarySourceErrors(source);
5348 assertNoErrors(source); 5348 assertNoErrors(source);
5349 verify([source]); 5349 verify([source]);
5350 } 5350 }
5351 5351
5352 void test_yield_each_async_dynamic_to_stream() { 5352 void test_yield_each_async_dynamic_to_stream() {
5353 Source source = addSource(''' 5353 Source source = addSource('''
5354 import 'dart:async'; 5354 import 'dart:async';
5355 Stream f() async* { 5355 Stream f() async* {
5356 yield* g(); 5356 yield* g();
5357 } 5357 }
5358 g() => null; 5358 g() => null;
5359 '''); 5359 ''');
5360 resolve(source); 5360 computeLibrarySourceErrors(source);
5361 assertNoErrors(source); 5361 assertNoErrors(source);
5362 verify([source]); 5362 verify([source]);
5363 } 5363 }
5364 5364
5365 void test_yield_each_async_dynamic_to_typed_stream() { 5365 void test_yield_each_async_dynamic_to_typed_stream() {
5366 Source source = addSource(''' 5366 Source source = addSource('''
5367 import 'dart:async'; 5367 import 'dart:async';
5368 Stream<int> f() async* { 5368 Stream<int> f() async* {
5369 yield* g(); 5369 yield* g();
5370 } 5370 }
5371 g() => null; 5371 g() => null;
5372 '''); 5372 ''');
5373 resolve(source); 5373 computeLibrarySourceErrors(source);
5374 assertNoErrors(source); 5374 assertNoErrors(source);
5375 verify([source]); 5375 verify([source]);
5376 } 5376 }
5377 5377
5378 void test_yield_each_async_stream_to_dynamic() { 5378 void test_yield_each_async_stream_to_dynamic() {
5379 Source source = addSource(''' 5379 Source source = addSource('''
5380 import 'dart:async'; 5380 import 'dart:async';
5381 f() async* { 5381 f() async* {
5382 yield* g(); 5382 yield* g();
5383 } 5383 }
5384 Stream g() => null; 5384 Stream g() => null;
5385 '''); 5385 ''');
5386 resolve(source); 5386 computeLibrarySourceErrors(source);
5387 assertNoErrors(source); 5387 assertNoErrors(source);
5388 verify([source]); 5388 verify([source]);
5389 } 5389 }
5390 5390
5391 void test_yield_each_async_typed_stream_to_dynamic() { 5391 void test_yield_each_async_typed_stream_to_dynamic() {
5392 Source source = addSource(''' 5392 Source source = addSource('''
5393 import 'dart:async'; 5393 import 'dart:async';
5394 f() async* { 5394 f() async* {
5395 yield* g(); 5395 yield* g();
5396 } 5396 }
5397 Stream<int> g() => null; 5397 Stream<int> g() => null;
5398 '''); 5398 ''');
5399 resolve(source); 5399 computeLibrarySourceErrors(source);
5400 assertNoErrors(source); 5400 assertNoErrors(source);
5401 verify([source]); 5401 verify([source]);
5402 } 5402 }
5403 5403
5404 void test_yield_each_async_typed_stream_to_typed_stream() { 5404 void test_yield_each_async_typed_stream_to_typed_stream() {
5405 Source source = addSource(''' 5405 Source source = addSource('''
5406 import 'dart:async'; 5406 import 'dart:async';
5407 Stream<int> f() async* { 5407 Stream<int> f() async* {
5408 yield* g(); 5408 yield* g();
5409 } 5409 }
5410 Stream<int> g() => null; 5410 Stream<int> g() => null;
5411 '''); 5411 ''');
5412 resolve(source); 5412 computeLibrarySourceErrors(source);
5413 assertNoErrors(source); 5413 assertNoErrors(source);
5414 verify([source]); 5414 verify([source]);
5415 } 5415 }
5416 5416
5417 void test_yield_each_sync_dynamic_to_dynamic() { 5417 void test_yield_each_sync_dynamic_to_dynamic() {
5418 Source source = addSource(''' 5418 Source source = addSource('''
5419 f() sync* { 5419 f() sync* {
5420 yield* g(); 5420 yield* g();
5421 } 5421 }
5422 g() => null; 5422 g() => null;
5423 '''); 5423 ''');
5424 resolve(source); 5424 computeLibrarySourceErrors(source);
5425 assertNoErrors(source); 5425 assertNoErrors(source);
5426 verify([source]); 5426 verify([source]);
5427 } 5427 }
5428 5428
5429 void test_yield_each_sync_dynamic_to_iterable() { 5429 void test_yield_each_sync_dynamic_to_iterable() {
5430 Source source = addSource(''' 5430 Source source = addSource('''
5431 Iterable f() sync* { 5431 Iterable f() sync* {
5432 yield* g(); 5432 yield* g();
5433 } 5433 }
5434 g() => null; 5434 g() => null;
5435 '''); 5435 ''');
5436 resolve(source); 5436 computeLibrarySourceErrors(source);
5437 assertNoErrors(source); 5437 assertNoErrors(source);
5438 verify([source]); 5438 verify([source]);
5439 } 5439 }
5440 5440
5441 void test_yield_each_sync_dynamic_to_typed_iterable() { 5441 void test_yield_each_sync_dynamic_to_typed_iterable() {
5442 Source source = addSource(''' 5442 Source source = addSource('''
5443 Iterable<int> f() sync* { 5443 Iterable<int> f() sync* {
5444 yield* g(); 5444 yield* g();
5445 } 5445 }
5446 g() => null; 5446 g() => null;
5447 '''); 5447 ''');
5448 resolve(source); 5448 computeLibrarySourceErrors(source);
5449 assertNoErrors(source); 5449 assertNoErrors(source);
5450 verify([source]); 5450 verify([source]);
5451 } 5451 }
5452 5452
5453 void test_yield_each_sync_iterable_to_dynamic() { 5453 void test_yield_each_sync_iterable_to_dynamic() {
5454 Source source = addSource(''' 5454 Source source = addSource('''
5455 f() sync* { 5455 f() sync* {
5456 yield* g(); 5456 yield* g();
5457 } 5457 }
5458 Iterable g() => null; 5458 Iterable g() => null;
5459 '''); 5459 ''');
5460 resolve(source); 5460 computeLibrarySourceErrors(source);
5461 assertNoErrors(source); 5461 assertNoErrors(source);
5462 verify([source]); 5462 verify([source]);
5463 } 5463 }
5464 5464
5465 void test_yield_each_sync_typed_iterable_to_dynamic() { 5465 void test_yield_each_sync_typed_iterable_to_dynamic() {
5466 Source source = addSource(''' 5466 Source source = addSource('''
5467 f() sync* { 5467 f() sync* {
5468 yield* g(); 5468 yield* g();
5469 } 5469 }
5470 Iterable<int> g() => null; 5470 Iterable<int> g() => null;
5471 '''); 5471 ''');
5472 resolve(source); 5472 computeLibrarySourceErrors(source);
5473 assertNoErrors(source); 5473 assertNoErrors(source);
5474 verify([source]); 5474 verify([source]);
5475 } 5475 }
5476 5476
5477 void test_yield_each_sync_typed_iterable_to_typed_iterable() { 5477 void test_yield_each_sync_typed_iterable_to_typed_iterable() {
5478 Source source = addSource(''' 5478 Source source = addSource('''
5479 Iterable<int> f() sync* { 5479 Iterable<int> f() sync* {
5480 yield* g(); 5480 yield* g();
5481 } 5481 }
5482 Iterable<int> g() => null; 5482 Iterable<int> g() => null;
5483 '''); 5483 ''');
5484 resolve(source); 5484 computeLibrarySourceErrors(source);
5485 assertNoErrors(source); 5485 assertNoErrors(source);
5486 verify([source]); 5486 verify([source]);
5487 } 5487 }
5488 5488
5489 void test_yield_sync_to_dynamic_type() { 5489 void test_yield_sync_to_dynamic_type() {
5490 Source source = addSource(''' 5490 Source source = addSource('''
5491 dynamic f() sync* { 5491 dynamic f() sync* {
5492 yield 3; 5492 yield 3;
5493 } 5493 }
5494 '''); 5494 ''');
5495 resolve(source); 5495 computeLibrarySourceErrors(source);
5496 assertNoErrors(source); 5496 assertNoErrors(source);
5497 verify([source]); 5497 verify([source]);
5498 } 5498 }
5499 5499
5500 void test_yield_sync_to_generic_type() { 5500 void test_yield_sync_to_generic_type() {
5501 Source source = addSource(''' 5501 Source source = addSource('''
5502 Iterable f() sync* { 5502 Iterable f() sync* {
5503 yield 3; 5503 yield 3;
5504 } 5504 }
5505 '''); 5505 ''');
5506 resolve(source); 5506 computeLibrarySourceErrors(source);
5507 assertNoErrors(source); 5507 assertNoErrors(source);
5508 verify([source]); 5508 verify([source]);
5509 } 5509 }
5510 5510
5511 void test_yield_sync_to_parameterized_type() { 5511 void test_yield_sync_to_parameterized_type() {
5512 Source source = addSource(''' 5512 Source source = addSource('''
5513 Iterable<int> f() sync* { 5513 Iterable<int> f() sync* {
5514 yield 3; 5514 yield 3;
5515 } 5515 }
5516 '''); 5516 ''');
5517 resolve(source); 5517 computeLibrarySourceErrors(source);
5518 assertNoErrors(source); 5518 assertNoErrors(source);
5519 verify([source]); 5519 verify([source]);
5520 } 5520 }
5521 5521
5522 void test_yield_sync_to_untyped() { 5522 void test_yield_sync_to_untyped() {
5523 Source source = addSource(''' 5523 Source source = addSource('''
5524 f() sync* { 5524 f() sync* {
5525 yield 3; 5525 yield 3;
5526 } 5526 }
5527 '''); 5527 ''');
5528 resolve(source); 5528 computeLibrarySourceErrors(source);
5529 assertNoErrors(source); 5529 assertNoErrors(source);
5530 verify([source]); 5530 verify([source]);
5531 } 5531 }
5532 5532
5533 void test_yieldInNonGenerator_asyncStar() { 5533 void test_yieldInNonGenerator_asyncStar() {
5534 Source source = addSource(r''' 5534 Source source = addSource(r'''
5535 f() async* { 5535 f() async* {
5536 yield 0; 5536 yield 0;
5537 }'''); 5537 }''');
5538 resolve(source); 5538 computeLibrarySourceErrors(source);
5539 assertNoErrors(source); 5539 assertNoErrors(source);
5540 verify([source]); 5540 verify([source]);
5541 } 5541 }
5542 5542
5543 void test_yieldInNonGenerator_syncStar() { 5543 void test_yieldInNonGenerator_syncStar() {
5544 Source source = addSource(r''' 5544 Source source = addSource(r'''
5545 f() sync* { 5545 f() sync* {
5546 yield 0; 5546 yield 0;
5547 }'''); 5547 }''');
5548 resolve(source); 5548 computeLibrarySourceErrors(source);
5549 assertNoErrors(source); 5549 assertNoErrors(source);
5550 verify([source]); 5550 verify([source]);
5551 } 5551 }
5552 5552
5553 void _check_wrongNumberOfParametersForOperator( 5553 void _check_wrongNumberOfParametersForOperator(
5554 String name, String parameters) { 5554 String name, String parameters) {
5555 Source source = addSource(""" 5555 Source source = addSource("""
5556 class A { 5556 class A {
5557 operator $name($parameters) {} 5557 operator $name($parameters) {}
5558 }"""); 5558 }""");
5559 resolve(source); 5559 computeLibrarySourceErrors(source);
5560 assertNoErrors(source); 5560 assertNoErrors(source);
5561 verify([source]); 5561 verify([source]);
5562 reset(); 5562 reset();
5563 } 5563 }
5564 5564
5565 void _check_wrongNumberOfParametersForOperator1(String name) { 5565 void _check_wrongNumberOfParametersForOperator1(String name) {
5566 _check_wrongNumberOfParametersForOperator(name, "a"); 5566 _check_wrongNumberOfParametersForOperator(name, "a");
5567 } 5567 }
5568 5568
5569 CompilationUnit _getResolvedLibraryUnit(Source source) => 5569 CompilationUnit _getResolvedLibraryUnit(Source source) =>
5570 analysisContext.getResolvedCompilationUnit2(source, source); 5570 analysisContext.getResolvedCompilationUnit2(source, source);
5571 } 5571 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/incremental_resolver_test.dart ('k') | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698