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

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

Issue 2837173002: fix #29426, class type alias was missing checks (Closed)
Patch Set: Created 3 years, 7 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 analyzer.test.src.task.strong.checker_test; 5 library analyzer.test.src.task.strong.checker_test;
6 6
7 import 'package:test_reflective_loader/test_reflective_loader.dart'; 7 import 'package:test_reflective_loader/test_reflective_loader.dart';
8 8
9 import 'strong_test_helper.dart'; 9 import 'strong_test_helper.dart';
10 10
(...skipping 2421 matching lines...) Expand 10 before | Expand all | Expand 10 after
2432 2432
2433 test_implicitDynamic_type() async { 2433 test_implicitDynamic_type() async {
2434 addFile(r''' 2434 addFile(r'''
2435 class C<T> {} 2435 class C<T> {}
2436 class M1<T extends /*error:IMPLICIT_DYNAMIC_TYPE*/List> {} 2436 class M1<T extends /*error:IMPLICIT_DYNAMIC_TYPE*/List> {}
2437 class M2<T> {} 2437 class M2<T> {}
2438 class I<T> {} 2438 class I<T> {}
2439 class D<T, S> extends /*error:IMPLICIT_DYNAMIC_TYPE*/C 2439 class D<T, S> extends /*error:IMPLICIT_DYNAMIC_TYPE*/C
2440 with M1, /*error:IMPLICIT_DYNAMIC_TYPE*/M2 2440 with M1, /*error:IMPLICIT_DYNAMIC_TYPE*/M2
2441 implements /*error:IMPLICIT_DYNAMIC_TYPE*/I {} 2441 implements /*error:IMPLICIT_DYNAMIC_TYPE*/I {}
2442 class D2<T, S> = /*error:IMPLICIT_DYNAMIC_TYPE*/C
2443 with M1, /*error:IMPLICIT_DYNAMIC_TYPE*/M2
2444 implements /*error:IMPLICIT_DYNAMIC_TYPE*/I;
2442 2445
2443 C f(D d) { 2446 C f(D d) {
2444 D x = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/D(); 2447 D x = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/D();
2445 D<int, dynamic> y = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA MIC_TYPE*/D(); 2448 D<int, dynamic> y = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA MIC_TYPE*/D();
2446 D<dynamic, int> z = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA MIC_TYPE*/D(); 2449 D<dynamic, int> z = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA MIC_TYPE*/D();
2447 return /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/C() ; 2450 return /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/C() ;
2448 } 2451 }
2449 2452
2450 class A<T extends num> {} 2453 class A<T extends num> {}
2451 class N1<T extends List<int>> {} 2454 class N1<T extends List<int>> {}
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2631 m(A a); 2634 m(A a);
2632 } 2635 }
2633 2636
2634 class M { 2637 class M {
2635 m(B a) {} 2638 m(B a) {}
2636 } 2639 }
2637 2640
2638 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 2641 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1
2639 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 2642 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
2640 implements I {} 2643 implements I {}
2644
2645 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 = Object
2646 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M implements I;
2641 '''); 2647 ''');
2642 } 2648 }
2643 2649
2644 test_invalidOverrides_mixinOverrideToBase() async { 2650 test_invalidOverrides_mixinOverrideToBase() async {
2645 await checkFile(''' 2651 await checkFile('''
2646 class A {} 2652 class A {}
2647 class B {} 2653 class B {}
2648 2654
2649 class Base { 2655 class Base {
2650 m(A a) {} 2656 m(A a) {}
2651 int x; 2657 int x;
2652 } 2658 }
2653 2659
2654 class M1 { 2660 class M1 {
2655 m(B a) {} 2661 m(B a) {}
2656 } 2662 }
2657 2663
2658 class M2 { 2664 class M2 {
2659 int x; 2665 int x;
2660 } 2666 }
2661 2667
2662 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base 2668 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
2663 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1 {} 2669 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1 {}
2664 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 extends Base 2670 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 extends Base
2665 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1, M2 {} 2671 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1, M2 {}
2666 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T3 extends Base 2672 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T3 extends Base
2667 with M2, /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1 {} 2673 with M2, /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1 {}
2674
2675
2676 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 = Base
2677 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1;
2678 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U2 = Base
2679 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1, M2;
2680 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U3 = Base
2681 with M2, /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1;
2668 '''); 2682 ''');
2669 } 2683 }
2670 2684
2671 test_invalidOverrides_mixinOverrideToMixin() async { 2685 test_invalidOverrides_mixinOverrideToMixin() async {
2672 await checkFile(''' 2686 await checkFile('''
2673 class A {} 2687 class A {}
2674 class B {} 2688 class B {}
2675 2689
2676 class Base { 2690 class Base {
2677 } 2691 }
2678 2692
2679 class M1 { 2693 class M1 {
2680 m(B a) {} 2694 m(B a) {}
2681 int x; 2695 int x;
2682 } 2696 }
2683 2697
2684 class M2 { 2698 class M2 {
2685 m(A a) {} 2699 m(A a) {}
2686 int x; 2700 int x;
2687 } 2701 }
2688 2702
2689 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base 2703 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
2690 with M1, 2704 with M1,
2691 /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2 {} 2705 /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2 {}
2706
2707 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 = Base
2708 with M1,
2709 /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2;
2692 '''); 2710 ''');
2693 } 2711 }
2694 2712
2695 test_invalidOverrides_noDuplicateMixinOverride() async { 2713 test_invalidOverrides_noDuplicateMixinOverride() async {
2696 // This is a regression test for a bug in an earlier implementation were 2714 // This is a regression test for a bug in an earlier implementation were
2697 // names were hiding errors if the first mixin override looked correct, 2715 // names were hiding errors if the first mixin override looked correct,
2698 // but subsequent ones did not. 2716 // but subsequent ones did not.
2699 await checkFile(''' 2717 await checkFile('''
2700 class A {} 2718 class A {}
2701 class B {} 2719 class B {}
2702 2720
2703 class Base { 2721 class Base {
2704 m(A a) {} 2722 m(A a) {}
2705 } 2723 }
2706 2724
2707 class M1 { 2725 class M1 {
2708 m(A a) {} 2726 m(A a) {}
2709 } 2727 }
2710 2728
2711 class M2 { 2729 class M2 {
2712 m(B a) {} 2730 m(B a) {}
2713 } 2731 }
2714 2732
2715 class M3 { 2733 class M3 {
2716 m(B a) {} 2734 m(B a) {}
2717 } 2735 }
2718 2736
2719 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base 2737 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
2720 with M1, /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2, M3 {} 2738 with M1, /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2, M3 {}
2739
2740 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 = Base
2741 with M1, /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2, M3;
2721 '''); 2742 ''');
2722 } 2743 }
2723 2744
2724 test_invalidOverrides_noErrorsIfSubclassCorrectlyOverrideBaseAndInterface() as ync { 2745 test_invalidOverrides_noErrorsIfSubclassCorrectlyOverrideBaseAndInterface() as ync {
2725 // This is a case were it is incorrect to say that the base class 2746 // This is a case were it is incorrect to say that the base class
2726 // incorrectly overrides the interface. 2747 // incorrectly overrides the interface.
2727 await checkFile(''' 2748 await checkFile('''
2728 class A {} 2749 class A {}
2729 class B {} 2750 class B {}
2730 2751
(...skipping 10 matching lines...) Expand all
2741 implements I1 {} 2762 implements I1 {}
2742 2763
2743 class T2 extends Base implements I1 { 2764 class T2 extends Base implements I1 {
2744 m(a) {} 2765 m(a) {}
2745 } 2766 }
2746 2767
2747 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T3 2768 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T3
2748 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/Base 2769 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/Base
2749 implements I1 {} 2770 implements I1 {}
2750 2771
2772 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U3
2773 = Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/Base
2774 implements I1;
2775
2751 class T4 extends Object with Base implements I1 { 2776 class T4 extends Object with Base implements I1 {
2752 m(a) {} 2777 m(a) {}
2753 } 2778 }
2754 '''); 2779 ''');
2755 } 2780 }
2756 2781
2757 test_invalidRuntimeChecks() async { 2782 test_invalidRuntimeChecks() async {
2758 await checkFile(''' 2783 await checkFile('''
2759 typedef int I2I(int x); 2784 typedef int I2I(int x);
2760 typedef int D2I(x); 2785 typedef int D2I(x);
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
2953 m(A a); 2978 m(A a);
2954 } 2979 }
2955 abstract class Base implements I1 {} 2980 abstract class Base implements I1 {}
2956 2981
2957 class M { 2982 class M {
2958 m(B a) {} 2983 m(B a) {}
2959 } 2984 }
2960 2985
2961 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base 2986 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
2962 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M {} 2987 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M {}
2988
2989 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 = Base
2990 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M;
2963 '''); 2991 ''');
2964 } 2992 }
2965 2993
2966 test_mixinOverrideOfGrandInterface_interfaceOfConcreteSuperclass() async { 2994 test_mixinOverrideOfGrandInterface_interfaceOfConcreteSuperclass() async {
2967 await checkFile(''' 2995 await checkFile('''
2968 class A {} 2996 class A {}
2969 class B {} 2997 class B {}
2970 2998
2971 abstract class I1 { 2999 abstract class I1 {
2972 m(A a); 3000 m(A a);
2973 } 3001 }
2974 3002
2975 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base 3003 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base
2976 implements I1 {} 3004 implements I1 {}
2977 3005
2978 class M { 3006 class M {
2979 m(B a) {} 3007 m(B a) {}
2980 } 3008 }
2981 3009
2982 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base 3010 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base with M {}
2983 with M {} 3011
3012 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 = Base with M;
2984 '''); 3013 ''');
2985 } 3014 }
2986 3015
2987 test_mixinOverrideOfGrandInterface_interfaceOfInterfaceOfChild() async { 3016 test_mixinOverrideOfGrandInterface_interfaceOfInterfaceOfChild() async {
2988 await checkFile(''' 3017 await checkFile('''
2989 class A {} 3018 class A {}
2990 class B {} 3019 class B {}
2991 3020
2992 abstract class I1 { 3021 abstract class I1 {
2993 m(A a); 3022 m(A a);
2994 } 3023 }
2995 abstract class I2 implements I1 {} 3024 abstract class I2 implements I1 {}
2996 3025
2997 class M { 3026 class M {
2998 m(B a) {} 3027 m(B a) {}
2999 } 3028 }
3000 3029
3001 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 3030 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1
3002 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 3031 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3003 implements I2 {} 3032 implements I2 {}
3033
3034 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1
3035 = Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3036 implements I2;
3004 '''); 3037 ''');
3005 } 3038 }
3006 3039
3007 test_mixinOverrideOfGrandInterface_mixinOfInterfaceOfChild() async { 3040 test_mixinOverrideOfGrandInterface_mixinOfInterfaceOfChild() async {
3008 await checkFile(''' 3041 await checkFile('''
3009 class A {} 3042 class A {}
3010 class B {} 3043 class B {}
3011 3044
3012 abstract class M1 { 3045 abstract class M1 {
3013 m(A a); 3046 m(A a);
3014 } 3047 }
3015 abstract class I2 extends Object with M1 {} 3048 abstract class I2 extends Object with M1 {}
3016 3049
3017 class M { 3050 class M {
3018 m(B a) {} 3051 m(B a) {}
3019 } 3052 }
3020 3053
3021 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 3054 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1
3022 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 3055 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3023 implements I2 {} 3056 implements I2 {}
3057
3058 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1
3059 = Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3060 implements I2;
3024 '''); 3061 ''');
3025 } 3062 }
3026 3063
3027 test_mixinOverrideOfGrandInterface_superclassOfInterfaceOfChild() async { 3064 test_mixinOverrideOfGrandInterface_superclassOfInterfaceOfChild() async {
3028 await checkFile(''' 3065 await checkFile('''
3029 class A {} 3066 class A {}
3030 class B {} 3067 class B {}
3031 3068
3032 abstract class I1 { 3069 abstract class I1 {
3033 m(A a); 3070 m(A a);
3034 } 3071 }
3035 abstract class I2 extends I1 {} 3072 abstract class I2 extends I1 {}
3036 3073
3037 class M { 3074 class M {
3038 m(B a) {} 3075 m(B a) {}
3039 } 3076 }
3040 3077
3041 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 3078 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1
3042 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 3079 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3043 implements I2 {} 3080 implements I2 {}
3081
3082 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1
3083 = Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3084 implements I2;
3044 '''); 3085 ''');
3045 } 3086 }
3046 3087
3047 test_noDuplicateReportsFromOverridingInterfaces_baseTypeAndMixinOverrideSameMe thodInInterface() async { 3088 test_noDuplicateReports_baseTypeAndMixinOverrideSameMethodInInterface() async {
3048 await checkFile(''' 3089 await checkFile('''
3049 class A {} 3090 class A {}
3050 class B {} 3091 class B {}
3051 3092
3052 abstract class I1 { 3093 abstract class I1 {
3053 m(A a); 3094 m(A a);
3054 } 3095 }
3055 3096
3056 class Base { 3097 class Base {
3057 m(B a) {} 3098 m(B a) {}
3058 } 3099 }
3059 3100
3060 class M { 3101 class M {
3061 m(B a) {} 3102 m(B a) {}
3062 } 3103 }
3063 3104
3064 // Here we want to report both, because the error location is 3105 // Here we want to report both, because the error location is
3065 // different. 3106 // different.
3066 // TODO(sigmund): should we merge these as well? 3107 // TODO(sigmund): should we merge these as well?
3067 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 3108 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1
3068 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base 3109 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base
3069 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 3110 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3070 implements I1 {} 3111 implements I1 {}
3112
3113
3114 // Here we want to report both, because the error location is
3115 // different.
3116 // TODO(sigmund): should we merge these as well?
3117 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U1 =
3118 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/Base
3119 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3120 implements I1;
3071 '''); 3121 ''');
3072 } 3122 }
3073 3123
3074 test_noDuplicateReportsFromOverridingInterfaces_twoGrandTypesOverrideSameMetho dInInterface() async { 3124 test_noDuplicateReports_twoGrandTypesOverrideSameMethodInInterface() async {
3075 await checkFile(''' 3125 await checkFile('''
3076 class A {} 3126 class A {}
3077 class B {} 3127 class B {}
3078 3128
3079 abstract class I1 { 3129 abstract class I1 {
3080 m(A a); 3130 m(A a);
3081 } 3131 }
3082 3132
3083 class Grandparent { 3133 class Grandparent {
3084 m(B a) {} 3134 m(B a) {}
3085 } 3135 }
3086 3136
3087 class Parent1 extends Grandparent { 3137 class Parent1 extends Grandparent {
3088 m(B a) {} 3138 m(B a) {}
3089 } 3139 }
3090 class Parent2 extends Grandparent {} 3140 class Parent2 extends Grandparent {}
3091 3141
3092 // Note: otherwise both errors would be reported on this line 3142 // Note: otherwise both errors would be reported on this line
3093 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 3143 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1
3094 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Parent1 3144 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Parent1
3095 implements I1 {} 3145 implements I1 {}
3096 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 3146 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2
3097 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Parent2 3147 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Parent2
3098 implements I1 {} 3148 implements I1 {}
3099 '''); 3149 ''');
3100 } 3150 }
3101 3151
3102 test_noDuplicateReportsFromOverridingInterfaces_twoMixinsOverrideSameMethodInI nterface() async { 3152 test_noDuplicateReports_twoMixinsOverrideSameMethodInInterface() async {
3103 await checkFile(''' 3153 await checkFile('''
3104 class A {} 3154 class A {}
3105 class B {} 3155 class B {}
3106 3156
3107 abstract class I1 { 3157 abstract class I1 {
3108 m(A a); 3158 m(A a);
3109 } 3159 }
3110 3160
3111 class M1 { 3161 class M1 {
3112 m(B a) {} 3162 m(B a) {}
3113 } 3163 }
3114 3164
3115 class M2 { 3165 class M2 {
3116 m(B a) {} 3166 m(B a) {}
3117 } 3167 }
3118 3168
3119 // Here we want to report both, because the error location is 3169 // Here we want to report both, because the error location is
3120 // different. 3170 // different.
3121 // TODO(sigmund): should we merge these as well? 3171 // TODO(sigmund): should we merge these as well?
3122 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Object 3172 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Object
3123 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1, 3173 with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M1,
3124 /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2 3174 /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M2
3125 implements I1 {} 3175 implements I1 {}
3126 '''); 3176 ''');
3127 } 3177 }
3128 3178
3129 test_noDuplicateReportsFromOverridingInterfaces_typeAndBaseTypeOverrideSameMet hodInInterface() async { 3179 test_noDuplicateReports_typeAndBaseTypeOverrideSameMethodInInterface() async {
3130 await checkFile(''' 3180 await checkFile('''
3131 class A {} 3181 class A {}
3132 class B {} 3182 class B {}
3133 3183
3134 abstract class I1 { 3184 abstract class I1 {
3135 m(A a); 3185 m(A a);
3136 } 3186 }
3137 3187
3138 class Base { 3188 class Base {
3139 m(B a) {} 3189 m(B a) {}
3140 } 3190 }
3141 3191
3142 // Note: no error reported in `extends Base` to avoid duplicating 3192 // Note: no error reported in `extends Base` to avoid duplicating
3143 // the error in T1. 3193 // the error in T1.
3144 class T1 extends Base implements I1 { 3194 class T1 extends Base implements I1 {
3145 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {} 3195 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
3146 } 3196 }
3147 3197
3148 // If there is no error in the class, we do report the error at 3198 // If there is no error in the class, we do report the error at
3149 // the base class: 3199 // the base class:
3150 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 3200 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2
3151 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base 3201 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base
3152 implements I1 {} 3202 implements I1 {}
3153 '''); 3203 ''');
3154 } 3204 }
3155 3205
3156 test_noDuplicateReportsFromOverridingInterfaces_typeAndMixinOverrideSameMethod InInterface() async { 3206 test_noDuplicateReports_typeAndMixinOverrideSameMethodInInterface() async {
3157 await checkFile(''' 3207 await checkFile('''
3158 class A {} 3208 class A {}
3159 class B {} 3209 class B {}
3160 3210
3161 abstract class I1 { 3211 abstract class I1 {
3162 m(A a); 3212 m(A a);
3163 } 3213 }
3164 3214
3165 class M { 3215 class M {
3166 m(B a) {} 3216 m(B a) {}
3167 } 3217 }
3168 3218
3169 class T1 extends Object with M implements I1 { 3219 class T1 extends Object with M implements I1 {
3170 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {} 3220 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
3171 } 3221 }
3172 3222
3173 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 3223 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2
3174 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 3224 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3175 implements I1 {} 3225 implements I1 {}
3226
3227 class /*error:INCONSISTENT_METHOD_INHERITANCE*/U2
3228 = Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
3229 implements I1;
3176 '''); 3230 ''');
3177 } 3231 }
3178 3232
3179 test_noDuplicateReportsFromOverridingInterfaces_typeOverridesSomeMethodInMulti pleInterfaces() async { 3233 test_noDuplicateReports_typeOverridesSomeMethodInMultipleInterfaces() async {
3180 await checkFile(''' 3234 await checkFile('''
3181 class A {} 3235 class A {}
3182 class B {} 3236 class B {}
3183 3237
3184 abstract class I1 { 3238 abstract class I1 {
3185 m(A a); 3239 m(A a);
3186 } 3240 }
3187 abstract class I2 implements I1 { 3241 abstract class I2 implements I1 {
3188 m(A a); 3242 m(A a);
3189 } 3243 }
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
4149 class CheckerTest_Driver extends CheckerTest { 4203 class CheckerTest_Driver extends CheckerTest {
4150 @override 4204 @override
4151 bool get enableNewAnalysisDriver => true; 4205 bool get enableNewAnalysisDriver => true;
4152 4206
4153 @failingTest 4207 @failingTest
4154 @override 4208 @override
4155 test_covariantOverride_fields() async { 4209 test_covariantOverride_fields() async {
4156 await super.test_covariantOverride_fields(); 4210 await super.test_covariantOverride_fields();
4157 } 4211 }
4158 } 4212 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698