OLD | NEW |
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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 test() { | 74 test() { |
75 A a = new A(); | 75 A a = new A(); |
76 B b = new B(); | 76 B b = new B(); |
77 var c = foo(); | 77 var c = foo(); |
78 a = a * b; | 78 a = a * b; |
79 a = a * /*info:DYNAMIC_CAST*/c; | 79 a = a * /*info:DYNAMIC_CAST*/c; |
80 a = a / b; | 80 a = a / b; |
81 a = a ~/ b; | 81 a = a ~/ b; |
82 a = a % b; | 82 a = a % b; |
83 a = a + b; | 83 a = a + b; |
84 a = a + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a; | 84 a = a + /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a; |
85 a = a - b; | 85 a = a - b; |
86 b = /*error:INVALID_ASSIGNMENT*/b - b; | 86 b = /*error:INVALID_ASSIGNMENT*/b - b; |
87 a = a << b; | 87 a = a << b; |
88 a = a >> b; | 88 a = a >> b; |
89 a = a & b; | 89 a = a & b; |
90 a = a ^ b; | 90 a = a ^ b; |
91 a = a | b; | 91 a = a | b; |
92 c = (/*info:DYNAMIC_INVOKE*/c + b); | 92 c = (/*info:DYNAMIC_INVOKE*/c + b); |
93 | 93 |
94 String x = 'hello'; | 94 String x = 'hello'; |
95 int y = 42; | 95 int y = 42; |
96 x = x + x; | 96 x = x + x; |
97 x = x + /*info:DYNAMIC_CAST*/c; | 97 x = x + /*info:DYNAMIC_CAST*/c; |
98 x = x + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y; | 98 x = x + /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y; |
99 | 99 |
100 bool p = true; | 100 bool p = true; |
101 p = p && p; | 101 p = p && p; |
102 p = p && /*info:DYNAMIC_CAST*/c; | 102 p = p && /*info:DYNAMIC_CAST*/c; |
103 p = (/*info:DYNAMIC_CAST*/c) && p; | 103 p = (/*info:DYNAMIC_CAST*/c) && p; |
104 p = (/*info:DYNAMIC_CAST*/c) && /*info:DYNAMIC_CAST*/c; | 104 p = (/*info:DYNAMIC_CAST*/c) && /*info:DYNAMIC_CAST*/c; |
105 p = /*error:NON_BOOL_OPERAND*/y && p; | 105 p = /*error:NON_BOOL_OPERAND*/y && p; |
106 p = c == y; | 106 p = c == y; |
107 | 107 |
108 a = a[b]; | 108 a = a[b]; |
109 a = a[/*info:DYNAMIC_CAST*/c]; | 109 a = a[/*info:DYNAMIC_CAST*/c]; |
110 c = (/*info:DYNAMIC_INVOKE*/c[b]); | 110 c = (/*info:DYNAMIC_INVOKE*/c[b]); |
111 a[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y]; | 111 a[/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y]; |
112 } | 112 } |
113 '''); | 113 '''); |
114 } | 114 } |
115 | 115 |
116 void test_castsInConditions() { | 116 void test_castsInConditions() { |
117 checkFile(''' | 117 checkFile(''' |
118 main() { | 118 main() { |
119 bool b = true; | 119 bool b = true; |
120 num x = b ? 1 : 2.3; | 120 num x = b ? 1 : 2.3; |
121 int y = /*info:ASSIGNMENT_CAST*/b ? 1 : 2.3; | 121 int y = /*info:ASSIGNMENT_CAST*/b ? 1 : 2.3; |
(...skipping 27 matching lines...) Expand all Loading... |
149 class A {} | 149 class A {} |
150 class B {} | 150 class B {} |
151 | 151 |
152 abstract class I1 { | 152 abstract class I1 { |
153 m(A a); | 153 m(A a); |
154 } | 154 } |
155 abstract class Base implements I1 {} | 155 abstract class Base implements I1 {} |
156 | 156 |
157 class T1 extends Base { | 157 class T1 extends Base { |
158 /*error:INVALID_METHOD_OVERRIDE*/m( | 158 /*error:INVALID_METHOD_OVERRIDE*/m( |
159 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 159 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
160 } | 160 } |
161 '''); | 161 '''); |
162 } | 162 } |
163 | 163 |
164 void test_classOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { | 164 void test_classOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { |
165 checkFile(''' | 165 checkFile(''' |
166 class A {} | 166 class A {} |
167 class B {} | 167 class B {} |
168 | 168 |
169 abstract class I1 { | 169 abstract class I1 { |
170 m(A a); | 170 m(A a); |
171 } | 171 } |
172 | 172 |
173 class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base | 173 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base |
174 implements I1 {} | 174 implements I1 {} |
175 | 175 |
176 class T1 extends Base { | 176 class T1 extends Base { |
177 // not reported technically because if the class is concrete, | 177 // not reported technically because if the class is concrete, |
178 // it should implement all its interfaces and hence it is | 178 // it should implement all its interfaces and hence it is |
179 // sufficient to check overrides against it. | 179 // sufficient to check overrides against it. |
180 m(/*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 180 m(/*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
181 } | 181 } |
182 '''); | 182 '''); |
183 } | 183 } |
184 | 184 |
185 void test_classOverrideOfGrandInterface_interfaceOfInterfaceOfChild() { | 185 void test_classOverrideOfGrandInterface_interfaceOfInterfaceOfChild() { |
186 checkFile(''' | 186 checkFile(''' |
187 class A {} | 187 class A {} |
188 class B {} | 188 class B {} |
189 | 189 |
190 abstract class I1 { | 190 abstract class I1 { |
191 m(A a); | 191 m(A a); |
192 } | 192 } |
193 abstract class I2 implements I1 {} | 193 abstract class I2 implements I1 {} |
194 | 194 |
195 class T1 implements I2 { | 195 class T1 implements I2 { |
196 /*error:INVALID_METHOD_OVERRIDE*/m( | 196 /*error:INVALID_METHOD_OVERRIDE*/m( |
197 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 197 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
198 } | 198 } |
199 '''); | 199 '''); |
200 } | 200 } |
201 | 201 |
202 void test_classOverrideOfGrandInterface_mixinOfInterfaceOfChild() { | 202 void test_classOverrideOfGrandInterface_mixinOfInterfaceOfChild() { |
203 checkFile(''' | 203 checkFile(''' |
204 class A {} | 204 class A {} |
205 class B {} | 205 class B {} |
206 | 206 |
207 abstract class M1 { | 207 abstract class M1 { |
208 m(A a); | 208 m(A a); |
209 } | 209 } |
210 abstract class I2 extends Object with M1 {} | 210 abstract class I2 extends Object with M1 {} |
211 | 211 |
212 class T1 implements I2 { | 212 class T1 implements I2 { |
213 /*error:INVALID_METHOD_OVERRIDE*/m( | 213 /*error:INVALID_METHOD_OVERRIDE*/m( |
214 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 214 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
215 } | 215 } |
216 '''); | 216 '''); |
217 } | 217 } |
218 | 218 |
219 void test_classOverrideOfGrandInterface_superclassOfInterfaceOfChild() { | 219 void test_classOverrideOfGrandInterface_superclassOfInterfaceOfChild() { |
220 checkFile(''' | 220 checkFile(''' |
221 class A {} | 221 class A {} |
222 class B {} | 222 class B {} |
223 | 223 |
224 abstract class I1 { | 224 abstract class I1 { |
225 m(A a); | 225 m(A a); |
226 } | 226 } |
227 abstract class I2 extends I1 {} | 227 abstract class I2 extends I1 {} |
228 | 228 |
229 class T1 implements I2 { | 229 class T1 implements I2 { |
230 /*error:INVALID_METHOD_OVERRIDE*/m( | 230 /*error:INVALID_METHOD_OVERRIDE*/m( |
231 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 231 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
232 } | 232 } |
233 '''); | 233 '''); |
234 } | 234 } |
235 | 235 |
236 void test_compoundAssignments() { | 236 void test_compoundAssignments() { |
237 checkFile(''' | 237 checkFile(''' |
238 class A { | 238 class A { |
239 A operator *(B b) => null; | 239 A operator *(B b) => null; |
240 A operator /(B b) => null; | 240 A operator /(B b) => null; |
241 A operator ~/(B b) => null; | 241 A operator ~/(B b) => null; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 A a = new A(); | 287 A a = new A(); |
288 B b = new B(); | 288 B b = new B(); |
289 var c = foo(); | 289 var c = foo(); |
290 a = a * b; | 290 a = a * b; |
291 a *= b; | 291 a *= b; |
292 a *= /*info:DYNAMIC_CAST*/c; | 292 a *= /*info:DYNAMIC_CAST*/c; |
293 a /= b; | 293 a /= b; |
294 a ~/= b; | 294 a ~/= b; |
295 a %= b; | 295 a %= b; |
296 a += b; | 296 a += b; |
297 a += /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a; | 297 a += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a; |
298 a -= b; | 298 a -= b; |
299 /*error:STATIC_TYPE_ERROR*/b -= /*error:INVALID_ASSIGNMENT*/b; | 299 /*error:STATIC_TYPE_ERROR*/b -= /*error:INVALID_ASSIGNMENT*/b; |
300 a <<= b; | 300 a <<= b; |
301 a >>= b; | 301 a >>= b; |
302 a &= b; | 302 a &= b; |
303 a ^= b; | 303 a ^= b; |
304 a |= b; | 304 a |= b; |
305 /*info:DYNAMIC_INVOKE*/c += b; | 305 /*info:DYNAMIC_INVOKE*/c += b; |
306 | 306 |
307 var d = new D(); | 307 var d = new D(); |
308 a[b] += d; | 308 a[b] += d; |
309 a[/*info:DYNAMIC_CAST*/c] += d; | 309 a[/*info:DYNAMIC_CAST*/c] += d; |
310 a[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z] += d; | 310 a[/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z] += d; |
311 a[b] += /*info:DYNAMIC_CAST*/c; | 311 a[b] += /*info:DYNAMIC_CAST*/c; |
312 a[b] += /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z; | 312 a[b] += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z; |
313 /*info:DYNAMIC_INVOKE,info:DYNAMIC_INVOKE*/c[b] += d; | 313 /*info:DYNAMIC_INVOKE,info:DYNAMIC_INVOKE*/c[b] += d; |
314 } | 314 } |
315 '''); | 315 '''); |
316 } | 316 } |
317 | 317 |
318 void test_constructorInvalid() { | 318 void test_constructorInvalid() { |
319 // Regression test for https://github.com/dart-lang/sdk/issues/26695 | 319 // Regression test for https://github.com/dart-lang/sdk/issues/26695 |
320 checkFile(''' | 320 checkFile(''' |
321 class A { | 321 class A { |
322 B({ /*error:FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR*/this.test: 1.0 }) {} | 322 B({ /*error:FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR*/this.test: 1.0 }) {} |
323 final double test = 0.0; | 323 final double test = 0.0; |
324 } | 324 } |
325 '''); | 325 '''); |
326 } | 326 } |
327 | 327 |
328 void test_constructors() { | 328 void test_constructors() { |
329 checkFile(''' | 329 checkFile(''' |
330 const num z = 25; | 330 const num z = 25; |
331 Object obj = "world"; | 331 Object obj = "world"; |
332 | 332 |
333 class A { | 333 class A { |
334 int x; | 334 int x; |
335 String y; | 335 String y; |
336 | 336 |
337 A(this.x) : this.y = /*warning:FIELD_INITIALIZER_NOT_ASSIGNABLE*/42; | 337 A(this.x) : this.y = /*error:FIELD_INITIALIZER_NOT_ASSIGNABLE*/42; |
338 | 338 |
339 A.c1(p): this.x = /*info:DOWN_CAST_IMPLICIT*/z, this.y = /*info:DYNAMIC_CAST*/
p; | 339 A.c1(p): this.x = /*info:DOWN_CAST_IMPLICIT*/z, this.y = /*info:DYNAMIC_CAST*/
p; |
340 | 340 |
341 A.c2(this.x, this.y); | 341 A.c2(this.x, this.y); |
342 | 342 |
343 A.c3(/*error:INVALID_PARAMETER_DECLARATION*/num this.x, String this.y); | 343 A.c3(/*error:INVALID_PARAMETER_DECLARATION*/num this.x, String this.y); |
344 } | 344 } |
345 | 345 |
346 class B extends A { | 346 class B extends A { |
347 B() : super(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello"); | 347 B() : super(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello"); |
348 | 348 |
349 B.c2(int x, String y) : super.c2(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y, | 349 B.c2(int x, String y) : super.c2(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y, |
350 /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/x); | 350 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/x); |
351 | 351 |
352 B.c3(num x, Object y) : super.c3(x, /*info:DOWN_CAST_IMPLICIT*/y); | 352 B.c3(num x, Object y) : super.c3(x, /*info:DOWN_CAST_IMPLICIT*/y); |
353 } | 353 } |
354 | 354 |
355 void main() { | 355 void main() { |
356 A a = new A.c2(/*info:DOWN_CAST_IMPLICIT*/z, /*warning:ARGUMENT_TYPE_NOT_ASSI
GNABLE*/z); | 356 A a = new A.c2(/*info:DOWN_CAST_IMPLICIT*/z, /*error:ARGUMENT_TYPE_NOT_ASSIGN
ABLE*/z); |
357 var b = new B.c2(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*info:DOWN
_CAST_IMPLICIT*/obj); | 357 var b = new B.c2(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*info:DOWN_C
AST_IMPLICIT*/obj); |
358 } | 358 } |
359 '''); | 359 '''); |
360 } | 360 } |
361 | 361 |
362 void test_conversionAndDynamicInvoke() { | 362 void test_conversionAndDynamicInvoke() { |
363 addFile( | 363 addFile( |
364 ''' | 364 ''' |
365 dynamic toString = (int x) => x + 42; | 365 dynamic toString = (int x) => x + 42; |
366 dynamic hashCode = "hello"; | 366 dynamic hashCode = "hello"; |
367 ''', | 367 ''', |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 } | 450 } |
451 void main() { | 451 void main() { |
452 { | 452 { |
453 B f = new B(); | 453 B f = new B(); |
454 int x; | 454 int x; |
455 double y; | 455 double y; |
456 x = f(3); | 456 x = f(3); |
457 x = /*error:INVALID_ASSIGNMENT*/f.col(3.0); | 457 x = /*error:INVALID_ASSIGNMENT*/f.col(3.0); |
458 y = /*error:INVALID_ASSIGNMENT*/f(3); | 458 y = /*error:INVALID_ASSIGNMENT*/f(3); |
459 y = f.col(3.0); | 459 y = f.col(3.0); |
460 f(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3.0); | 460 f(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3.0); |
461 f.col(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); | 461 f.col(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); |
462 } | 462 } |
463 { | 463 { |
464 Function f = new B(); | 464 Function f = new B(); |
465 int x; | 465 int x; |
466 double y; | 466 double y; |
467 x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3); | 467 x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3); |
468 x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE, info:INVALID_ASSIGNMENT*/f.col
(3.0); | 468 x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE, info:INVALID_ASSIGNMENT*/f.col
(3.0); |
469 y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3); | 469 y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3); |
470 y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f.col(3.0); | 470 y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f.col(3.0); |
471 /*info:DYNAMIC_INVOKE*/f(3.0); | 471 /*info:DYNAMIC_INVOKE*/f(3.0); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 B f4; | 553 B f4; |
554 } | 554 } |
555 | 555 |
556 class Child extends Base { | 556 class Child extends Base { |
557 /*error:INVALID_FIELD_OVERRIDE,error:INVALID_METHOD_OVERRIDE*/A get f1 => null
; | 557 /*error:INVALID_FIELD_OVERRIDE,error:INVALID_METHOD_OVERRIDE*/A get f1 => null
; |
558 /*error:INVALID_FIELD_OVERRIDE*/C get f2 => null; | 558 /*error:INVALID_FIELD_OVERRIDE*/C get f2 => null; |
559 /*error:INVALID_FIELD_OVERRIDE*/get f3 => null; | 559 /*error:INVALID_FIELD_OVERRIDE*/get f3 => null; |
560 /*error:INVALID_FIELD_OVERRIDE,error:INVALID_METHOD_OVERRIDE*/dynamic get f4 =
> null; | 560 /*error:INVALID_FIELD_OVERRIDE,error:INVALID_METHOD_OVERRIDE*/dynamic get f4 =
> null; |
561 } | 561 } |
562 | 562 |
563 class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR*/Child2 impleme
nts Base { | 563 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR*/Child2 implement
s Base { |
564 /*error:INVALID_METHOD_OVERRIDE*/A get f1 => null; | 564 /*error:INVALID_METHOD_OVERRIDE*/A get f1 => null; |
565 C get f2 => null; | 565 C get f2 => null; |
566 get f3 => null; | 566 get f3 => null; |
567 /*error:INVALID_METHOD_OVERRIDE*/dynamic get f4 => null; | 567 /*error:INVALID_METHOD_OVERRIDE*/dynamic get f4 => null; |
568 } | 568 } |
569 '''); | 569 '''); |
570 } | 570 } |
571 | 571 |
572 void test_fieldOverride_fuzzyArrows() { | 572 void test_fieldOverride_fuzzyArrows() { |
573 checkFile(''' | 573 checkFile(''' |
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1767 checkFile(''' | 1767 checkFile(''' |
1768 class A {} | 1768 class A {} |
1769 class B extends A {} | 1769 class B extends A {} |
1770 | 1770 |
1771 class Base<T extends B> { | 1771 class Base<T extends B> { |
1772 T foo() => null; | 1772 T foo() => null; |
1773 } | 1773 } |
1774 | 1774 |
1775 class Derived<S extends A> extends Base<B> { | 1775 class Derived<S extends A> extends Base<B> { |
1776 /*error:INVALID_METHOD_OVERRIDE*/S | 1776 /*error:INVALID_METHOD_OVERRIDE*/S |
1777 /*warning:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/foo() => null; | 1777 /*error:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/foo() => null; |
1778 } | 1778 } |
1779 | 1779 |
1780 class Derived2<S extends B> extends Base<B> { | 1780 class Derived2<S extends B> extends Base<B> { |
1781 S foo() => null; | 1781 S foo() => null; |
1782 } | 1782 } |
1783 '''); | 1783 '''); |
1784 } | 1784 } |
1785 | 1785 |
1786 void test_genericFunctionWrongNumberOfArguments() { | 1786 void test_genericFunctionWrongNumberOfArguments() { |
1787 checkFile(r''' | 1787 checkFile(r''' |
1788 /*=T*/ foo/*<T>*/(/*=T*/ x, /*=T*/ y) => x; | 1788 /*=T*/ foo/*<T>*/(/*=T*/ x, /*=T*/ y) => x; |
1789 /*=T*/ bar/*<T>*/({/*=T*/ x, /*=T*/ y}) => x; | 1789 /*=T*/ bar/*<T>*/({/*=T*/ x, /*=T*/ y}) => x; |
1790 | 1790 |
1791 main() { | 1791 main() { |
1792 String x; | 1792 String x; |
1793 // resolving these shouldn't crash. | 1793 // resolving these shouldn't crash. |
1794 foo/*warning:EXTRA_POSITIONAL_ARGUMENTS*/(1, 2, 3); | 1794 foo/*error:EXTRA_POSITIONAL_ARGUMENTS*/(1, 2, 3); |
1795 x = foo/*warning:EXTRA_POSITIONAL_ARGUMENTS*/('1', '2', '3'); | 1795 x = foo/*error:EXTRA_POSITIONAL_ARGUMENTS*/('1', '2', '3'); |
1796 foo/*warning:NOT_ENOUGH_REQUIRED_ARGUMENTS*/(1); | 1796 foo/*error:NOT_ENOUGH_REQUIRED_ARGUMENTS*/(1); |
1797 x = foo/*warning:NOT_ENOUGH_REQUIRED_ARGUMENTS*/('1'); | 1797 x = foo/*error:NOT_ENOUGH_REQUIRED_ARGUMENTS*/('1'); |
1798 x = /*info:DYNAMIC_CAST*/foo/*warning:EXTRA_POSITIONAL_ARGUMENTS*/(1, 2, 3); | 1798 x = /*info:DYNAMIC_CAST*/foo/*error:EXTRA_POSITIONAL_ARGUMENTS*/(1, 2, 3); |
1799 x = /*info:DYNAMIC_CAST*/foo/*warning:NOT_ENOUGH_REQUIRED_ARGUMENTS*/(1); | 1799 x = /*info:DYNAMIC_CAST*/foo/*error:NOT_ENOUGH_REQUIRED_ARGUMENTS*/(1); |
1800 | 1800 |
1801 // named arguments | 1801 // named arguments |
1802 bar(y: 1, x: 2, /*warning:UNDEFINED_NAMED_PARAMETER*/z: 3); | 1802 bar(y: 1, x: 2, /*error:UNDEFINED_NAMED_PARAMETER*/z: 3); |
1803 x = bar(/*warning:UNDEFINED_NAMED_PARAMETER*/z: '1', x: '2', y: '3'); | 1803 x = bar(/*error:UNDEFINED_NAMED_PARAMETER*/z: '1', x: '2', y: '3'); |
1804 bar(y: 1); | 1804 bar(y: 1); |
1805 x = bar(x: '1', /*warning:UNDEFINED_NAMED_PARAMETER*/z: 42); | 1805 x = bar(x: '1', /*error:UNDEFINED_NAMED_PARAMETER*/z: 42); |
1806 x = /*info:DYNAMIC_CAST*/bar(y: 1, x: 2, /*warning:UNDEFINED_NAMED_PARAMETER*/
z: 3); | 1806 x = /*info:DYNAMIC_CAST*/bar(y: 1, x: 2, /*error:UNDEFINED_NAMED_PARAMETER*/z:
3); |
1807 x = /*info:DYNAMIC_CAST*/bar(x: 1); | 1807 x = /*info:DYNAMIC_CAST*/bar(x: 1); |
1808 } | 1808 } |
1809 '''); | 1809 '''); |
1810 } | 1810 } |
1811 | 1811 |
1812 void test_genericMethodOverride() { | 1812 void test_genericMethodOverride() { |
1813 checkFile(''' | 1813 checkFile(''' |
1814 class Future<T> { | 1814 class Future<T> { |
1815 /*=S*/ then/*<S>*/(/*=S*/ onValue(T t)) => null; | 1815 /*=S*/ then/*<S>*/(/*=S*/ onValue(T t)) => null; |
1816 } | 1816 } |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2160 checkFile(''' | 2160 checkFile(''' |
2161 class A {} | 2161 class A {} |
2162 class B {} | 2162 class B {} |
2163 | 2163 |
2164 class Base { | 2164 class Base { |
2165 A f; | 2165 A f; |
2166 } | 2166 } |
2167 | 2167 |
2168 class T1 extends Base { | 2168 class T1 extends Base { |
2169 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE
LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B get | 2169 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE
LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B get |
2170 /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null; | 2170 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null; |
2171 } | 2171 } |
2172 | 2172 |
2173 class T2 extends Base { | 2173 class T2 extends Base { |
2174 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE
LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/set f( | 2174 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_FIE
LD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/set f( |
2175 /*warning:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null; | 2175 /*error:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null; |
2176 } | 2176 } |
2177 | 2177 |
2178 class T3 extends Base { | 2178 class T3 extends Base { |
2179 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/final B | 2179 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/final B |
2180 /*warning:FINAL_NOT_INITIALIZED, warning:INVALID_GETTER_OVERRIDE_RETURN_TY
PE*/f; | 2180 /*warning:FINAL_NOT_INITIALIZED, error:INVALID_GETTER_OVERRIDE_RETURN_TYPE
*/f; |
2181 } | 2181 } |
2182 class T4 extends Base { | 2182 class T4 extends Base { |
2183 // two: one for the getter one for the setter. | 2183 // two: one for the getter one for the setter. |
2184 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE, error:INVALID_M
ETHOD_OVERRIDE*/B | 2184 /*error:INVALID_FIELD_OVERRIDE, error:INVALID_METHOD_OVERRIDE, error:INVALID_M
ETHOD_OVERRIDE*/B |
2185 /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE, warning:INVALID_SETTER_OVER
RIDE_NORMAL_PARAM_TYPE*/f; | 2185 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE, error:INVALID_SETTER_OVERRIDE
_NORMAL_PARAM_TYPE*/f; |
2186 } | 2186 } |
2187 | 2187 |
2188 class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T5 implements B
ase { | 2188 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T5 implements Bas
e { |
2189 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET
HOD_OVERRIDE*/B get | 2189 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET
HOD_OVERRIDE*/B get |
2190 /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null; | 2190 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null; |
2191 } | 2191 } |
2192 | 2192 |
2193 class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T6 implements B
ase { | 2193 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T6 implements Bas
e { |
2194 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET
HOD_OVERRIDE*/set f( | 2194 /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_MET
HOD_OVERRIDE*/set f( |
2195 /*warning:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null; | 2195 /*error:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null; |
2196 } | 2196 } |
2197 | 2197 |
2198 class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T7 implements B
ase { | 2198 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T7 implements Bas
e { |
2199 /*error:INVALID_METHOD_OVERRIDE*/final B | 2199 /*error:INVALID_METHOD_OVERRIDE*/final B |
2200 /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f = null; | 2200 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f = null; |
2201 } | 2201 } |
2202 class T8 implements Base { | 2202 class T8 implements Base { |
2203 // two: one for the getter one for the setter. | 2203 // two: one for the getter one for the setter. |
2204 /*error:INVALID_METHOD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B | 2204 /*error:INVALID_METHOD_OVERRIDE, error:INVALID_METHOD_OVERRIDE*/B |
2205 /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE, warning:INVALID_SETTER_OVER
RIDE_NORMAL_PARAM_TYPE*/f; | 2205 /*error:INVALID_GETTER_OVERRIDE_RETURN_TYPE, error:INVALID_SETTER_OVERRIDE
_NORMAL_PARAM_TYPE*/f; |
2206 } | 2206 } |
2207 '''); | 2207 '''); |
2208 } | 2208 } |
2209 | 2209 |
2210 void test_invalidOverrides_childOverride2() { | 2210 void test_invalidOverrides_childOverride2() { |
2211 checkFile(''' | 2211 checkFile(''' |
2212 class A {} | 2212 class A {} |
2213 class B {} | 2213 class B {} |
2214 | 2214 |
2215 class Base { | 2215 class Base { |
2216 m(A a) {} | 2216 m(A a) {} |
2217 } | 2217 } |
2218 | 2218 |
2219 class Test extends Base { | 2219 class Test extends Base { |
2220 /*error:INVALID_METHOD_OVERRIDE*/m( | 2220 /*error:INVALID_METHOD_OVERRIDE*/m( |
2221 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2221 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2222 } | 2222 } |
2223 '''); | 2223 '''); |
2224 } | 2224 } |
2225 | 2225 |
2226 void test_invalidOverrides_classOverrideOfInterface() { | 2226 void test_invalidOverrides_classOverrideOfInterface() { |
2227 checkFile(''' | 2227 checkFile(''' |
2228 class A {} | 2228 class A {} |
2229 class B {} | 2229 class B {} |
2230 | 2230 |
2231 abstract class I { | 2231 abstract class I { |
2232 m(A a); | 2232 m(A a); |
2233 } | 2233 } |
2234 | 2234 |
2235 class T1 implements I { | 2235 class T1 implements I { |
2236 /*error:INVALID_METHOD_OVERRIDE*/m( | 2236 /*error:INVALID_METHOD_OVERRIDE*/m( |
2237 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2237 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2238 } | 2238 } |
2239 '''); | 2239 '''); |
2240 } | 2240 } |
2241 | 2241 |
2242 void test_invalidOverrides_doubleOverride() { | 2242 void test_invalidOverrides_doubleOverride() { |
2243 checkFile(''' | 2243 checkFile(''' |
2244 class A {} | 2244 class A {} |
2245 class B {} | 2245 class B {} |
2246 | 2246 |
2247 class Grandparent { | 2247 class Grandparent { |
2248 m(A a) {} | 2248 m(A a) {} |
2249 } | 2249 } |
2250 class Parent extends Grandparent { | 2250 class Parent extends Grandparent { |
2251 m(A a) {} | 2251 m(A a) {} |
2252 } | 2252 } |
2253 | 2253 |
2254 class Test extends Parent { | 2254 class Test extends Parent { |
2255 // Reported only once | 2255 // Reported only once |
2256 /*error:INVALID_METHOD_OVERRIDE*/m( | 2256 /*error:INVALID_METHOD_OVERRIDE*/m( |
2257 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2257 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2258 } | 2258 } |
2259 '''); | 2259 '''); |
2260 } | 2260 } |
2261 | 2261 |
2262 void test_invalidOverrides_doubleOverride2() { | 2262 void test_invalidOverrides_doubleOverride2() { |
2263 checkFile(''' | 2263 checkFile(''' |
2264 class A {} | 2264 class A {} |
2265 class B {} | 2265 class B {} |
2266 | 2266 |
2267 class Grandparent { | 2267 class Grandparent { |
2268 m(A a) {} | 2268 m(A a) {} |
2269 } | 2269 } |
2270 class Parent extends Grandparent { | 2270 class Parent extends Grandparent { |
2271 /*error:INVALID_METHOD_OVERRIDE*/m( | 2271 /*error:INVALID_METHOD_OVERRIDE*/m( |
2272 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2272 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2273 } | 2273 } |
2274 | 2274 |
2275 class Test extends Parent { | 2275 class Test extends Parent { |
2276 m(B a) {} | 2276 m(B a) {} |
2277 } | 2277 } |
2278 '''); | 2278 '''); |
2279 } | 2279 } |
2280 | 2280 |
2281 void test_invalidOverrides_grandChildOverride() { | 2281 void test_invalidOverrides_grandChildOverride() { |
2282 checkFile(''' | 2282 checkFile(''' |
2283 class A {} | 2283 class A {} |
2284 class B {} | 2284 class B {} |
2285 | 2285 |
2286 class Grandparent { | 2286 class Grandparent { |
2287 m(A a) {} | 2287 m(A a) {} |
2288 int x; | 2288 int x; |
2289 } | 2289 } |
2290 class Parent extends Grandparent { | 2290 class Parent extends Grandparent { |
2291 } | 2291 } |
2292 | 2292 |
2293 class Test extends Parent { | 2293 class Test extends Parent { |
2294 /*error:INVALID_METHOD_OVERRIDE*/m( | 2294 /*error:INVALID_METHOD_OVERRIDE*/m( |
2295 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2295 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2296 /*error:INVALID_FIELD_OVERRIDE*/int x; | 2296 /*error:INVALID_FIELD_OVERRIDE*/int x; |
2297 } | 2297 } |
2298 '''); | 2298 '''); |
2299 } | 2299 } |
2300 | 2300 |
2301 void test_invalidOverrides_mixinOverrideOfInterface() { | 2301 void test_invalidOverrides_mixinOverrideOfInterface() { |
2302 checkFile(''' | 2302 checkFile(''' |
2303 class A {} | 2303 class A {} |
2304 class B {} | 2304 class B {} |
2305 | 2305 |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2616 | 2616 |
2617 void test_mixinOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { | 2617 void test_mixinOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { |
2618 checkFile(''' | 2618 checkFile(''' |
2619 class A {} | 2619 class A {} |
2620 class B {} | 2620 class B {} |
2621 | 2621 |
2622 abstract class I1 { | 2622 abstract class I1 { |
2623 m(A a); | 2623 m(A a); |
2624 } | 2624 } |
2625 | 2625 |
2626 class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base | 2626 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base |
2627 implements I1 {} | 2627 implements I1 {} |
2628 | 2628 |
2629 class M { | 2629 class M { |
2630 m(B a) {} | 2630 m(B a) {} |
2631 } | 2631 } |
2632 | 2632 |
2633 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base | 2633 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base |
2634 with M {} | 2634 with M {} |
2635 '''); | 2635 '''); |
2636 } | 2636 } |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2791 } | 2791 } |
2792 | 2792 |
2793 class Base { | 2793 class Base { |
2794 m(B a) {} | 2794 m(B a) {} |
2795 } | 2795 } |
2796 | 2796 |
2797 // Note: no error reported in `extends Base` to avoid duplicating | 2797 // Note: no error reported in `extends Base` to avoid duplicating |
2798 // the error in T1. | 2798 // the error in T1. |
2799 class T1 extends Base implements I1 { | 2799 class T1 extends Base implements I1 { |
2800 /*error:INVALID_METHOD_OVERRIDE*/m( | 2800 /*error:INVALID_METHOD_OVERRIDE*/m( |
2801 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2801 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2802 } | 2802 } |
2803 | 2803 |
2804 // If there is no error in the class, we do report the error at | 2804 // If there is no error in the class, we do report the error at |
2805 // the base class: | 2805 // the base class: |
2806 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 | 2806 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 |
2807 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base | 2807 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base |
2808 implements I1 {} | 2808 implements I1 {} |
2809 '''); | 2809 '''); |
2810 } | 2810 } |
2811 | 2811 |
2812 void | 2812 void |
2813 test_noDuplicateReportsFromOverridingInterfaces_typeAndMixinOverrideSameMe
thodInInterface() { | 2813 test_noDuplicateReportsFromOverridingInterfaces_typeAndMixinOverrideSameMe
thodInInterface() { |
2814 checkFile(''' | 2814 checkFile(''' |
2815 class A {} | 2815 class A {} |
2816 class B {} | 2816 class B {} |
2817 | 2817 |
2818 abstract class I1 { | 2818 abstract class I1 { |
2819 m(A a); | 2819 m(A a); |
2820 } | 2820 } |
2821 | 2821 |
2822 class M { | 2822 class M { |
2823 m(B a) {} | 2823 m(B a) {} |
2824 } | 2824 } |
2825 | 2825 |
2826 class T1 extends Object with M implements I1 { | 2826 class T1 extends Object with M implements I1 { |
2827 /*error:INVALID_METHOD_OVERRIDE*/m( | 2827 /*error:INVALID_METHOD_OVERRIDE*/m( |
2828 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2828 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2829 } | 2829 } |
2830 | 2830 |
2831 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 | 2831 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T2 |
2832 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M | 2832 extends Object with /*error:INVALID_METHOD_OVERRIDE_FROM_MIXIN*/M |
2833 implements I1 {} | 2833 implements I1 {} |
2834 '''); | 2834 '''); |
2835 } | 2835 } |
2836 | 2836 |
2837 void | 2837 void |
2838 test_noDuplicateReportsFromOverridingInterfaces_typeOverridesSomeMethodInM
ultipleInterfaces() { | 2838 test_noDuplicateReportsFromOverridingInterfaces_typeOverridesSomeMethodInM
ultipleInterfaces() { |
2839 checkFile(''' | 2839 checkFile(''' |
2840 class A {} | 2840 class A {} |
2841 class B {} | 2841 class B {} |
2842 | 2842 |
2843 abstract class I1 { | 2843 abstract class I1 { |
2844 m(A a); | 2844 m(A a); |
2845 } | 2845 } |
2846 abstract class I2 implements I1 { | 2846 abstract class I2 implements I1 { |
2847 m(A a); | 2847 m(A a); |
2848 } | 2848 } |
2849 | 2849 |
2850 class Base {} | 2850 class Base {} |
2851 | 2851 |
2852 class T1 implements I2 { | 2852 class T1 implements I2 { |
2853 /*error:INVALID_METHOD_OVERRIDE*/m( | 2853 /*error:INVALID_METHOD_OVERRIDE*/m( |
2854 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 2854 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
2855 } | 2855 } |
2856 '''); | 2856 '''); |
2857 } | 2857 } |
2858 | 2858 |
2859 void test_nullCoalescingOperator() { | 2859 void test_nullCoalescingOperator() { |
2860 checkFile(''' | 2860 checkFile(''' |
2861 class A {} | 2861 class A {} |
2862 class C<T> {} | 2862 class C<T> {} |
2863 main() { | 2863 main() { |
2864 A a, b; | 2864 A a, b; |
(...skipping 21 matching lines...) Expand all Loading... |
2886 | 2886 |
2887 int _m1() => null; | 2887 int _m1() => null; |
2888 } | 2888 } |
2889 | 2889 |
2890 class GrandChild extends main.Child { | 2890 class GrandChild extends main.Child { |
2891 /*error:INVALID_FIELD_OVERRIDE*/var _f2; | 2891 /*error:INVALID_FIELD_OVERRIDE*/var _f2; |
2892 /*error:INVALID_FIELD_OVERRIDE*/var _f3; | 2892 /*error:INVALID_FIELD_OVERRIDE*/var _f3; |
2893 var _f4; | 2893 var _f4; |
2894 | 2894 |
2895 /*error:INVALID_METHOD_OVERRIDE*/String | 2895 /*error:INVALID_METHOD_OVERRIDE*/String |
2896 /*warning:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/_m1() => null; | 2896 /*error:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/_m1() => null; |
2897 } | 2897 } |
2898 ''', | 2898 ''', |
2899 name: '/helper.dart'); | 2899 name: '/helper.dart'); |
2900 checkFile(''' | 2900 checkFile(''' |
2901 import 'helper.dart' as helper; | 2901 import 'helper.dart' as helper; |
2902 | 2902 |
2903 class Child extends helper.Base { | 2903 class Child extends helper.Base { |
2904 /*error:INVALID_FIELD_OVERRIDE*/var f1; | 2904 /*error:INVALID_FIELD_OVERRIDE*/var f1; |
2905 var _f2; | 2905 var _f2; |
2906 var _f4; | 2906 var _f4; |
2907 | 2907 |
2908 String _m1() => null; | 2908 String _m1() => null; |
2909 } | 2909 } |
2910 '''); | 2910 '''); |
2911 } | 2911 } |
2912 | 2912 |
2913 void test_redirectingConstructor() { | 2913 void test_redirectingConstructor() { |
2914 checkFile(''' | 2914 checkFile(''' |
2915 class A { | 2915 class A { |
2916 A(A x) {} | 2916 A(A x) {} |
2917 A.two() : this(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); | 2917 A.two() : this(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); |
2918 } | 2918 } |
2919 '''); | 2919 '''); |
2920 } | 2920 } |
2921 | 2921 |
2922 void test_relaxedCasts() { | 2922 void test_relaxedCasts() { |
2923 checkFile(''' | 2923 checkFile(''' |
2924 class A {} | 2924 class A {} |
2925 | 2925 |
2926 class L<T> {} | 2926 class L<T> {} |
2927 class M<T> extends L<T> {} | 2927 class M<T> extends L<T> {} |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3107 checkFile(''' | 3107 checkFile(''' |
3108 class A {} | 3108 class A {} |
3109 class B {} | 3109 class B {} |
3110 | 3110 |
3111 abstract class I1 { | 3111 abstract class I1 { |
3112 m(A a); | 3112 m(A a); |
3113 } | 3113 } |
3114 | 3114 |
3115 abstract class Base implements I1 { | 3115 abstract class Base implements I1 { |
3116 /*error:INVALID_METHOD_OVERRIDE*/m( | 3116 /*error:INVALID_METHOD_OVERRIDE*/m( |
3117 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 3117 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
3118 } | 3118 } |
3119 | 3119 |
3120 class T1 extends Base { | 3120 class T1 extends Base { |
3121 // we consider the base class incomplete because it is | 3121 // we consider the base class incomplete because it is |
3122 // abstract, so we report the error here too. | 3122 // abstract, so we report the error here too. |
3123 // TODO(sigmund): consider tracking overrides in a fine-grain | 3123 // TODO(sigmund): consider tracking overrides in a fine-grain |
3124 // manner, then this and the double-overrides would not be | 3124 // manner, then this and the double-overrides would not be |
3125 // reported. | 3125 // reported. |
3126 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {} | 3126 /*error:INVALID_METHOD_OVERRIDE*/m(B a) {} |
3127 } | 3127 } |
3128 '''); | 3128 '''); |
3129 } | 3129 } |
3130 | 3130 |
3131 void test_superclassOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { | 3131 void test_superclassOverrideOfGrandInterface_interfaceOfConcreteSuperclass() { |
3132 checkFile(''' | 3132 checkFile(''' |
3133 class A {} | 3133 class A {} |
3134 class B {} | 3134 class B {} |
3135 | 3135 |
3136 abstract class I1 { | 3136 abstract class I1 { |
3137 m(A a); | 3137 m(A a); |
3138 } | 3138 } |
3139 | 3139 |
3140 class Base implements I1 { | 3140 class Base implements I1 { |
3141 /*error:INVALID_METHOD_OVERRIDE*/m( | 3141 /*error:INVALID_METHOD_OVERRIDE*/m( |
3142 /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} | 3142 /*error:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {} |
3143 } | 3143 } |
3144 | 3144 |
3145 class T1 extends Base { | 3145 class T1 extends Base { |
3146 m(B a) {} | 3146 m(B a) {} |
3147 } | 3147 } |
3148 '''); | 3148 '''); |
3149 } | 3149 } |
3150 | 3150 |
3151 void test_superclassOverrideOfGrandInterface_interfaceOfInterfaceOfChild() { | 3151 void test_superclassOverrideOfGrandInterface_interfaceOfInterfaceOfChild() { |
3152 checkFile(''' | 3152 checkFile(''' |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3204 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 | 3204 class /*error:INCONSISTENT_METHOD_INHERITANCE*/T1 |
3205 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base | 3205 /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends Base |
3206 implements I2 {} | 3206 implements I2 {} |
3207 '''); | 3207 '''); |
3208 } | 3208 } |
3209 | 3209 |
3210 void test_superConstructor() { | 3210 void test_superConstructor() { |
3211 checkFile(''' | 3211 checkFile(''' |
3212 class A { A(A x) {} } | 3212 class A { A(A x) {} } |
3213 class B extends A { | 3213 class B extends A { |
3214 B() : super(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); | 3214 B() : super(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); |
3215 } | 3215 } |
3216 '''); | 3216 '''); |
3217 } | 3217 } |
3218 | 3218 |
3219 void test_ternaryOperator() { | 3219 void test_ternaryOperator() { |
3220 checkFile(''' | 3220 checkFile(''' |
3221 abstract class Comparable<T> { | 3221 abstract class Comparable<T> { |
3222 int compareTo(T other); | 3222 int compareTo(T other); |
3223 static int compare(Comparable a, Comparable b) => a.compareTo(b); | 3223 static int compare(Comparable a, Comparable b) => a.compareTo(b); |
3224 } | 3224 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3265 } | 3265 } |
3266 | 3266 |
3267 void test_typeCheckingLiterals() { | 3267 void test_typeCheckingLiterals() { |
3268 checkFile(''' | 3268 checkFile(''' |
3269 test() { | 3269 test() { |
3270 num n = 3; | 3270 num n = 3; |
3271 int i = 3; | 3271 int i = 3; |
3272 String s = "hello"; | 3272 String s = "hello"; |
3273 { | 3273 { |
3274 List<int> l = <int>[i]; | 3274 List<int> l = <int>[i]; |
3275 l = <int>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s]; | 3275 l = <int>[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s]; |
3276 l = <int>[/*info:DOWN_CAST_IMPLICIT*/n]; | 3276 l = <int>[/*info:DOWN_CAST_IMPLICIT*/n]; |
3277 l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*warning:LIST_ELEMENT_TYPE_NOT_
ASSIGNABLE*/s]; | 3277 l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*error:LIST_ELEMENT_TYPE_NOT_AS
SIGNABLE*/s]; |
3278 } | 3278 } |
3279 { | 3279 { |
3280 List l = /*info:INFERRED_TYPE_LITERAL*/[i]; | 3280 List l = /*info:INFERRED_TYPE_LITERAL*/[i]; |
3281 l = /*info:INFERRED_TYPE_LITERAL*/[s]; | 3281 l = /*info:INFERRED_TYPE_LITERAL*/[s]; |
3282 l = /*info:INFERRED_TYPE_LITERAL*/[n]; | 3282 l = /*info:INFERRED_TYPE_LITERAL*/[n]; |
3283 l = /*info:INFERRED_TYPE_LITERAL*/[i, n, s]; | 3283 l = /*info:INFERRED_TYPE_LITERAL*/[i, n, s]; |
3284 } | 3284 } |
3285 { | 3285 { |
3286 Map<String, int> m = <String, int>{s: i}; | 3286 Map<String, int> m = <String, int>{s: i}; |
3287 m = <String, int>{s: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; | 3287 m = <String, int>{s: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; |
3288 m = <String, int>{s: /*info:DOWN_CAST_IMPLICIT*/n}; | 3288 m = <String, int>{s: /*info:DOWN_CAST_IMPLICIT*/n}; |
3289 m = <String, int>{s: i, | 3289 m = <String, int>{s: i, |
3290 s: /*info:DOWN_CAST_IMPLICIT*/n, | 3290 s: /*info:DOWN_CAST_IMPLICIT*/n, |
3291 s: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; | 3291 s: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; |
3292 } | 3292 } |
3293 // TODO(leafp): We can't currently test for key errors since the | 3293 // TODO(leafp): We can't currently test for key errors since the |
3294 // error marker binds to the entire entry. | 3294 // error marker binds to the entire entry. |
3295 { | 3295 { |
3296 Map m = /*info:INFERRED_TYPE_LITERAL*/{s: i}; | 3296 Map m = /*info:INFERRED_TYPE_LITERAL*/{s: i}; |
3297 m = /*info:INFERRED_TYPE_LITERAL*/{s: s}; | 3297 m = /*info:INFERRED_TYPE_LITERAL*/{s: s}; |
3298 m = /*info:INFERRED_TYPE_LITERAL*/{s: n}; | 3298 m = /*info:INFERRED_TYPE_LITERAL*/{s: n}; |
3299 m = /*info:INFERRED_TYPE_LITERAL*/ | 3299 m = /*info:INFERRED_TYPE_LITERAL*/ |
3300 {s: i, | 3300 {s: i, |
3301 s: n, | 3301 s: n, |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3507 checkFile(''' | 3507 checkFile(''' |
3508 class Foo { | 3508 class Foo { |
3509 Foo() : /*error:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init(); | 3509 Foo() : /*error:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init(); |
3510 } | 3510 } |
3511 '''); | 3511 '''); |
3512 } | 3512 } |
3513 | 3513 |
3514 void test_unboundTypeName() { | 3514 void test_unboundTypeName() { |
3515 checkFile(''' | 3515 checkFile(''' |
3516 void main() { | 3516 void main() { |
3517 /*warning:UNDEFINED_CLASS should be error*/AToB y; | 3517 /*error:UNDEFINED_CLASS*/AToB y; |
3518 } | 3518 } |
3519 '''); | 3519 '''); |
3520 } | 3520 } |
3521 | 3521 |
3522 void test_unboundVariable() { | 3522 void test_unboundVariable() { |
3523 checkFile(''' | 3523 checkFile(''' |
3524 void main() { | 3524 void main() { |
3525 dynamic y = /*warning:UNDEFINED_IDENTIFIER should be error*/unboundVariable; | 3525 dynamic y = /*error:UNDEFINED_IDENTIFIER*/unboundVariable; |
3526 } | 3526 } |
3527 '''); | 3527 '''); |
3528 } | 3528 } |
3529 | 3529 |
3530 void test_voidSubtyping() { | 3530 void test_voidSubtyping() { |
3531 // Regression test for https://github.com/dart-lang/sdk/issues/25069 | 3531 // Regression test for https://github.com/dart-lang/sdk/issues/25069 |
3532 checkFile(''' | 3532 checkFile(''' |
3533 typedef int Foo(); | 3533 typedef int Foo(); |
3534 void foo() {} | 3534 void foo() {} |
3535 void main () { | 3535 void main () { |
3536 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); | 3536 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); |
3537 } | 3537 } |
3538 '''); | 3538 '''); |
3539 } | 3539 } |
3540 } | 3540 } |
OLD | NEW |