| 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 // TODO(jmesserly): this was ported from package:dev_compiler, and needs to be | 5 // TODO(jmesserly): this was ported from package:dev_compiler, and needs to be |
| 6 // refactored to fit into analyzer. | 6 // refactored to fit into analyzer. |
| 7 library analyzer.src.task.strong.checker; | 7 library analyzer.src.task.strong.checker; |
| 8 | 8 |
| 9 import 'package:analyzer/analyzer.dart'; | 9 import 'package:analyzer/analyzer.dart'; |
| 10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 | 576 |
| 577 @override | 577 @override |
| 578 void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { | 578 void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |
| 579 checkFunctionApplication(node, node.function, node.argumentList); | 579 checkFunctionApplication(node, node.function, node.argumentList); |
| 580 node.visitChildren(this); | 580 node.visitChildren(this); |
| 581 } | 581 } |
| 582 | 582 |
| 583 @override | 583 @override |
| 584 void visitRedirectingConstructorInvocation( | 584 void visitRedirectingConstructorInvocation( |
| 585 RedirectingConstructorInvocation node) { | 585 RedirectingConstructorInvocation node) { |
| 586 var type = node.staticElement.type; | 586 var type = node.staticElement?.type; |
| 587 checkArgumentList(node.argumentList, type); | 587 // TODO(leafp): There's a TODO in visitRedirectingConstructorInvocation |
| 588 // in the element_resolver to handle the case that the element is null |
| 589 // and emit an error. In the meantime, just be defensive here. |
| 590 if (type != null) { |
| 591 checkArgumentList(node.argumentList, type); |
| 592 } |
| 588 node.visitChildren(this); | 593 node.visitChildren(this); |
| 589 } | 594 } |
| 590 | 595 |
| 591 @override | 596 @override |
| 592 void visitSuperConstructorInvocation(SuperConstructorInvocation node) { | 597 void visitSuperConstructorInvocation(SuperConstructorInvocation node) { |
| 593 var element = node.staticElement; | 598 var element = node.staticElement; |
| 594 if (element != null) { | 599 if (element != null) { |
| 595 var type = node.staticElement.type; | 600 var type = node.staticElement.type; |
| 596 checkArgumentList(node.argumentList, type); | 601 checkArgumentList(node.argumentList, type); |
| 597 } | 602 } |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1037 } | 1042 } |
| 1038 } catch (e) { | 1043 } catch (e) { |
| 1039 // TODO(sigmund): remove this try-catch block (see issue #48). | 1044 // TODO(sigmund): remove this try-catch block (see issue #48). |
| 1040 } | 1045 } |
| 1041 if (baseMethod == null || baseMethod.isStatic) return null; | 1046 if (baseMethod == null || baseMethod.isStatic) return null; |
| 1042 return baseMethod.type; | 1047 return baseMethod.type; |
| 1043 } | 1048 } |
| 1044 ; | 1049 ; |
| 1045 return f; | 1050 return f; |
| 1046 } | 1051 } |
| OLD | NEW |