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 dev_compiler.src.checker.checker; | 5 library dev_compiler.src.checker.checker; |
6 | 6 |
7 import 'package:analyzer/analyzer.dart'; | 7 import 'package:analyzer/analyzer.dart'; |
8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
9 import 'package:analyzer/src/generated/element.dart'; | 9 import 'package:analyzer/src/generated/element.dart'; |
10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; | 10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 } | 404 } |
405 | 405 |
406 @override | 406 @override |
407 visitConstructorFieldInitializer(ConstructorFieldInitializer node) { | 407 visitConstructorFieldInitializer(ConstructorFieldInitializer node) { |
408 var field = node.fieldName; | 408 var field = node.fieldName; |
409 DartType staticType = _rules.elementType(field.staticElement); | 409 DartType staticType = _rules.elementType(field.staticElement); |
410 node.expression = checkAssignment(node.expression, staticType); | 410 node.expression = checkAssignment(node.expression, staticType); |
411 node.visitChildren(this); | 411 node.visitChildren(this); |
412 } | 412 } |
413 | 413 |
| 414 @override |
| 415 visitForEachStatement(ForEachStatement node) { |
| 416 // Check that the expression is an Iterable. |
| 417 var expr = node.iterable; |
| 418 var iterableType = _rules.provider.iterableType; |
| 419 var loopVariable = node.identifier != null |
| 420 ? node.identifier |
| 421 : node.loopVariable.identifier; |
| 422 var iteratorType = loopVariable.staticType; |
| 423 var checkedType = iterableType.substitute4([iteratorType]); |
| 424 node.iterable = checkAssignment(expr, checkedType); |
| 425 node.visitChildren(this); |
| 426 } |
| 427 |
414 @override visitListLiteral(ListLiteral node) { | 428 @override visitListLiteral(ListLiteral node) { |
415 var type = _rules.provider.dynamicType; | 429 var type = _rules.provider.dynamicType; |
416 if (node.typeArguments != null) { | 430 if (node.typeArguments != null) { |
417 var targs = node.typeArguments.arguments; | 431 var targs = node.typeArguments.arguments; |
418 if (targs.length > 0) type = targs[0].type; | 432 if (targs.length > 0) type = targs[0].type; |
419 } | 433 } |
420 var elements = node.elements; | 434 var elements = node.elements; |
421 for (int i = 0; i < elements.length; i++) { | 435 for (int i = 0; i < elements.length; i++) { |
422 elements[i] = checkArgument(elements[i], type); | 436 elements[i] = checkArgument(elements[i], type); |
423 } | 437 } |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 void _recordDynamicInvoke(AstNode node) { | 792 void _recordDynamicInvoke(AstNode node) { |
779 _reporter.log(new DynamicInvoke(_rules, node)); | 793 _reporter.log(new DynamicInvoke(_rules, node)); |
780 } | 794 } |
781 | 795 |
782 void _recordMessage(StaticInfo info) { | 796 void _recordMessage(StaticInfo info) { |
783 if (info == null) return; | 797 if (info == null) return; |
784 if (info.level >= logger.Level.SEVERE) _failure = true; | 798 if (info.level >= logger.Level.SEVERE) _failure = true; |
785 _reporter.log(info); | 799 _reporter.log(info); |
786 } | 800 } |
787 } | 801 } |
OLD | NEW |