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

Side by Side Diff: pkg/analyzer/test/src/task/strong_mode_test.dart

Issue 1311433005: Integrate recent parameter override logic (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Address comments Created 5 years, 3 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 test.src.task.strong_mode_test; 5 library test.src.task.strong_mode_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/source.dart'; 9 import 'package:analyzer/src/generated/source.dart';
10 import 'package:analyzer/src/task/strong_mode.dart'; 10 import 'package:analyzer/src/task/strong_mode.dart';
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 PropertyAccessorElement getterC = classC.getGetter(fieldName); 99 PropertyAccessorElement getterC = classC.getGetter(fieldName);
100 expect(fieldC.type.isDynamic, isTrue); 100 expect(fieldC.type.isDynamic, isTrue);
101 expect(getterC.returnType.isDynamic, isTrue); 101 expect(getterC.returnType.isDynamic, isTrue);
102 102
103 inferrer.inferCompilationUnit(unit); 103 inferrer.inferCompilationUnit(unit);
104 104
105 expect(fieldC.type.isDynamic, isTrue); 105 expect(fieldC.type.isDynamic, isTrue);
106 expect(getterC.returnType.isDynamic, isTrue); 106 expect(getterC.returnType.isDynamic, isTrue);
107 } 107 }
108 108
109 void test_inferCompilationUnit_field_multiple_different_generic() {
110 InstanceMemberInferrer inferrer = createInferrer;
111 String fieldName = 'f';
112 CompilationUnitElement unit = resolve('''
113 class A<E> {
114 E $fieldName;
115 }
116 class B<E> {
117 E $fieldName;
118 }
119 class C implements A<int>, B<double> {
120 var $fieldName;
121 }
122 ''');
123 ClassElement classC = unit.getType('C');
124 FieldElement fieldC = classC.getField(fieldName);
125 PropertyAccessorElement getterC = classC.getGetter(fieldName);
126 expect(fieldC.type.isDynamic, isTrue);
127 expect(getterC.returnType.isDynamic, isTrue);
128
129 inferrer.inferCompilationUnit(unit);
130
131 expect(fieldC.type.isDynamic, isTrue);
132 expect(getterC.returnType.isDynamic, isTrue);
133 }
134
109 void test_inferCompilationUnit_field_multiple_dynamic() { 135 void test_inferCompilationUnit_field_multiple_dynamic() {
110 InstanceMemberInferrer inferrer = createInferrer; 136 InstanceMemberInferrer inferrer = createInferrer;
111 String fieldName = 'f'; 137 String fieldName = 'f';
112 CompilationUnitElement unit = resolve(''' 138 CompilationUnitElement unit = resolve('''
113 class A { 139 class A {
114 int $fieldName; 140 int $fieldName;
115 } 141 }
116 class B { 142 class B {
117 var $fieldName; 143 var $fieldName;
118 } 144 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 PropertyAccessorElement getterB = classB.getGetter(fieldName); 273 PropertyAccessorElement getterB = classB.getGetter(fieldName);
248 expect(fieldB.type.isDynamic, isTrue); 274 expect(fieldB.type.isDynamic, isTrue);
249 expect(getterB.returnType.isDynamic, isTrue); 275 expect(getterB.returnType.isDynamic, isTrue);
250 276
251 inferrer.inferCompilationUnit(unit); 277 inferrer.inferCompilationUnit(unit);
252 278
253 expect(fieldB.type, fieldA.type); 279 expect(fieldB.type, fieldA.type);
254 expect(getterB.returnType, getterA.returnType); 280 expect(getterB.returnType, getterA.returnType);
255 } 281 }
256 282
283 void test_inferCompilationUnit_field_single_generic() {
284 InstanceMemberInferrer inferrer = createInferrer;
285 String fieldName = 'f';
286 CompilationUnitElement unit = resolve('''
287 class A<E> {
288 E $fieldName;
289 }
290 class B<E> extends A<E> {
291 var $fieldName;
292 }
293 ''');
294 ClassElement classB = unit.getType('B');
295 DartType typeBE = classB.typeParameters[0].type;
296 FieldElement fieldB = classB.getField(fieldName);
297 PropertyAccessorElement getterB = classB.getGetter(fieldName);
298 expect(fieldB.type.isDynamic, isTrue);
299 expect(getterB.returnType.isDynamic, isTrue);
300
301 inferrer.inferCompilationUnit(unit);
302
303 expect(fieldB.type, typeBE);
304 expect(getterB.returnType, typeBE);
305 }
306
257 void test_inferCompilationUnit_field_single_inconsistentAccessors() { 307 void test_inferCompilationUnit_field_single_inconsistentAccessors() {
258 InstanceMemberInferrer inferrer = createInferrer; 308 InstanceMemberInferrer inferrer = createInferrer;
259 String fieldName = 'f'; 309 String fieldName = 'f';
260 CompilationUnitElement unit = resolve(''' 310 CompilationUnitElement unit = resolve('''
261 class A { 311 class A {
262 int get $fieldName => 0; 312 int get $fieldName => 0;
263 set $fieldName(String value) {} 313 set $fieldName(String value) {}
264 } 314 }
265 class B extends A { 315 class B extends A {
266 var $fieldName; 316 var $fieldName;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 PropertyAccessorElement getterB = classB.getGetter(getterName); 454 PropertyAccessorElement getterB = classB.getGetter(getterName);
405 expect(fieldB.type.isDynamic, isTrue); 455 expect(fieldB.type.isDynamic, isTrue);
406 expect(getterB.returnType.isDynamic, isTrue); 456 expect(getterB.returnType.isDynamic, isTrue);
407 457
408 inferrer.inferCompilationUnit(unit); 458 inferrer.inferCompilationUnit(unit);
409 459
410 expect(fieldB.type, fieldA.type); 460 expect(fieldB.type, fieldA.type);
411 expect(getterB.returnType, getterA.returnType); 461 expect(getterB.returnType, getterA.returnType);
412 } 462 }
413 463
464 void test_inferCompilationUnit_getter_single_generic() {
465 InstanceMemberInferrer inferrer = createInferrer;
466 String getterName = 'g';
467 CompilationUnitElement unit = resolve('''
468 class A<E> {
469 E get $getterName => 0;
470 }
471 class B<E> extends A<E> {
472 get $getterName => 0;
473 }
474 ''');
475 ClassElement classB = unit.getType('B');
476 DartType typeBE = classB.typeParameters[0].type;
477 FieldElement fieldB = classB.getField(getterName);
478 PropertyAccessorElement getterB = classB.getGetter(getterName);
479 expect(fieldB.type.isDynamic, isTrue);
480 expect(getterB.returnType.isDynamic, isTrue);
481
482 inferrer.inferCompilationUnit(unit);
483
484 expect(fieldB.type, typeBE);
485 expect(getterB.returnType, typeBE);
486 }
487
414 void test_inferCompilationUnit_getter_single_inconsistentAccessors() { 488 void test_inferCompilationUnit_getter_single_inconsistentAccessors() {
415 InstanceMemberInferrer inferrer = createInferrer; 489 InstanceMemberInferrer inferrer = createInferrer;
416 String getterName = 'g'; 490 String getterName = 'g';
417 CompilationUnitElement unit = resolve(''' 491 CompilationUnitElement unit = resolve('''
418 class A { 492 class A {
419 int get $getterName => 0; 493 int get $getterName => 0;
420 set $getterName(String value) {} 494 set $getterName(String value) {}
421 } 495 }
422 class B extends A { 496 class B extends A {
423 var get $getterName => 1; 497 var get $getterName => 1;
(...skipping 14 matching lines...) Expand all
438 void test_inferCompilationUnit_invalid_inheritanceCycle() { 512 void test_inferCompilationUnit_invalid_inheritanceCycle() {
439 InstanceMemberInferrer inferrer = createInferrer; 513 InstanceMemberInferrer inferrer = createInferrer;
440 CompilationUnitElement unit = resolve(''' 514 CompilationUnitElement unit = resolve('''
441 class A extends C {} 515 class A extends C {}
442 class B extends A {} 516 class B extends A {}
443 class C extends B {} 517 class C extends B {}
444 '''); 518 ''');
445 inferrer.inferCompilationUnit(unit); 519 inferrer.inferCompilationUnit(unit);
446 } 520 }
447 521
448 void test_inferCompilationUnit_method_multiple_different() { 522 void test_inferCompilationUnit_method_parameter_multiple_different() {
449 InstanceMemberInferrer inferrer = createInferrer; 523 InstanceMemberInferrer inferrer = createInferrer;
450 String methodName = 'm'; 524 String methodName = 'm';
451 CompilationUnitElement unit = resolve(''' 525 CompilationUnitElement unit = resolve('''
526 class A {
527 $methodName(int p) => 0;
528 }
529 class B {
530 $methodName(double p) => 0;
531 }
532 class C implements A, B {
533 $methodName(p) => 0;
534 }
535 ''');
536 ClassElement classC = unit.getType('C');
537 MethodElement methodC = classC.getMethod(methodName);
538 ParameterElement parameterC = methodC.parameters[0];
539 expect(parameterC.type.isDynamic, isTrue);
540
541 inferrer.inferCompilationUnit(unit);
542
543 expect(parameterC.type.isDynamic, isTrue);
544 }
545
546 void test_inferCompilationUnit_method_parameter_multiple_named_different() {
547 InstanceMemberInferrer inferrer = createInferrer;
548 String methodName = 'm';
549 CompilationUnitElement unit = resolve('''
550 class A {
551 $methodName({int p}) => 0;
552 }
553 class B {
554 $methodName({int q}) => 0;
555 }
556 class C implements A, B {
557 $methodName({p}) => 0;
558 }
559 ''');
560 ClassElement classC = unit.getType('C');
561 MethodElement methodC = classC.getMethod(methodName);
562 ParameterElement parameterC = methodC.parameters[0];
563 expect(parameterC.type.isDynamic, isTrue);
564
565 inferrer.inferCompilationUnit(unit);
566
567 expect(parameterC.type.isDynamic, isTrue);
568 }
569
570 void test_inferCompilationUnit_method_parameter_multiple_named_same() {
571 InstanceMemberInferrer inferrer = createInferrer;
572 String methodName = 'm';
573 CompilationUnitElement unit = resolve('''
574 class A {
575 $methodName({int p}) => 0;
576 }
577 class B {
578 $methodName({int p}) => 0;
579 }
580 class C implements A, B {
581 $methodName({p}) => 0;
582 }
583 ''');
584 ClassElement classA = unit.getType('A');
585 MethodElement methodA = classA.getMethod(methodName);
586 ParameterElement parameterA = methodA.parameters[0];
587 DartType expectedType = parameterA.type;
588 ClassElement classC = unit.getType('C');
589 MethodElement methodC = classC.getMethod(methodName);
590 ParameterElement parameterC = methodC.parameters[0];
591 expect(parameterC.type.isDynamic, isTrue);
592
593 inferrer.inferCompilationUnit(unit);
594
595 expect(parameterC.type, expectedType);
596 }
597
598 void test_inferCompilationUnit_method_parameter_multiple_namedAndRequired() {
599 InstanceMemberInferrer inferrer = createInferrer;
600 String methodName = 'm';
601 CompilationUnitElement unit = resolve('''
602 class A {
603 $methodName({int p}) => 0;
604 }
605 class B {
606 $methodName(int p) => 0;
607 }
608 class C implements A, B {
609 $methodName(p) => 0;
610 }
611 ''');
612 ClassElement classC = unit.getType('C');
613 MethodElement methodC = classC.getMethod(methodName);
614 ParameterElement parameterC = methodC.parameters[0];
615 expect(parameterC.type.isDynamic, isTrue);
616
617 inferrer.inferCompilationUnit(unit);
618
619 expect(parameterC.type.isDynamic, isTrue);
620 }
621
622 void test_inferCompilationUnit_method_parameter_multiple_optionalAndRequired() {
623 InstanceMemberInferrer inferrer = createInferrer;
624 String methodName = 'm';
625 CompilationUnitElement unit = resolve('''
626 class A {
627 $methodName(int p) => 0;
628 }
629 class B {
630 $methodName([int p]) => 0;
631 }
632 class C implements A, B {
633 $methodName(p) => 0;
634 }
635 ''');
636 ClassElement classA = unit.getType('A');
637 MethodElement methodA = classA.getMethod(methodName);
638 ParameterElement parameterA = methodA.parameters[0];
639 DartType expectedType = parameterA.type;
640 ClassElement classC = unit.getType('C');
641 MethodElement methodC = classC.getMethod(methodName);
642 ParameterElement parameterC = methodC.parameters[0];
643 expect(parameterC.type.isDynamic, isTrue);
644
645 inferrer.inferCompilationUnit(unit);
646
647 expect(parameterC.type, expectedType);
648 }
649
650 void test_inferCompilationUnit_method_parameter_single_generic() {
651 InstanceMemberInferrer inferrer = createInferrer;
652 String methodName = 'm';
653 CompilationUnitElement unit = resolve('''
654 class A<E> {
655 $methodName(E p) => 0;
656 }
657 class C<E> implements A<E> {
658 $methodName(p) => 0;
659 }
660 ''');
661 ClassElement classC = unit.getType('C');
662 MethodElement methodC = classC.getMethod(methodName);
663 ParameterElement parameterC = methodC.parameters[0];
664 expect(parameterC.type.isDynamic, isTrue);
665
666 inferrer.inferCompilationUnit(unit);
667
668 expect(parameterC.type, classC.typeParameters[0].type);
669 }
670
671 void test_inferCompilationUnit_method_return_multiple_different() {
672 InstanceMemberInferrer inferrer = createInferrer;
673 String methodName = 'm';
674 CompilationUnitElement unit = resolve('''
452 class A { 675 class A {
453 int $methodName() => 0; 676 int $methodName() => 0;
454 } 677 }
455 class B { 678 class B {
456 double $methodName() => 0.0; 679 double $methodName() => 0.0;
457 } 680 }
458 class C implements A, B { 681 class C implements A, B {
459 $methodName() => 0; 682 $methodName() => 0;
460 } 683 }
461 '''); 684 ''');
462 ClassElement classC = unit.getType('C'); 685 ClassElement classC = unit.getType('C');
463 MethodElement methodC = classC.getMethod(methodName); 686 MethodElement methodC = classC.getMethod(methodName);
464 expect(methodC.returnType.isDynamic, isTrue); 687 expect(methodC.returnType.isDynamic, isTrue);
465 688
466 inferrer.inferCompilationUnit(unit); 689 inferrer.inferCompilationUnit(unit);
467 690
468 expect(methodC.returnType.isDynamic, isTrue); 691 expect(methodC.returnType.isDynamic, isTrue);
469 } 692 }
470 693
471 void test_inferCompilationUnit_method_multiple_dynamic() { 694 void test_inferCompilationUnit_method_return_multiple_different_generic() {
472 InstanceMemberInferrer inferrer = createInferrer; 695 InstanceMemberInferrer inferrer = createInferrer;
473 String methodName = 'm'; 696 String methodName = 'm';
474 CompilationUnitElement unit = resolve(''' 697 CompilationUnitElement unit = resolve('''
698 class A<E> {
699 E $methodName() => null;
700 }
701 class B<E> {
702 E $methodName() => null;
703 }
704 class C implements A<int>, B<double> {
705 $methodName() => null;
706 }
707 ''');
708 ClassElement classC = unit.getType('C');
709 MethodElement methodC = classC.getMethod(methodName);
710 expect(methodC.returnType.isDynamic, isTrue);
711
712 inferrer.inferCompilationUnit(unit);
713
714 expect(methodC.returnType.isDynamic, isTrue);
715 }
716
717 void test_inferCompilationUnit_method_return_multiple_dynamic() {
718 InstanceMemberInferrer inferrer = createInferrer;
719 String methodName = 'm';
720 CompilationUnitElement unit = resolve('''
475 class A { 721 class A {
476 int $methodName() => 0; 722 int $methodName() => 0;
477 } 723 }
478 class B { 724 class B {
479 $methodName() => 0; 725 $methodName() => 0;
480 } 726 }
481 class C implements A, B { 727 class C implements A, B {
482 $methodName() => 0; 728 $methodName() => 0;
483 } 729 }
484 '''); 730 ''');
485 ClassElement classC = unit.getType('C'); 731 ClassElement classC = unit.getType('C');
486 MethodElement methodC = classC.getMethod(methodName); 732 MethodElement methodC = classC.getMethod(methodName);
487 expect(methodC.returnType.isDynamic, isTrue); 733 expect(methodC.returnType.isDynamic, isTrue);
488 734
489 inferrer.inferCompilationUnit(unit); 735 inferrer.inferCompilationUnit(unit);
490 736
491 expect(methodC.returnType.isDynamic, isTrue); 737 expect(methodC.returnType.isDynamic, isTrue);
492 } 738 }
493 739
494 void test_inferCompilationUnit_method_multiple_same_nonVoid() { 740 void test_inferCompilationUnit_method_return_multiple_same_generic() {
495 InstanceMemberInferrer inferrer = createInferrer; 741 InstanceMemberInferrer inferrer = createInferrer;
496 String methodName = 'm'; 742 String methodName = 'm';
497 CompilationUnitElement unit = resolve(''' 743 CompilationUnitElement unit = resolve('''
744 class A<E> {
745 E $methodName() => 0;
746 }
747 class B<E> {
748 E $methodName() => 0;
749 }
750 class C<E> implements A<E>, B<E> {
751 $methodName() => 0;
752 }
753 ''');
754 ClassElement classC = unit.getType('C');
755 MethodElement methodC = classC.getMethod(methodName);
756 expect(methodC.returnType.isDynamic, isTrue);
757
758 inferrer.inferCompilationUnit(unit);
759
760 expect(methodC.returnType, classC.typeParameters[0].type);
761 }
762
763 void test_inferCompilationUnit_method_return_multiple_same_nonVoid() {
764 InstanceMemberInferrer inferrer = createInferrer;
765 String methodName = 'm';
766 CompilationUnitElement unit = resolve('''
498 class A { 767 class A {
499 int $methodName() => 0; 768 int $methodName() => 0;
500 } 769 }
501 class B { 770 class B {
502 int $methodName() => 0.0; 771 int $methodName() => 0;
503 } 772 }
504 class C implements A, B { 773 class C implements A, B {
505 $methodName() => 0; 774 $methodName() => 0;
506 } 775 }
507 '''); 776 ''');
508 ClassElement classA = unit.getType('A'); 777 ClassElement classA = unit.getType('A');
509 MethodElement methodA = classA.getMethod(methodName); 778 MethodElement methodA = classA.getMethod(methodName);
510 DartType expectedType = methodA.returnType; 779 DartType expectedType = methodA.returnType;
511 ClassElement classC = unit.getType('C'); 780 ClassElement classC = unit.getType('C');
512 MethodElement methodC = classC.getMethod(methodName); 781 MethodElement methodC = classC.getMethod(methodName);
513 expect(methodC.returnType.isDynamic, isTrue); 782 expect(methodC.returnType.isDynamic, isTrue);
514 783
515 inferrer.inferCompilationUnit(unit); 784 inferrer.inferCompilationUnit(unit);
516 785
517 expect(methodC.returnType, expectedType); 786 expect(methodC.returnType, expectedType);
518 } 787 }
519 788
520 void test_inferCompilationUnit_method_multiple_same_void() { 789 void test_inferCompilationUnit_method_return_multiple_same_void() {
521 InstanceMemberInferrer inferrer = createInferrer; 790 InstanceMemberInferrer inferrer = createInferrer;
522 String methodName = 'm'; 791 String methodName = 'm';
523 CompilationUnitElement unit = resolve(''' 792 CompilationUnitElement unit = resolve('''
524 class A { 793 class A {
525 void $methodName() {}; 794 void $methodName() {};
526 } 795 }
527 class B { 796 class B {
528 void $methodName() {}; 797 void $methodName() {};
529 } 798 }
530 class C implements A, B { 799 class C implements A, B {
531 $methodName() {}; 800 $methodName() {};
532 } 801 }
533 '''); 802 ''');
534 ClassElement classA = unit.getType('A'); 803 ClassElement classA = unit.getType('A');
535 MethodElement methodA = classA.getMethod(methodName); 804 MethodElement methodA = classA.getMethod(methodName);
536 DartType expectedType = methodA.returnType; 805 DartType expectedType = methodA.returnType;
537 ClassElement classC = unit.getType('C'); 806 ClassElement classC = unit.getType('C');
538 MethodElement methodC = classC.getMethod(methodName); 807 MethodElement methodC = classC.getMethod(methodName);
539 expect(methodC.returnType.isDynamic, isTrue); 808 expect(methodC.returnType.isDynamic, isTrue);
540 809
541 inferrer.inferCompilationUnit(unit); 810 inferrer.inferCompilationUnit(unit);
542 811
543 expect(methodC.returnType, expectedType); 812 expect(methodC.returnType, expectedType);
544 } 813 }
545 814
546 void test_inferCompilationUnit_method_multiple_void() { 815 void test_inferCompilationUnit_method_return_multiple_void() {
547 InstanceMemberInferrer inferrer = createInferrer; 816 InstanceMemberInferrer inferrer = createInferrer;
548 String methodName = 'm'; 817 String methodName = 'm';
549 CompilationUnitElement unit = resolve(''' 818 CompilationUnitElement unit = resolve('''
550 class A { 819 class A {
551 int $methodName() => 0; 820 int $methodName() => 0;
552 } 821 }
553 class B { 822 class B {
554 void $methodName() => 0; 823 void $methodName() => 0;
555 } 824 }
556 class C implements A, B { 825 class C implements A, B {
557 $methodName() => 0; 826 $methodName() => 0;
558 } 827 }
559 '''); 828 ''');
560 ClassElement classC = unit.getType('C'); 829 ClassElement classC = unit.getType('C');
561 MethodElement methodC = classC.getMethod(methodName); 830 MethodElement methodC = classC.getMethod(methodName);
562 expect(methodC.returnType.isDynamic, isTrue); 831 expect(methodC.returnType.isDynamic, isTrue);
563 832
564 inferrer.inferCompilationUnit(unit); 833 inferrer.inferCompilationUnit(unit);
565 834
566 expect(methodC.returnType.isDynamic, isTrue); 835 expect(methodC.returnType.isDynamic, isTrue);
567 } 836 }
568 837
569 void test_inferCompilationUnit_method_single() { 838 void test_inferCompilationUnit_method_return_single() {
570 InstanceMemberInferrer inferrer = createInferrer; 839 InstanceMemberInferrer inferrer = createInferrer;
571 String methodName = 'm'; 840 String methodName = 'm';
572 CompilationUnitElement unit = resolve(''' 841 CompilationUnitElement unit = resolve('''
573 class A { 842 class A {
574 int $methodName() => 0; 843 int $methodName() => 0;
575 } 844 }
576 class B extends A { 845 class B extends A {
577 $methodName() => 0; 846 $methodName() => 0;
578 } 847 }
579 '''); 848 ''');
580 ClassElement classA = unit.getType('A'); 849 ClassElement classA = unit.getType('A');
581 MethodElement methodA = classA.getMethod(methodName); 850 MethodElement methodA = classA.getMethod(methodName);
582 ClassElement classB = unit.getType('B'); 851 ClassElement classB = unit.getType('B');
583 MethodElement methodB = classB.getMethod(methodName); 852 MethodElement methodB = classB.getMethod(methodName);
584 expect(methodB.returnType.isDynamic, isTrue); 853 expect(methodB.returnType.isDynamic, isTrue);
585 854
586 inferrer.inferCompilationUnit(unit); 855 inferrer.inferCompilationUnit(unit);
587 856
588 expect(methodB.returnType, methodA.returnType); 857 expect(methodB.returnType, methodA.returnType);
589 } 858 }
859
860 void test_inferCompilationUnit_method_return_single_generic() {
861 InstanceMemberInferrer inferrer = createInferrer;
862 String methodName = 'm';
863 CompilationUnitElement unit = resolve('''
864 class A<E> {
865 E $methodName() => 0;
590 } 866 }
867 class B<E> extends A<E> {
868 $methodName() => 0;
869 }
870 ''');
871 ClassElement classB = unit.getType('B');
872 MethodElement methodB = classB.getMethod(methodName);
873 expect(methodB.returnType.isDynamic, isTrue);
874
875 inferrer.inferCompilationUnit(unit);
876
877 expect(methodB.returnType, classB.typeParameters[0].type);
878 }
879 }
OLDNEW
« pkg/analyzer/lib/src/task/strong_mode.dart ('K') | « pkg/analyzer/lib/src/task/strong_mode.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698