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

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

Issue 2246293002: remove duplicate checking for overrides (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix Created 4 years, 4 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
« no previous file with comments | « pkg/analyzer/test/generated/strong_mode_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 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 '../../../reflective_tests.dart'; 7 import '../../../reflective_tests.dart';
8 import 'strong_test_helper.dart'; 8 import 'strong_test_helper.dart';
9 9
10 void main() { 10 void main() {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 checkFile(''' 157 checkFile('''
158 class A {} 158 class A {}
159 class B {} 159 class B {}
160 160
161 abstract class I1 { 161 abstract class I1 {
162 m(A a); 162 m(A a);
163 } 163 }
164 abstract class Base implements I1 {} 164 abstract class Base implements I1 {}
165 165
166 class T1 extends Base { 166 class T1 extends Base {
167 /*error:INVALID_METHOD_OVERRIDE*/m( 167 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
168 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
169 } 168 }
170 '''); 169 ''');
171 } 170 }
172 171
173 void test_classOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { 172 void test_classOverrideOfGrandInterface_interfaceOfConcreteSuperclass() {
174 checkFile(''' 173 checkFile('''
175 class A {} 174 class A {}
176 class B {} 175 class B {}
177 176
178 abstract class I1 { 177 abstract class I1 {
179 m(A a); 178 m(A a);
180 } 179 }
181 180
182 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base 181 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base
183 implements I1 {} 182 implements I1 {}
184 183
185 class T1 extends Base { 184 class T1 extends Base {
186 // not reported technically because if the class is concrete, 185 // not reported technically because if the class is concrete,
187 // it should implement all its interfaces and hence it is 186 // it should implement all its interfaces and hence it is
188 // sufficient to check overrides against it. 187 // sufficient to check overrides against it.
189 m(/*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} 188 m(B a) {}
190 } 189 }
191 '''); 190 ''');
192 } 191 }
193 192
194 void test_classOverrideOfGrandInterface_interfaceOfInterfaceOfChild() { 193 void test_classOverrideOfGrandInterface_interfaceOfInterfaceOfChild() {
195 checkFile(''' 194 checkFile('''
196 class A {} 195 class A {}
197 class B {} 196 class B {}
198 197
199 abstract class I1 { 198 abstract class I1 {
200 m(A a); 199 m(A a);
201 } 200 }
202 abstract class I2 implements I1 {} 201 abstract class I2 implements I1 {}
203 202
204 class T1 implements I2 { 203 class T1 implements I2 {
205 /*error:INVALID_METHOD_OVERRIDE*/m( 204 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
206 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
207 } 205 }
208 '''); 206 ''');
209 } 207 }
210 208
211 void test_classOverrideOfGrandInterface_mixinOfInterfaceOfChild() { 209 void test_classOverrideOfGrandInterface_mixinOfInterfaceOfChild() {
212 checkFile(''' 210 checkFile('''
213 class A {} 211 class A {}
214 class B {} 212 class B {}
215 213
216 abstract class M1 { 214 abstract class M1 {
217 m(A a); 215 m(A a);
218 } 216 }
219 abstract class I2 extends Object with M1 {} 217 abstract class I2 extends Object with M1 {}
220 218
221 class T1 implements I2 { 219 class T1 implements I2 {
222 /*error:INVALID_METHOD_OVERRIDE*/m( 220 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
223 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
224 } 221 }
225 '''); 222 ''');
226 } 223 }
227 224
228 void test_classOverrideOfGrandInterface_superclassOfInterfaceOfChild() { 225 void test_classOverrideOfGrandInterface_superclassOfInterfaceOfChild() {
229 checkFile(''' 226 checkFile('''
230 class A {} 227 class A {}
231 class B {} 228 class B {}
232 229
233 abstract class I1 { 230 abstract class I1 {
234 m(A a); 231 m(A a);
235 } 232 }
236 abstract class I2 extends I1 {} 233 abstract class I2 extends I1 {}
237 234
238 class T1 implements I2 { 235 class T1 implements I2 {
239 /*error:INVALID_METHOD_OVERRIDE*/m( 236 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
240 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
241 } 237 }
242 '''); 238 ''');
243 } 239 }
244 240
245 void test_compoundAssignments() { 241 void test_compoundAssignments() {
246 checkFile(''' 242 checkFile('''
247 class A { 243 class A {
248 A operator *(B b) => null; 244 A operator *(B b) => null;
249 A operator /(B b) => null; 245 A operator /(B b) => null;
250 A operator ~/(B b) => null; 246 A operator ~/(B b) => null;
(...skipping 1529 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 void test_genericClassMethodOverride() { 1776 void test_genericClassMethodOverride() {
1781 checkFile(''' 1777 checkFile('''
1782 class A {} 1778 class A {}
1783 class B extends A {} 1779 class B extends A {}
1784 1780
1785 class Base<T extends B> { 1781 class Base<T extends B> {
1786 T foo() => null; 1782 T foo() => null;
1787 } 1783 }
1788 1784
1789 class Derived<S extends A> extends Base<B> { 1785 class Derived<S extends A> extends Base<B> {
1790 /*error:INVALID_METHOD_OVERRIDE*/S 1786 /*error:INVALID_METHOD_OVERRIDE*/S foo() => null;
1791 /*error:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/foo() => null;
1792 } 1787 }
1793 1788
1794 class Derived2<S extends B> extends Base<B> { 1789 class Derived2<S extends B> extends Base<B> {
1795 S foo() => null; 1790 S foo() => null;
1796 } 1791 }
1797 '''); 1792 ''');
1798 } 1793 }
1799 1794
1800 void test_genericFunctionWrongNumberOfArguments() { 1795 void test_genericFunctionWrongNumberOfArguments() {
1801 checkFile(r''' 1796 checkFile(r'''
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
2246 void test_invalidOverrides_childOverride() { 2241 void test_invalidOverrides_childOverride() {
2247 checkFile(''' 2242 checkFile('''
2248 class A {} 2243 class A {}
2249 class B {} 2244 class B {}
2250 2245
2251 class Base { 2246 class Base {
2252 A f; 2247 A f;
2253 } 2248 }
2254 2249
2255 class T1 extends Base { 2250 class T1 extends Base {
2256 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B get 2251 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B get f => null;
2257 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null;
2258 } 2252 }
2259 2253
2260 class T2 extends Base { 2254 class T2 extends Base {
2261 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/set f( 2255 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/set f(
2262 /*error:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null; 2256 B b) => null;
2263 } 2257 }
2264 2258
2265 class T3 extends Base { 2259 class T3 extends Base {
2266 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/final B 2260 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/final B
2267 /*warning:FINAL_NOT_INITIALIZED, error:INVALID_GETTER_OVERRIDE_RETURN_TYPE */f; 2261 /*warning:FINAL_NOT_INITIALIZED*/f;
2268 } 2262 }
2269 class T4 extends Base { 2263 class T4 extends Base {
2270 // two: one for the getter one for the setter. 2264 // two: one for the getter one for the setter.
2271 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE, error:INVALID_M ETHOD_OVERRIDE*/B 2265 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE, error:INVALID_M ETHOD_OVERRIDE*/B f;
2272 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE, error:INVALID_SETTER_OVERRIDE _NORMAL_PARAM_TYPE*/f;
2273 } 2266 }
2274 2267
2275 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T5 implements Bas e { 2268 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T5 implements Bas e {
2276 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET HOD_OVERRIDE*/B get 2269 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET HOD_OVERRIDE*/B get f => null;
2277 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null;
2278 } 2270 }
2279 2271
2280 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T6 implements Bas e { 2272 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T6 implements Bas e {
2281 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET HOD_OVERRIDE*/set f( 2273 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET HOD_OVERRIDE*/set f(B b) => null;
2282 /*error:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null;
2283 } 2274 }
2284 2275
2285 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T7 implements Bas e { 2276 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T7 implements Bas e {
2286 /*error:INVALID_METHOD_OVERRIDE*/final B 2277 /*error:INVALID_METHOD_OVERRIDE*/final B f = null;
2287 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f = null;
2288 } 2278 }
2289 class T8 implements Base { 2279 class T8 implements Base {
2290 // two: one for the getter one for the setter. 2280 // two: one for the getter one for the setter.
2291 /*error:INVALID_METHOD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B 2281 /*error:INVALID_METHOD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B f;
2292 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE, error:INVALID_SETTER_OVERRIDE _NORMAL_PARAM_TYPE*/f;
2293 } 2282 }
2294 '''); 2283 ''');
2295 } 2284 }
2296 2285
2297 void test_invalidOverrides_childOverride2() { 2286 void test_invalidOverrides_childOverride2() {
2298 checkFile(''' 2287 checkFile('''
2299 class A {} 2288 class A {}
2300 class B {} 2289 class B {}
2301 2290
2302 class Base { 2291 class Base {
2303 m(A a) {} 2292 m(A a) {}
2304 } 2293 }
2305 2294
2306 class Test extends Base { 2295 class Test extends Base {
2307 /*error:INVALID_METHOD_OVERRIDE*/m( 2296 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2308 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2309 } 2297 }
2310 '''); 2298 ''');
2311 } 2299 }
2312 2300
2313 void test_invalidOverrides_classOverrideOfInterface() { 2301 void test_invalidOverrides_classOverrideOfInterface() {
2314 checkFile(''' 2302 checkFile('''
2315 class A {} 2303 class A {}
2316 class B {} 2304 class B {}
2317 2305
2318 abstract class I { 2306 abstract class I {
2319 m(A a); 2307 m(A a);
2320 } 2308 }
2321 2309
2322 class T1 implements I { 2310 class T1 implements I {
2323 /*error:INVALID_METHOD_OVERRIDE*/m( 2311 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2324 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2325 } 2312 }
2326 '''); 2313 ''');
2327 } 2314 }
2328 2315
2329 void test_invalidOverrides_doubleOverride() { 2316 void test_invalidOverrides_doubleOverride() {
2330 checkFile(''' 2317 checkFile('''
2331 class A {} 2318 class A {}
2332 class B {} 2319 class B {}
2333 2320
2334 class Grandparent { 2321 class Grandparent {
2335 m(A a) {} 2322 m(A a) {}
2336 } 2323 }
2337 class Parent extends Grandparent { 2324 class Parent extends Grandparent {
2338 m(A a) {} 2325 m(A a) {}
2339 } 2326 }
2340 2327
2341 class Test extends Parent { 2328 class Test extends Parent {
2342 // Reported only once 2329 // Reported only once
2343 /*error:INVALID_METHOD_OVERRIDE*/m( 2330 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2344 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2345 } 2331 }
2346 '''); 2332 ''');
2347 } 2333 }
2348 2334
2349 void test_invalidOverrides_doubleOverride2() { 2335 void test_invalidOverrides_doubleOverride2() {
2350 checkFile(''' 2336 checkFile('''
2351 class A {} 2337 class A {}
2352 class B {} 2338 class B {}
2353 2339
2354 class Grandparent { 2340 class Grandparent {
2355 m(A a) {} 2341 m(A a) {}
2356 } 2342 }
2357 class Parent extends Grandparent { 2343 class Parent extends Grandparent {
2358 /*error:INVALID_METHOD_OVERRIDE*/m( 2344 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2359 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2360 } 2345 }
2361 2346
2362 class Test extends Parent { 2347 class Test extends Parent {
2363 m(B a) {} 2348 m(B a) {}
2364 } 2349 }
2365 '''); 2350 ''');
2366 } 2351 }
2367 2352
2368 void test_invalidOverrides_grandChildOverride() { 2353 void test_invalidOverrides_grandChildOverride() {
2369 checkFile(''' 2354 checkFile('''
2370 class A {} 2355 class A {}
2371 class B {} 2356 class B {}
2372 2357
2373 class Grandparent { 2358 class Grandparent {
2374 m(A a) {} 2359 m(A a) {}
2375 int x; 2360 int x;
2376 } 2361 }
2377 class Parent extends Grandparent { 2362 class Parent extends Grandparent {
2378 } 2363 }
2379 2364
2380 class Test extends Parent { 2365 class Test extends Parent {
2381 /*error:INVALID_METHOD_OVERRIDE*/m( 2366 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2382 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2383 /*error:INVALID_FIELD_OVERRIDE*/int x; 2367 /*error:INVALID_FIELD_OVERRIDE*/int x;
2384 } 2368 }
2385 '''); 2369 ''');
2386 } 2370 }
2387 2371
2388 void test_invalidOverrides_mixinOverrideOfInterface() { 2372 void test_invalidOverrides_mixinOverrideOfInterface() {
2389 checkFile(''' 2373 checkFile('''
2390 class A {} 2374 class A {}
2391 class B {} 2375 class B {}
2392 2376
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
2903 m(A a); 2887 m(A a);
2904 } 2888 }
2905 2889
2906 class Base { 2890 class Base {
2907 m(B a) {} 2891 m(B a) {}
2908 } 2892 }
2909 2893
2910 // Note: no error reported in `extends Base` to avoid duplicating 2894 // Note: no error reported in `extends Base` to avoid duplicating
2911 // the error in T1. 2895 // the error in T1.
2912 class T1 extends Base implements I1 { 2896 class T1 extends Base implements I1 {
2913 /*error:INVALID_METHOD_OVERRIDE*/m( 2897 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2914 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2915 } 2898 }
2916 2899
2917 // If there is no error in the class, we do report the error at 2900 // If there is no error in the class, we do report the error at
2918 // the base class: 2901 // the base class:
2919 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 2902 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2
2920 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base 2903 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base
2921 implements I1 {} 2904 implements I1 {}
2922 '''); 2905 ''');
2923 } 2906 }
2924 2907
2925 void 2908 void
2926 test_noDuplicateReportsFromOverridingInterfaces_typeAndMixinOverrideSameMe thodInInterface() { 2909 test_noDuplicateReportsFromOverridingInterfaces_typeAndMixinOverrideSameMe thodInInterface() {
2927 checkFile(''' 2910 checkFile('''
2928 class A {} 2911 class A {}
2929 class B {} 2912 class B {}
2930 2913
2931 abstract class I1 { 2914 abstract class I1 {
2932 m(A a); 2915 m(A a);
2933 } 2916 }
2934 2917
2935 class M { 2918 class M {
2936 m(B a) {} 2919 m(B a) {}
2937 } 2920 }
2938 2921
2939 class T1 extends Object with M implements I1 { 2922 class T1 extends Object with M implements I1 {
2940 /*error:INVALID_METHOD_OVERRIDE*/m( 2923 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2941 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2942 } 2924 }
2943 2925
2944 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 2926 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2
2945 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M 2927 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M
2946 implements I1 {} 2928 implements I1 {}
2947 '''); 2929 ''');
2948 } 2930 }
2949 2931
2950 void 2932 void
2951 test_noDuplicateReportsFromOverridingInterfaces_typeOverridesSomeMethodInM ultipleInterfaces() { 2933 test_noDuplicateReportsFromOverridingInterfaces_typeOverridesSomeMethodInM ultipleInterfaces() {
2952 checkFile(''' 2934 checkFile('''
2953 class A {} 2935 class A {}
2954 class B {} 2936 class B {}
2955 2937
2956 abstract class I1 { 2938 abstract class I1 {
2957 m(A a); 2939 m(A a);
2958 } 2940 }
2959 abstract class I2 implements I1 { 2941 abstract class I2 implements I1 {
2960 m(A a); 2942 m(A a);
2961 } 2943 }
2962 2944
2963 class Base {} 2945 class Base {}
2964 2946
2965 class T1 implements I2 { 2947 class T1 implements I2 {
2966 /*error:INVALID_METHOD_OVERRIDE*/m( 2948 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
2967 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
2968 } 2949 }
2969 '''); 2950 ''');
2970 } 2951 }
2971 2952
2972 void test_nullCoalescingOperator() { 2953 void test_nullCoalescingOperator() {
2973 checkFile(''' 2954 checkFile('''
2974 class A {} 2955 class A {}
2975 class C<T> {} 2956 class C<T> {}
2976 main() { 2957 main() {
2977 A a, b; 2958 A a, b;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3012 void test_overrideNarrowsType() { 2993 void test_overrideNarrowsType() {
3013 addFile(r''' 2994 addFile(r'''
3014 class A {} 2995 class A {}
3015 class B extends A {} 2996 class B extends A {}
3016 2997
3017 abstract class C { 2998 abstract class C {
3018 m(A a); 2999 m(A a);
3019 n(B b); 3000 n(B b);
3020 } 3001 }
3021 abstract class D extends C { 3002 abstract class D extends C {
3022 /*error:INVALID_METHOD_OVERRIDE*/m(/*error:INVALID_METHOD_OVERRIDE_NORMAL_PARA M_TYPE*/B b); 3003 /*error:INVALID_METHOD_OVERRIDE*/m(B b);
3023 n(A a); 3004 n(A a);
3024 } 3005 }
3025 '''); 3006 ''');
3026 check(implicitCasts: false); 3007 check(implicitCasts: false);
3027 } 3008 }
3028 3009
3029 void test_privateOverride() { 3010 void test_privateOverride() {
3030 addFile( 3011 addFile(
3031 ''' 3012 '''
3032 import 'main.dart' as main; 3013 import 'main.dart' as main;
3033 3014
3034 class Base { 3015 class Base {
3035 var f1; 3016 var f1;
3036 var _f2; 3017 var _f2;
3037 var _f3; 3018 var _f3;
3038 get _f4 => null; 3019 get _f4 => null;
3039 3020
3040 int _m1() => null; 3021 int _m1() => null;
3041 } 3022 }
3042 3023
3043 class GrandChild extends main.Child { 3024 class GrandChild extends main.Child {
3044 /*error:INVALID_FIELD_OVERRIDE*/var _f2; 3025 /*error:INVALID_FIELD_OVERRIDE*/var _f2;
3045 /*error:INVALID_FIELD_OVERRIDE*/var _f3; 3026 /*error:INVALID_FIELD_OVERRIDE*/var _f3;
3046 var _f4; 3027 var _f4;
3047 3028
3048 /*error:INVALID_METHOD_OVERRIDE*/String 3029 /*error:INVALID_METHOD_OVERRIDE*/String _m1() => null;
3049 /*error:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/_m1() => null;
3050 } 3030 }
3051 ''', 3031 ''',
3052 name: '/helper.dart'); 3032 name: '/helper.dart');
3053 checkFile(''' 3033 checkFile('''
3054 import 'helper.dart' as helper; 3034 import 'helper.dart' as helper;
3055 3035
3056 class Child extends helper.Base { 3036 class Child extends helper.Base {
3057 /*error:INVALID_FIELD_OVERRIDE*/var f1; 3037 /*error:INVALID_FIELD_OVERRIDE*/var f1;
3058 var _f2; 3038 var _f2;
3059 var _f4; 3039 var _f4;
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
3297 void test_superclassOverrideOfGrandInterface_interfaceOfAbstractSuperclass() { 3277 void test_superclassOverrideOfGrandInterface_interfaceOfAbstractSuperclass() {
3298 checkFile(''' 3278 checkFile('''
3299 class A {} 3279 class A {}
3300 class B {} 3280 class B {}
3301 3281
3302 abstract class I1 { 3282 abstract class I1 {
3303 m(A a); 3283 m(A a);
3304 } 3284 }
3305 3285
3306 abstract class Base implements I1 { 3286 abstract class Base implements I1 {
3307 /*error:INVALID_METHOD_OVERRIDE*/m( 3287 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
3308 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
3309 } 3288 }
3310 3289
3311 class T1 extends Base { 3290 class T1 extends Base {
3312 // we consider the base class incomplete because it is 3291 // we consider the base class incomplete because it is
3313 // abstract, so we report the error here too. 3292 // abstract, so we report the error here too.
3314 // TODO(sigmund): consider tracking overrides in a fine-grain 3293 // TODO(sigmund): consider tracking overrides in a fine-grain
3315 // manner, then this and the double-overrides would not be 3294 // manner, then this and the double-overrides would not be
3316 // reported. 3295 // reported.
3317 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {} 3296 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
3318 } 3297 }
3319 '''); 3298 ''');
3320 } 3299 }
3321 3300
3322 void test_superclassOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { 3301 void test_superclassOverrideOfGrandInterface_interfaceOfConcreteSuperclass() {
3323 checkFile(''' 3302 checkFile('''
3324 class A {} 3303 class A {}
3325 class B {} 3304 class B {}
3326 3305
3327 abstract class I1 { 3306 abstract class I1 {
3328 m(A a); 3307 m(A a);
3329 } 3308 }
3330 3309
3331 class Base implements I1 { 3310 class Base implements I1 {
3332 /*error:INVALID_METHOD_OVERRIDE*/m( 3311 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {}
3333 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
3334 } 3312 }
3335 3313
3336 class T1 extends Base { 3314 class T1 extends Base {
3337 m(B a) {} 3315 m(B a) {}
3338 } 3316 }
3339 '''); 3317 ''');
3340 } 3318 }
3341 3319
3342 void test_superclassOverrideOfGrandInterface_interfaceOfInterfaceOfChild() { 3320 void test_superclassOverrideOfGrandInterface_interfaceOfInterfaceOfChild() {
3343 checkFile(''' 3321 checkFile('''
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
3747 // Regression test for https://github.com/dart-lang/sdk/issues/25069 3725 // Regression test for https://github.com/dart-lang/sdk/issues/25069
3748 checkFile(''' 3726 checkFile('''
3749 typedef int Foo(); 3727 typedef int Foo();
3750 void foo() {} 3728 void foo() {}
3751 void main () { 3729 void main () {
3752 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); 3730 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo();
3753 } 3731 }
3754 '''); 3732 ''');
3755 } 3733 }
3756 } 3734 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/strong_mode_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698