Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 } | 162 } |
| 163 return null; | 163 return null; |
| 164 } | 164 } |
| 165 | 165 |
| 166 @override | 166 @override |
| 167 Object visitBinaryExpression(BinaryExpression node) { | 167 Object visitBinaryExpression(BinaryExpression node) { |
| 168 sc.Token operator = node.operator; | 168 sc.Token operator = node.operator; |
| 169 if (operator.isUserDefinableOperator) { | 169 if (operator.isUserDefinableOperator) { |
| 170 Expression leftOperand = node.leftOperand; | 170 _resolveBinaryExpression(node, operator.lexeme); |
| 171 if (leftOperand != null) { | 171 } else if (operator.type == sc.TokenType.BANG_EQ) { |
| 172 String methodName = operator.lexeme; | 172 _resolveBinaryExpression(node, sc.TokenType.EQ_EQ.lexeme); |
| 173 DartType staticType = _getStaticType(leftOperand); | 173 } |
| 174 MethodElement staticMethod = | 174 return null; |
| 175 _lookUpMethod(leftOperand, staticType, methodName); | 175 } |
| 176 node.staticElement = staticMethod; | 176 |
| 177 DartType propagatedType = _getPropagatedType(leftOperand); | 177 void _resolveBinaryExpression(BinaryExpression node, String methodName) { |
|
scheglov
2014/11/21 21:18:54
Sort members?
| |
| 178 MethodElement propagatedMethod = | 178 Expression leftOperand = node.leftOperand; |
| 179 _lookUpMethod(leftOperand, propagatedType, methodName); | 179 if (leftOperand != null) { |
| 180 node.propagatedElement = propagatedMethod; | 180 DartType staticType = _getStaticType(leftOperand); |
| 181 if (_shouldReportMissingMember(staticType, staticMethod)) { | 181 MethodElement staticMethod = |
| 182 _recordUndefinedToken( | 182 _lookUpMethod(leftOperand, staticType, methodName); |
| 183 staticType.element, | 183 node.staticElement = staticMethod; |
| 184 StaticTypeWarningCode.UNDEFINED_OPERATOR, | 184 DartType propagatedType = _getPropagatedType(leftOperand); |
| 185 operator, | 185 MethodElement propagatedMethod = |
| 186 [methodName, staticType.displayName]); | 186 _lookUpMethod(leftOperand, propagatedType, methodName); |
| 187 } else if (_enableHints && | 187 node.propagatedElement = propagatedMethod; |
| 188 _shouldReportMissingMember(propagatedType, propagatedMethod) && | 188 if (_shouldReportMissingMember(staticType, staticMethod)) { |
| 189 !_memberFoundInSubclass(propagatedType.element, methodName, true, fa lse)) { | 189 _recordUndefinedToken( |
| 190 _recordUndefinedToken( | 190 staticType.element, |
| 191 propagatedType.element, | 191 StaticTypeWarningCode.UNDEFINED_OPERATOR, |
| 192 HintCode.UNDEFINED_OPERATOR, | 192 node.operator, |
| 193 operator, | 193 [methodName, staticType.displayName]); |
| 194 [methodName, propagatedType.displayName]); | 194 } else if (_enableHints && |
| 195 } | 195 _shouldReportMissingMember(propagatedType, propagatedMethod) && |
| 196 !_memberFoundInSubclass(propagatedType.element, methodName, true, fals e)) { | |
| 197 _recordUndefinedToken( | |
| 198 propagatedType.element, | |
| 199 HintCode.UNDEFINED_OPERATOR, | |
| 200 node.operator, | |
| 201 [methodName, propagatedType.displayName]); | |
| 196 } | 202 } |
| 197 } | 203 } |
| 198 return null; | |
| 199 } | 204 } |
| 200 | 205 |
| 201 @override | 206 @override |
| 202 Object visitBreakStatement(BreakStatement node) { | 207 Object visitBreakStatement(BreakStatement node) { |
| 203 _lookupLabel(node, node.label); | 208 _lookupLabel(node, node.label); |
| 204 return null; | 209 return null; |
| 205 } | 210 } |
| 206 | 211 |
| 207 @override | 212 @override |
| 208 Object visitClassDeclaration(ClassDeclaration node) { | 213 Object visitClassDeclaration(ClassDeclaration node) { |
| (...skipping 2865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3074 @override | 3079 @override |
| 3075 Element get staticElement => null; | 3080 Element get staticElement => null; |
| 3076 | 3081 |
| 3077 @override | 3082 @override |
| 3078 accept(AstVisitor visitor) => null; | 3083 accept(AstVisitor visitor) => null; |
| 3079 | 3084 |
| 3080 @override | 3085 @override |
| 3081 void visitChildren(AstVisitor visitor) { | 3086 void visitChildren(AstVisitor visitor) { |
| 3082 } | 3087 } |
| 3083 } | 3088 } |
| OLD | NEW |