Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: lib/src/checker/checker.dart

Issue 1055923002: Don't call dinvoke on Object methods (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Refactor dynamic target logic Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698