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 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 node.expression = _checkReturn(node.expression, node); | 570 node.expression = _checkReturn(node.expression, node); |
571 node.visitChildren(this); | 571 node.visitChildren(this); |
572 } | 572 } |
573 | 573 |
574 visitReturnStatement(ReturnStatement node) { | 574 visitReturnStatement(ReturnStatement node) { |
575 node.expression = _checkReturn(node.expression, node); | 575 node.expression = _checkReturn(node.expression, node); |
576 node.visitChildren(this); | 576 node.visitChildren(this); |
577 } | 577 } |
578 | 578 |
579 visitPropertyAccess(PropertyAccess node) { | 579 visitPropertyAccess(PropertyAccess node) { |
580 if (_rules.isDynamicGet(node.realTarget)) { | 580 if (node.staticType.isDynamic && _rules.isDynamicTarget(node.realTarget)) { |
581 _recordDynamicInvoke(node); | 581 _recordDynamicInvoke(node); |
582 } | 582 } |
583 node.visitChildren(this); | 583 node.visitChildren(this); |
584 } | 584 } |
585 | 585 |
586 visitPrefixedIdentifier(PrefixedIdentifier node) { | 586 visitPrefixedIdentifier(PrefixedIdentifier node) { |
587 final target = node.prefix; | 587 final target = node.prefix; |
588 // Check if the prefix is a library - PrefixElement denotes a library | 588 if (_rules.isDynamicTarget(target)) { |
589 // access. | |
590 if (target.staticElement is! PrefixElement && _rules.isDynamicGet(target)) { | |
591 _recordDynamicInvoke(node); | 589 _recordDynamicInvoke(node); |
592 } | 590 } |
593 node.visitChildren(this); | 591 node.visitChildren(this); |
594 } | 592 } |
595 | 593 |
596 @override visitDefaultFormalParameter(DefaultFormalParameter node) { | 594 @override visitDefaultFormalParameter(DefaultFormalParameter node) { |
597 _visitMaybeConst(node, (node) { | 595 _visitMaybeConst(node, (node) { |
598 // Check that defaults have the proper subtype. | 596 // Check that defaults have the proper subtype. |
599 var parameter = node.parameter; | 597 var parameter = node.parameter; |
600 var parameterType = _rules.elementType(parameter.element); | 598 var parameterType = _rules.elementType(parameter.element); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 void _recordDynamicInvoke(AstNode node) { | 801 void _recordDynamicInvoke(AstNode node) { |
804 _reporter.log(new DynamicInvoke(_rules, node)); | 802 _reporter.log(new DynamicInvoke(_rules, node)); |
805 } | 803 } |
806 | 804 |
807 void _recordMessage(StaticInfo info) { | 805 void _recordMessage(StaticInfo info) { |
808 if (info == null) return; | 806 if (info == null) return; |
809 if (info.level >= logger.Level.SEVERE) _failure = true; | 807 if (info.level >= logger.Level.SEVERE) _failure = true; |
810 _reporter.log(info); | 808 _reporter.log(info); |
811 } | 809 } |
812 } | 810 } |
OLD | NEW |