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

Side by Side Diff: pkg/analyzer/lib/src/generated/element_resolver.dart

Issue 757023004: Fix issue 21426 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/error.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 engine.resolver.element_resolver; 5 library engine.resolver.element_resolver;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'ast.dart'; 9 import 'ast.dart';
10 import 'element.dart'; 10 import 'element.dart';
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 Expression operand = node.operand; 777 Expression operand = node.operand;
778 String methodName = _getPostfixOperator(node); 778 String methodName = _getPostfixOperator(node);
779 DartType staticType = _getStaticType(operand); 779 DartType staticType = _getStaticType(operand);
780 MethodElement staticMethod = _lookUpMethod(operand, staticType, methodName); 780 MethodElement staticMethod = _lookUpMethod(operand, staticType, methodName);
781 node.staticElement = staticMethod; 781 node.staticElement = staticMethod;
782 DartType propagatedType = _getPropagatedType(operand); 782 DartType propagatedType = _getPropagatedType(operand);
783 MethodElement propagatedMethod = 783 MethodElement propagatedMethod =
784 _lookUpMethod(operand, propagatedType, methodName); 784 _lookUpMethod(operand, propagatedType, methodName);
785 node.propagatedElement = propagatedMethod; 785 node.propagatedElement = propagatedMethod;
786 if (_shouldReportMissingMember(staticType, staticMethod)) { 786 if (_shouldReportMissingMember(staticType, staticMethod)) {
787 _recordUndefinedToken( 787 if (operand is SuperExpression) {
788 staticType.element, 788 _recordUndefinedToken(
789 StaticTypeWarningCode.UNDEFINED_OPERATOR, 789 staticType.element,
790 node.operator, 790 StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
791 [methodName, staticType.displayName]); 791 node.operator,
792 [methodName, staticType.displayName]);
793 } else {
794 _recordUndefinedToken(
795 staticType.element,
796 StaticTypeWarningCode.UNDEFINED_OPERATOR,
797 node.operator,
798 [methodName, staticType.displayName]);
799 }
792 } else if (_enableHints && 800 } else if (_enableHints &&
793 _shouldReportMissingMember(propagatedType, propagatedMethod) && 801 _shouldReportMissingMember(propagatedType, propagatedMethod) &&
794 !_memberFoundInSubclass(propagatedType.element, methodName, true, false) ) { 802 !_memberFoundInSubclass(propagatedType.element, methodName, true, false)) {
795 _recordUndefinedToken( 803 _recordUndefinedToken(
796 propagatedType.element, 804 propagatedType.element,
797 HintCode.UNDEFINED_OPERATOR, 805 HintCode.UNDEFINED_OPERATOR,
798 node.operator, 806 node.operator,
799 [methodName, propagatedType.displayName]); 807 [methodName, propagatedType.displayName]);
800 } 808 }
801 return null; 809 return null;
802 } 810 }
803 811
804 @override 812 @override
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 String methodName = _getPrefixOperator(node); 898 String methodName = _getPrefixOperator(node);
891 DartType staticType = _getStaticType(operand); 899 DartType staticType = _getStaticType(operand);
892 MethodElement staticMethod = 900 MethodElement staticMethod =
893 _lookUpMethod(operand, staticType, methodName); 901 _lookUpMethod(operand, staticType, methodName);
894 node.staticElement = staticMethod; 902 node.staticElement = staticMethod;
895 DartType propagatedType = _getPropagatedType(operand); 903 DartType propagatedType = _getPropagatedType(operand);
896 MethodElement propagatedMethod = 904 MethodElement propagatedMethod =
897 _lookUpMethod(operand, propagatedType, methodName); 905 _lookUpMethod(operand, propagatedType, methodName);
898 node.propagatedElement = propagatedMethod; 906 node.propagatedElement = propagatedMethod;
899 if (_shouldReportMissingMember(staticType, staticMethod)) { 907 if (_shouldReportMissingMember(staticType, staticMethod)) {
900 _recordUndefinedToken( 908 if (operand is SuperExpression) {
901 staticType.element, 909 _recordUndefinedToken(
902 StaticTypeWarningCode.UNDEFINED_OPERATOR, 910 staticType.element,
903 operator, 911 StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
904 [methodName, staticType.displayName]); 912 operator,
913 [methodName, staticType.displayName]);
914 } else {
915 _recordUndefinedToken(
916 staticType.element,
917 StaticTypeWarningCode.UNDEFINED_OPERATOR,
918 operator,
919 [methodName, staticType.displayName]);
920 }
905 } else if (_enableHints && 921 } else if (_enableHints &&
906 _shouldReportMissingMember(propagatedType, propagatedMethod) && 922 _shouldReportMissingMember(propagatedType, propagatedMethod) &&
907 !_memberFoundInSubclass(propagatedType.element, methodName, true, fals e)) { 923 !_memberFoundInSubclass(propagatedType.element, methodName, true, fals e)) {
908 _recordUndefinedToken( 924 _recordUndefinedToken(
909 propagatedType.element, 925 propagatedType.element,
910 HintCode.UNDEFINED_OPERATOR, 926 HintCode.UNDEFINED_OPERATOR,
911 operator, 927 operator,
912 [methodName, propagatedType.displayName]); 928 [methodName, propagatedType.displayName]);
913 } 929 }
914 } 930 }
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 _shouldReportMissingMember(staticType, staticMethod); 1264 _shouldReportMissingMember(staticType, staticMethod);
1249 bool shouldReportMissingMember_propagated = 1265 bool shouldReportMissingMember_propagated =
1250 !shouldReportMissingMember_static && 1266 !shouldReportMissingMember_static &&
1251 _enableHints && 1267 _enableHints &&
1252 _shouldReportMissingMember(propagatedType, propagatedMethod) && 1268 _shouldReportMissingMember(propagatedType, propagatedMethod) &&
1253 !_memberFoundInSubclass(propagatedType.element, methodName, true, false) ; 1269 !_memberFoundInSubclass(propagatedType.element, methodName, true, false) ;
1254 if (shouldReportMissingMember_static || 1270 if (shouldReportMissingMember_static ||
1255 shouldReportMissingMember_propagated) { 1271 shouldReportMissingMember_propagated) {
1256 sc.Token leftBracket = node.leftBracket; 1272 sc.Token leftBracket = node.leftBracket;
1257 sc.Token rightBracket = node.rightBracket; 1273 sc.Token rightBracket = node.rightBracket;
1258 ErrorCode errorCode = (shouldReportMissingMember_static ? 1274 ErrorCode errorCode;
1259 StaticTypeWarningCode.UNDEFINED_OPERATOR : 1275 if (shouldReportMissingMember_static) {
1260 HintCode.UNDEFINED_OPERATOR); 1276 if (target is SuperExpression) {
1277 errorCode = StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR;
1278 } else {
1279 errorCode = StaticTypeWarningCode.UNDEFINED_OPERATOR;
1280 }
1281 } else {
1282 errorCode = HintCode.UNDEFINED_OPERATOR;
1283 }
1284 DartType type = shouldReportMissingMember_static ? staticType : propagated Type;
1261 if (leftBracket == null || rightBracket == null) { 1285 if (leftBracket == null || rightBracket == null) {
1262 _recordUndefinedNode( 1286 _recordUndefinedNode(
1263 shouldReportMissingMember_static ? staticType.element : propagatedTy pe.element, 1287 type.element,
1264 errorCode, 1288 errorCode,
1265 node, 1289 node,
1266 [ 1290 [methodName, type.displayName]);
1267 methodName,
1268 shouldReportMissingMember_static ?
1269 staticType.displayName :
1270 propagatedType.displayName]);
1271 } else { 1291 } else {
1272 int offset = leftBracket.offset; 1292 int offset = leftBracket.offset;
1273 int length = rightBracket.offset - offset + 1; 1293 int length = rightBracket.offset - offset + 1;
1274 _recordUndefinedOffset( 1294 _recordUndefinedOffset(
1275 shouldReportMissingMember_static ? staticType.element : propagatedTy pe.element, 1295 type.element,
1276 errorCode, 1296 errorCode,
1277 offset, 1297 offset,
1278 length, 1298 length,
1279 [ 1299 [methodName, type.displayName]);
1280 methodName,
1281 shouldReportMissingMember_static ?
1282 staticType.displayName :
1283 propagatedType.displayName]);
1284 } 1300 }
1285 return true; 1301 return true;
1286 } 1302 }
1287 return false; 1303 return false;
1288 } 1304 }
1289 1305
1290 /** 1306 /**
1291 * Given a list of arguments and the element that will be invoked using those argument, compute 1307 * Given a list of arguments and the element that will be invoked using those argument, compute
1292 * the list of parameters that correspond to the list of arguments. Return the parameters that 1308 * the list of parameters that correspond to the list of arguments. Return the parameters that
1293 * correspond to the arguments, or `null` if no correspondence could be comput ed. 1309 * correspond to the arguments, or `null` if no correspondence could be comput ed.
(...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2401 if (leftOperand != null) { 2417 if (leftOperand != null) {
2402 DartType staticType = _getStaticType(leftOperand); 2418 DartType staticType = _getStaticType(leftOperand);
2403 MethodElement staticMethod = 2419 MethodElement staticMethod =
2404 _lookUpMethod(leftOperand, staticType, methodName); 2420 _lookUpMethod(leftOperand, staticType, methodName);
2405 node.staticElement = staticMethod; 2421 node.staticElement = staticMethod;
2406 DartType propagatedType = _getPropagatedType(leftOperand); 2422 DartType propagatedType = _getPropagatedType(leftOperand);
2407 MethodElement propagatedMethod = 2423 MethodElement propagatedMethod =
2408 _lookUpMethod(leftOperand, propagatedType, methodName); 2424 _lookUpMethod(leftOperand, propagatedType, methodName);
2409 node.propagatedElement = propagatedMethod; 2425 node.propagatedElement = propagatedMethod;
2410 if (_shouldReportMissingMember(staticType, staticMethod)) { 2426 if (_shouldReportMissingMember(staticType, staticMethod)) {
2411 _recordUndefinedToken( 2427 if (leftOperand is SuperExpression) {
2412 staticType.element, 2428 _recordUndefinedToken(
2413 StaticTypeWarningCode.UNDEFINED_OPERATOR, 2429 staticType.element,
2414 node.operator, 2430 StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
2415 [methodName, staticType.displayName]); 2431 node.operator,
2432 [methodName, staticType.displayName]);
2433 } else {
2434 _recordUndefinedToken(
2435 staticType.element,
2436 StaticTypeWarningCode.UNDEFINED_OPERATOR,
2437 node.operator,
2438 [methodName, staticType.displayName]);
2439 }
2416 } else if (_enableHints && 2440 } else if (_enableHints &&
2417 _shouldReportMissingMember(propagatedType, propagatedMethod) && 2441 _shouldReportMissingMember(propagatedType, propagatedMethod) &&
2418 !_memberFoundInSubclass(propagatedType.element, methodName, true, fals e)) { 2442 !_memberFoundInSubclass(propagatedType.element, methodName, true, fals e)) {
2419 _recordUndefinedToken( 2443 _recordUndefinedToken(
2420 propagatedType.element, 2444 propagatedType.element,
2421 HintCode.UNDEFINED_OPERATOR, 2445 HintCode.UNDEFINED_OPERATOR,
2422 node.operator, 2446 node.operator,
2423 [methodName, propagatedType.displayName]); 2447 [methodName, propagatedType.displayName]);
2424 } 2448 }
2425 } 2449 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
2639 _shouldReportMissingMember(propagatedType, propagatedElement) && 2663 _shouldReportMissingMember(propagatedType, propagatedElement) &&
2640 !_memberFoundInSubclass(propagatedType.element, propertyName.name, false , true); 2664 !_memberFoundInSubclass(propagatedType.element, propertyName.name, false , true);
2641 // TODO(collinsn): add support for errors on union types by extending 2665 // TODO(collinsn): add support for errors on union types by extending
2642 // [lookupGetter] and [lookupSetter] in analogy with the earlier 2666 // [lookupGetter] and [lookupSetter] in analogy with the earlier
2643 // [lookupMethod] extensions. 2667 // [lookupMethod] extensions.
2644 if (propagatedType is UnionType) { 2668 if (propagatedType is UnionType) {
2645 shouldReportMissingMember_propagated = false; 2669 shouldReportMissingMember_propagated = false;
2646 } 2670 }
2647 if (shouldReportMissingMember_static || 2671 if (shouldReportMissingMember_static ||
2648 shouldReportMissingMember_propagated) { 2672 shouldReportMissingMember_propagated) {
2649 Element staticOrPropagatedEnclosingElt = 2673 DartType staticOrPropagatedType =
2650 shouldReportMissingMember_static ? staticType.element : propagatedType .element; 2674 shouldReportMissingMember_static ? staticType : propagatedType;
2675 Element staticOrPropagatedEnclosingElt = staticOrPropagatedType.element;
2651 bool isStaticProperty = _isStatic(staticOrPropagatedEnclosingElt); 2676 bool isStaticProperty = _isStatic(staticOrPropagatedEnclosingElt);
2652 String displayName = staticOrPropagatedEnclosingElt != null ? 2677 DartType displayType = staticOrPropagatedType != null ?
2653 staticOrPropagatedEnclosingElt.displayName : 2678 staticOrPropagatedType :
2654 propagatedType != null ? propagatedType.displayName : staticType.displ ayName; 2679 propagatedType != null ? propagatedType : staticType;
2655 // Special getter cases. 2680 // Special getter cases.
2656 if (propertyName.inGetterContext()) { 2681 if (propertyName.inGetterContext()) {
2657 if (!isStaticProperty && 2682 if (!isStaticProperty &&
2658 staticOrPropagatedEnclosingElt is ClassElement) { 2683 staticOrPropagatedEnclosingElt is ClassElement) {
2659 ClassElement classElement = staticOrPropagatedEnclosingElt; 2684 ClassElement classElement = staticOrPropagatedEnclosingElt;
2660 InterfaceType targetType = classElement.type; 2685 InterfaceType targetType = classElement.type;
2661 if (targetType != null && 2686 if (targetType != null &&
2662 targetType.isDartCoreFunction && 2687 targetType.isDartCoreFunction &&
2663 propertyName.name == FunctionElement.CALL_METHOD_NAME) { 2688 propertyName.name == FunctionElement.CALL_METHOD_NAME) {
2664 // TODO(brianwilkerson) Can we ever resolve the function being 2689 // TODO(brianwilkerson) Can we ever resolve the function being
2665 // invoked? 2690 // invoked?
2666 // resolveArgumentsToParameters(node.getArgumentList(), invokedFuncti on); 2691 // resolveArgumentsToParameters(node.getArgumentList(), invokedFuncti on);
2667 return; 2692 return;
2668 } else if (classElement.isEnum && propertyName.name == "_name") { 2693 } else if (classElement.isEnum && propertyName.name == "_name") {
2669 _resolver.reportErrorForNode( 2694 _resolver.reportErrorForNode(
2670 CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD, 2695 CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD,
2671 propertyName, 2696 propertyName,
2672 [propertyName.name]); 2697 [propertyName.name]);
2673 return; 2698 return;
2674 } 2699 }
2675 } 2700 }
2676 } 2701 }
2677 Element declaringElement = 2702 Element declaringElement =
2678 staticType.isVoid ? null : staticOrPropagatedEnclosingElt; 2703 staticType.isVoid ? null : staticOrPropagatedEnclosingElt;
2679 if (propertyName.inSetterContext()) { 2704 if (propertyName.inSetterContext()) {
2680 ErrorCode staticErrorCode = (isStaticProperty && !staticType.isVoid ? 2705 ErrorCode errorCode;
2681 StaticWarningCode.UNDEFINED_SETTER : 2706 if (shouldReportMissingMember_static) {
2682 StaticTypeWarningCode.UNDEFINED_SETTER); 2707 if (target is SuperExpression) {
2683 ErrorCode errorCode = 2708 if (isStaticProperty && !staticType.isVoid) {
2684 shouldReportMissingMember_static ? staticErrorCode : HintCode.UNDEFI NED_SETTER; 2709 errorCode = StaticWarningCode.UNDEFINED_SUPER_SETTER;
2710 } else {
2711 errorCode = StaticTypeWarningCode.UNDEFINED_SUPER_SETTER;
2712 }
2713 } else {
2714 if (isStaticProperty && !staticType.isVoid) {
2715 errorCode = StaticWarningCode.UNDEFINED_SETTER;
2716 } else {
2717 errorCode = StaticTypeWarningCode.UNDEFINED_SETTER;
2718 }
2719 }
2720 } else {
2721 errorCode = HintCode.UNDEFINED_SETTER;
2722 }
2685 _recordUndefinedNode( 2723 _recordUndefinedNode(
2686 declaringElement, 2724 declaringElement,
2687 errorCode, 2725 errorCode,
2688 propertyName, 2726 propertyName,
2689 [propertyName.name, displayName]); 2727 [propertyName.name, displayType.displayName]);
2690 } else if (propertyName.inGetterContext()) { 2728 } else if (propertyName.inGetterContext()) {
2691 ErrorCode staticErrorCode = (isStaticProperty && !staticType.isVoid ? 2729 ErrorCode errorCode;
2692 StaticWarningCode.UNDEFINED_GETTER : 2730 if (shouldReportMissingMember_static) {
2693 StaticTypeWarningCode.UNDEFINED_GETTER); 2731 if (target is SuperExpression) {
2694 ErrorCode errorCode = 2732 if (isStaticProperty && !staticType.isVoid) {
2695 shouldReportMissingMember_static ? staticErrorCode : HintCode.UNDEFI NED_GETTER; 2733 errorCode = StaticWarningCode.UNDEFINED_SUPER_GETTER;
2734 } else {
2735 errorCode = StaticTypeWarningCode.UNDEFINED_SUPER_GETTER;
2736 }
2737 } else {
2738 if (isStaticProperty && !staticType.isVoid) {
2739 errorCode = StaticWarningCode.UNDEFINED_GETTER;
2740 } else {
2741 errorCode = StaticTypeWarningCode.UNDEFINED_GETTER;
2742 }
2743 }
2744 } else {
2745 errorCode = HintCode.UNDEFINED_GETTER;
2746 }
2696 _recordUndefinedNode( 2747 _recordUndefinedNode(
2697 declaringElement, 2748 declaringElement,
2698 errorCode, 2749 errorCode,
2699 propertyName, 2750 propertyName,
2700 [propertyName.name, displayName]); 2751 [propertyName.name, displayType.displayName]);
2701 } else { 2752 } else {
2702 _recordUndefinedNode( 2753 _recordUndefinedNode(
2703 declaringElement, 2754 declaringElement,
2704 StaticWarningCode.UNDEFINED_IDENTIFIER, 2755 StaticWarningCode.UNDEFINED_IDENTIFIER,
2705 propertyName, 2756 propertyName,
2706 [propertyName.name]); 2757 [propertyName.name]);
2707 } 2758 }
2708 } 2759 }
2709 } 2760 }
2710 2761
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
3063 @override 3114 @override
3064 Element get staticElement => null; 3115 Element get staticElement => null;
3065 3116
3066 @override 3117 @override
3067 accept(AstVisitor visitor) => null; 3118 accept(AstVisitor visitor) => null;
3068 3119
3069 @override 3120 @override
3070 void visitChildren(AstVisitor visitor) { 3121 void visitChildren(AstVisitor visitor) {
3071 } 3122 }
3072 } 3123 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/error.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698