| 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 | 
|---|