OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import 'package:analyzer/dart/element/type.dart'; | 5 import 'package:analyzer/dart/element/type.dart'; |
6 import 'package:analyzer/src/dart/element/element.dart'; | 6 import 'package:analyzer/src/dart/element/element.dart'; |
7 import 'package:analyzer/src/summary/format.dart'; | 7 import 'package:analyzer/src/summary/format.dart'; |
8 import 'package:analyzer/src/summary/idl.dart'; | 8 import 'package:analyzer/src/summary/idl.dart'; |
9 import 'package:analyzer/src/summary/link.dart'; | 9 import 'package:analyzer/src/summary/link.dart'; |
10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 ''' | 187 ''' |
188 var x = () {}; | 188 var x = () {}; |
189 ''', | 189 ''', |
190 path: '/a.dart'); | 190 path: '/a.dart'); |
191 addBundle(bundle); | 191 addBundle(bundle); |
192 createLinker(''' | 192 createLinker(''' |
193 import 'a.dart'; | 193 import 'a.dart'; |
194 var y = x; | 194 var y = x; |
195 '''); | 195 '''); |
196 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 196 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
197 expect( | 197 expect(_getVariable(library.getContainedName('y')).inferredType.toString(), |
198 library | |
199 .getContainedName('y') | |
200 .asTypeInferenceNode | |
201 .variableElement | |
202 .inferredType | |
203 .toString(), | |
204 '() → dynamic'); | 198 '() → dynamic'); |
205 } | 199 } |
206 | 200 |
207 void test_inferredType_instanceField_dynamic() { | 201 void test_inferredType_instanceField_dynamic() { |
208 createLinker(''' | 202 createLinker(''' |
209 var x; | 203 var x; |
210 class C { | 204 class C { |
211 var f = x; // Inferred type: dynamic | 205 var f = x; // Inferred type: dynamic |
212 } | 206 } |
213 '''); | 207 '''); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 } | 264 } |
271 | 265 |
272 void test_inferredType_staticField_dynamic() { | 266 void test_inferredType_staticField_dynamic() { |
273 createLinker(''' | 267 createLinker(''' |
274 dynamic x = null; | 268 dynamic x = null; |
275 class C { | 269 class C { |
276 static var y = x; | 270 static var y = x; |
277 } | 271 } |
278 '''); | 272 '''); |
279 expect( | 273 expect( |
280 linker | 274 _getVariable(linker |
281 .getLibrary(linkerInputs.testDartUri) | 275 .getLibrary(linkerInputs.testDartUri) |
282 .getContainedName('C') | 276 .getContainedName('C') |
283 .getContainedName('y') | 277 .getContainedName('y')) |
284 .asTypeInferenceNode | |
285 .variableElement | |
286 .inferredType | 278 .inferredType |
287 .toString(), | 279 .toString(), |
288 'dynamic'); | 280 'dynamic'); |
289 } | 281 } |
290 | 282 |
291 void test_inferredType_topLevelVariable_dynamic() { | 283 void test_inferredType_topLevelVariable_dynamic() { |
292 createLinker(''' | 284 createLinker(''' |
293 dynamic x = null; | 285 dynamic x = null; |
294 var y = x; | 286 var y = x; |
295 '''); | 287 '''); |
296 expect( | 288 expect( |
297 linker | 289 _getVariable(linker |
298 .getLibrary(linkerInputs.testDartUri) | 290 .getLibrary(linkerInputs.testDartUri) |
299 .getContainedName('y') | 291 .getContainedName('y')) |
300 .asTypeInferenceNode | |
301 .variableElement | |
302 .inferredType | 292 .inferredType |
303 .toString(), | 293 .toString(), |
304 'dynamic'); | 294 'dynamic'); |
305 } | 295 } |
306 | 296 |
307 void test_inferredTypeFromOutsideBuildUnit_dynamic() { | 297 void test_inferredTypeFromOutsideBuildUnit_dynamic() { |
308 var bundle = createPackageBundle( | 298 var bundle = createPackageBundle( |
309 ''' | 299 ''' |
310 var x; | 300 var x; |
311 var y = x; // Inferred type: dynamic | 301 var y = x; // Inferred type: dynamic |
312 ''', | 302 ''', |
313 path: '/a.dart'); | 303 path: '/a.dart'); |
314 addBundle(bundle); | 304 addBundle(bundle); |
315 createLinker(''' | 305 createLinker(''' |
316 import 'a.dart'; | 306 import 'a.dart'; |
317 var z = y; // Inferred type: dynamic | 307 var z = y; // Inferred type: dynamic |
318 '''); | 308 '''); |
319 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 309 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
320 expect( | 310 expect(_getVariable(library.getContainedName('z')).inferredType.toString(), |
321 library | |
322 .getContainedName('z') | |
323 .asTypeInferenceNode | |
324 .variableElement | |
325 .inferredType | |
326 .toString(), | |
327 'dynamic'); | 311 'dynamic'); |
328 } | 312 } |
329 | 313 |
330 void test_inferredTypeFromOutsideBuildUnit_instanceField() { | 314 void test_inferredTypeFromOutsideBuildUnit_instanceField() { |
331 var bundle = createPackageBundle( | 315 var bundle = createPackageBundle( |
332 ''' | 316 ''' |
333 class C { | 317 class C { |
334 var f = 0; // Inferred type: int | 318 var f = 0; // Inferred type: int |
335 } | 319 } |
336 ''', | 320 ''', |
337 path: '/a.dart'); | 321 path: '/a.dart'); |
338 addBundle(bundle); | 322 addBundle(bundle); |
339 createLinker(''' | 323 createLinker(''' |
340 import 'a.dart'; | 324 import 'a.dart'; |
341 var x = new C().f; // Inferred type: int | 325 var x = new C().f; // Inferred type: int |
342 '''); | 326 '''); |
343 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 327 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
344 expect( | 328 expect(_getVariable(library.getContainedName('x')).inferredType.toString(), |
345 library | |
346 .getContainedName('x') | |
347 .asTypeInferenceNode | |
348 .variableElement | |
349 .inferredType | |
350 .toString(), | |
351 'int'); | 329 'int'); |
352 } | 330 } |
353 | 331 |
354 void test_inferredTypeFromOutsideBuildUnit_instanceField_toInstanceField() { | 332 void test_inferredTypeFromOutsideBuildUnit_instanceField_toInstanceField() { |
355 var bundle = createPackageBundle( | 333 var bundle = createPackageBundle( |
356 ''' | 334 ''' |
357 class C { | 335 class C { |
358 var f = 0; // Inferred type: int | 336 var f = 0; // Inferred type: int |
359 } | 337 } |
360 ''', | 338 ''', |
(...skipping 20 matching lines...) Expand all Loading... |
381 f<T>(t) => t; // Inferred param type: T | 359 f<T>(t) => t; // Inferred param type: T |
382 } | 360 } |
383 ''', | 361 ''', |
384 path: '/a.dart'); | 362 path: '/a.dart'); |
385 addBundle(bundle); | 363 addBundle(bundle); |
386 createLinker(''' | 364 createLinker(''' |
387 import 'a.dart'; | 365 import 'a.dart'; |
388 var x = new C().f(0); // Inferred type: int | 366 var x = new C().f(0); // Inferred type: int |
389 '''); | 367 '''); |
390 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 368 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
391 expect( | 369 expect(_getVariable(library.getContainedName('x')).inferredType.toString(), |
392 library | |
393 .getContainedName('x') | |
394 .asTypeInferenceNode | |
395 .variableElement | |
396 .inferredType | |
397 .toString(), | |
398 'int'); | 370 'int'); |
399 } | 371 } |
400 | 372 |
401 void test_inferredTypeFromOutsideBuildUnit_methodParamType_viaInheritance() { | 373 void test_inferredTypeFromOutsideBuildUnit_methodParamType_viaInheritance() { |
402 var bundle = createPackageBundle( | 374 var bundle = createPackageBundle( |
403 ''' | 375 ''' |
404 class B { | 376 class B { |
405 void f(int i) {} | 377 void f(int i) {} |
406 } | 378 } |
407 class C extends B { | 379 class C extends B { |
(...skipping 27 matching lines...) Expand all Loading... |
435 f() => 1; // Inferred return type: int | 407 f() => 1; // Inferred return type: int |
436 } | 408 } |
437 ''', | 409 ''', |
438 path: '/a.dart'); | 410 path: '/a.dart'); |
439 addBundle(bundle); | 411 addBundle(bundle); |
440 createLinker(''' | 412 createLinker(''' |
441 import 'a.dart'; | 413 import 'a.dart'; |
442 var x = new C().f(); // Inferred type: int | 414 var x = new C().f(); // Inferred type: int |
443 '''); | 415 '''); |
444 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 416 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
445 expect( | 417 expect(_getVariable(library.getContainedName('x')).inferredType.toString(), |
446 library | |
447 .getContainedName('x') | |
448 .asTypeInferenceNode | |
449 .variableElement | |
450 .inferredType | |
451 .toString(), | |
452 'int'); | 418 'int'); |
453 } | 419 } |
454 | 420 |
455 void test_inferredTypeFromOutsideBuildUnit_methodReturnType_viaInheritance() { | 421 void test_inferredTypeFromOutsideBuildUnit_methodReturnType_viaInheritance() { |
456 var bundle = createPackageBundle( | 422 var bundle = createPackageBundle( |
457 ''' | 423 ''' |
458 class B { | 424 class B { |
459 int f() => 0; | 425 int f() => 0; |
460 } | 426 } |
461 class C extends B { | 427 class C extends B { |
(...skipping 14 matching lines...) Expand all Loading... |
476 expect(cls.methods, hasLength(1)); | 442 expect(cls.methods, hasLength(1)); |
477 expect(cls.methods[0].returnType.toString(), 'int'); | 443 expect(cls.methods[0].returnType.toString(), 'int'); |
478 } | 444 } |
479 | 445 |
480 void test_inferredTypeFromOutsideBuildUnit_staticField() { | 446 void test_inferredTypeFromOutsideBuildUnit_staticField() { |
481 var bundle = | 447 var bundle = |
482 createPackageBundle('class C { static var f = 0; }', path: '/a.dart'); | 448 createPackageBundle('class C { static var f = 0; }', path: '/a.dart'); |
483 addBundle(bundle); | 449 addBundle(bundle); |
484 createLinker('import "a.dart"; var x = C.f;', path: '/b.dart'); | 450 createLinker('import "a.dart"; var x = C.f;', path: '/b.dart'); |
485 expect( | 451 expect( |
486 linker | 452 _getVariable(linker |
487 .getLibrary(linkerInputs.testDartUri) | 453 .getLibrary(linkerInputs.testDartUri) |
488 .getContainedName('x') | 454 .getContainedName('x')) |
489 .asTypeInferenceNode | |
490 .variableElement | |
491 .inferredType | 455 .inferredType |
492 .toString(), | 456 .toString(), |
493 'int'); | 457 'int'); |
494 } | 458 } |
495 | 459 |
496 void test_inferredTypeFromOutsideBuildUnit_topLevelVariable() { | 460 void test_inferredTypeFromOutsideBuildUnit_topLevelVariable() { |
497 var bundle = createPackageBundle('var a = 0;', path: '/a.dart'); | 461 var bundle = createPackageBundle('var a = 0;', path: '/a.dart'); |
498 addBundle(bundle); | 462 addBundle(bundle); |
499 createLinker('import "a.dart"; var b = a;', path: '/b.dart'); | 463 createLinker('import "a.dart"; var b = a;', path: '/b.dart'); |
500 expect( | 464 expect( |
501 linker | 465 _getVariable(linker |
502 .getLibrary(linkerInputs.testDartUri) | 466 .getLibrary(linkerInputs.testDartUri) |
503 .getContainedName('b') | 467 .getContainedName('b')) |
504 .asTypeInferenceNode | |
505 .variableElement | |
506 .inferredType | 468 .inferredType |
507 .toString(), | 469 .toString(), |
508 'int'); | 470 'int'); |
509 } | 471 } |
510 | 472 |
511 void test_instantiate_param_of_param_to_bounds() { | 473 void test_instantiate_param_of_param_to_bounds() { |
512 createLinker(''' | 474 createLinker(''' |
513 class C<T> {} | 475 class C<T> {} |
514 class D<T extends num> {} | 476 class D<T extends num> {} |
515 final x = new C<D>(); | 477 final x = new C<D>(); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 if (ref.kind == ReferenceKind.function) { | 629 if (ref.kind == ReferenceKind.function) { |
668 ref.localIndex = 1234; | 630 ref.localIndex = 1234; |
669 } | 631 } |
670 } | 632 } |
671 addBundle(bundle); | 633 addBundle(bundle); |
672 createLinker(''' | 634 createLinker(''' |
673 import 'a.dart'; | 635 import 'a.dart'; |
674 var y = x; | 636 var y = x; |
675 '''); | 637 '''); |
676 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 638 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
677 expect( | 639 expect(_getVariable(library.getContainedName('y')).inferredType.toString(), |
678 library | |
679 .getContainedName('y') | |
680 .asTypeInferenceNode | |
681 .variableElement | |
682 .inferredType | |
683 .toString(), | |
684 'dynamic'); | 640 'dynamic'); |
685 } | 641 } |
686 | 642 |
687 void test_multiplyInheritedExecutable_differentSignatures() { | 643 void test_multiplyInheritedExecutable_differentSignatures() { |
688 createLinker(''' | 644 createLinker(''' |
689 class B { | 645 class B { |
690 void f() {} | 646 void f() {} |
691 } | 647 } |
692 abstract class I { | 648 abstract class I { |
693 f(); | 649 f(); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); | 772 LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri); |
817 PropertyAccessorElementForLink_Variable c = library.getContainedName('c'); | 773 PropertyAccessorElementForLink_Variable c = library.getContainedName('c'); |
818 expect(c.variable.initializer, isNotNull); | 774 expect(c.variable.initializer, isNotNull); |
819 PropertyAccessorElementForLink_Variable i = library.getContainedName('i'); | 775 PropertyAccessorElementForLink_Variable i = library.getContainedName('i'); |
820 expect(i.variable.initializer, isNotNull); | 776 expect(i.variable.initializer, isNotNull); |
821 PropertyAccessorElementForLink_Variable j = library.getContainedName('j'); | 777 PropertyAccessorElementForLink_Variable j = library.getContainedName('j'); |
822 expect(j.variable.initializer, isNull); | 778 expect(j.variable.initializer, isNull); |
823 PropertyAccessorElementForLink_Variable v = library.getContainedName('v'); | 779 PropertyAccessorElementForLink_Variable v = library.getContainedName('v'); |
824 expect(v.variable.initializer, isNotNull); | 780 expect(v.variable.initializer, isNotNull); |
825 } | 781 } |
| 782 |
| 783 VariableElementForLink _getVariable(ReferenceableElementForLink element) { |
| 784 return (element as PropertyAccessorElementForLink_Variable).variable; |
| 785 } |
826 } | 786 } |
OLD | NEW |