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

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

Issue 747153002: Resolve not-equals operator (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month 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/test/generated/resolver_test.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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698