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 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 final node = init[i]; | 382 final node = init[i]; |
383 if (node is SuperConstructorInvocation) { | 383 if (node is SuperConstructorInvocation) { |
384 _recordMessage(new InvalidSuperInvocation(node)); | 384 _recordMessage(new InvalidSuperInvocation(node)); |
385 } | 385 } |
386 } | 386 } |
387 } | 387 } |
388 | 388 |
389 @override | 389 @override |
390 void visitConstructorFieldInitializer(ConstructorFieldInitializer node) { | 390 void visitConstructorFieldInitializer(ConstructorFieldInitializer node) { |
391 var field = node.fieldName; | 391 var field = node.fieldName; |
392 DartType staticType = rules.elementType(field.staticElement); | 392 var element = field.staticElement; |
| 393 DartType staticType = rules.elementType(element); |
393 checkAssignment(node.expression, staticType); | 394 checkAssignment(node.expression, staticType); |
394 node.visitChildren(this); | 395 node.visitChildren(this); |
395 } | 396 } |
396 | 397 |
397 @override | 398 @override |
398 void visitForEachStatement(ForEachStatement node) { | 399 void visitForEachStatement(ForEachStatement node) { |
399 // Check that the expression is an Iterable. | 400 // Check that the expression is an Iterable. |
400 var expr = node.iterable; | 401 var expr = node.iterable; |
401 var iterableType = node.awaitKeyword != null | 402 var iterableType = node.awaitKeyword != null |
402 ? rules.provider.streamType | 403 ? rules.provider.streamType |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 } else { | 786 } else { |
786 // Non-method operator. | 787 // Non-method operator. |
787 switch (op.type) { | 788 switch (op.type) { |
788 case TokenType.AMPERSAND_AMPERSAND: | 789 case TokenType.AMPERSAND_AMPERSAND: |
789 case TokenType.BAR_BAR: | 790 case TokenType.BAR_BAR: |
790 checkBoolean(node.leftOperand); | 791 checkBoolean(node.leftOperand); |
791 checkBoolean(node.rightOperand); | 792 checkBoolean(node.rightOperand); |
792 break; | 793 break; |
793 case TokenType.BANG_EQ: | 794 case TokenType.BANG_EQ: |
794 break; | 795 break; |
| 796 case TokenType.QUESTION_QUESTION: |
| 797 break; |
795 default: | 798 default: |
796 assert(false); | 799 assert(false); |
797 } | 800 } |
798 } | 801 } |
799 node.visitChildren(this); | 802 node.visitChildren(this); |
800 } | 803 } |
801 | 804 |
802 @override | 805 @override |
803 void visitConditionalExpression(ConditionalExpression node) { | 806 void visitConditionalExpression(ConditionalExpression node) { |
804 checkBoolean(node.condition); | 807 checkBoolean(node.condition); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 if (info is CoercionInfo) { | 937 if (info is CoercionInfo) { |
935 // TODO(jmesserly): if we're run again on the same AST, we'll produce the | 938 // TODO(jmesserly): if we're run again on the same AST, we'll produce the |
936 // same annotations. This should be harmless. This might go away once | 939 // same annotations. This should be harmless. This might go away once |
937 // CodeChecker is integrated better with analyzer, as it will know that | 940 // CodeChecker is integrated better with analyzer, as it will know that |
938 // checking has already been performed. | 941 // checking has already been performed. |
939 // assert(CoercionInfo.get(info.node) == null); | 942 // assert(CoercionInfo.get(info.node) == null); |
940 CoercionInfo.set(info.node, info); | 943 CoercionInfo.set(info.node, info); |
941 } | 944 } |
942 } | 945 } |
943 } | 946 } |
OLD | NEW |