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

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

Issue 2638183002: Issue 28027. Move Null to the bottom in the Analyzer. (Closed)
Patch Set: Fixes for review comments. Created 3 years, 11 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) 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 analyzer.src.generated.element_resolver; 5 library analyzer.src.generated.element_resolver;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/syntactic_entity.dart'; 10 import 'package:analyzer/dart/ast/syntactic_entity.dart';
(...skipping 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1309 // be the case that static type is some type, in which the static 1309 // be the case that static type is some type, in which the static
1310 // type should be used. 1310 // type should be used.
1311 targetType = _getBestType(target); 1311 targetType = _getBestType(target);
1312 } 1312 }
1313 if (targetType == null) { 1313 if (targetType == null) {
1314 if (target is Identifier && 1314 if (target is Identifier &&
1315 _resolver.nameScope.shouldIgnoreUndefined(target)) { 1315 _resolver.nameScope.shouldIgnoreUndefined(target)) {
1316 return null; 1316 return null;
1317 } 1317 }
1318 return StaticTypeWarningCode.UNDEFINED_FUNCTION; 1318 return StaticTypeWarningCode.UNDEFINED_FUNCTION;
1319 } else if (!targetType.isDynamic && !targetType.isBottom) { 1319 } else if (!targetType.isDynamic && target is! NullLiteral) {
1320 // Proxy-conditional warning, based on state of 1320 // Proxy-conditional warning, based on state of
1321 // targetType.getElement() 1321 // targetType.getElement()
1322 return StaticTypeWarningCode.UNDEFINED_METHOD; 1322 return StaticTypeWarningCode.UNDEFINED_METHOD;
1323 } 1323 }
1324 } 1324 }
1325 } 1325 }
1326 } 1326 }
1327 return null; 1327 return null;
1328 } 1328 }
1329 1329
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1554 // All function types are subtypes of 'Function', which is itself a 1554 // All function types are subtypes of 'Function', which is itself a
1555 // subclass of 'Object'. 1555 // subclass of 'Object'.
1556 // 1556 //
1557 staticType = _resolver.typeProvider.functionType; 1557 staticType = _resolver.typeProvider.functionType;
1558 } 1558 }
1559 return staticType; 1559 return staticType;
1560 } 1560 }
1561 1561
1562 DartType _getStaticTypeOrFunctionType(Expression expression) { 1562 DartType _getStaticTypeOrFunctionType(Expression expression) {
1563 if (expression is NullLiteral) { 1563 if (expression is NullLiteral) {
1564 return _resolver.typeProvider.bottomType; 1564 return _resolver.typeProvider.nullType;
1565 } 1565 }
1566 return _resolveTypeParameter(expression.staticType); 1566 return _resolveTypeParameter(expression.staticType);
1567 } 1567 }
1568 1568
1569 /** 1569 /**
1570 * Check for a generic method & apply type arguments if any were passed. 1570 * Check for a generic method & apply type arguments if any were passed.
1571 */ 1571 */
1572 DartType _instantiateGenericMethod( 1572 DartType _instantiateGenericMethod(
1573 DartType invokeType, TypeArgumentList typeArguments, AstNode node) { 1573 DartType invokeType, TypeArgumentList typeArguments, AstNode node) {
1574 // TODO(jmesserly): support generic "call" methods on InterfaceType. 1574 // TODO(jmesserly): support generic "call" methods on InterfaceType.
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after
2491 * be used when looking up members. Otherwise, return the original type. 2491 * be used when looking up members. Otherwise, return the original type.
2492 */ 2492 */
2493 DartType _resolveTypeParameter(DartType type) => 2493 DartType _resolveTypeParameter(DartType type) =>
2494 type?.resolveToBound(_resolver.typeProvider.objectType); 2494 type?.resolveToBound(_resolver.typeProvider.objectType);
2495 2495
2496 /** 2496 /**
2497 * Return `true` if we should report an error as a result of looking up a 2497 * Return `true` if we should report an error as a result of looking up a
2498 * [member] in the given [type] and not finding any member. 2498 * [member] in the given [type] and not finding any member.
2499 */ 2499 */
2500 bool _shouldReportMissingMember(DartType type, Element member) { 2500 bool _shouldReportMissingMember(DartType type, Element member) {
2501 return member == null && type != null && !type.isDynamic && !type.isBottom; 2501 return member == null && type != null && !type.isDynamic && !type.isDartCore Null;
2502 } 2502 }
2503 2503
2504 /** 2504 /**
2505 * Checks whether the given [expression] is a reference to a class. If it is 2505 * Checks whether the given [expression] is a reference to a class. If it is
2506 * then the element representing the class is returned, otherwise `null` is 2506 * then the element representing the class is returned, otherwise `null` is
2507 * returned. 2507 * returned.
2508 */ 2508 */
2509 static ClassElement getTypeReference(Expression expression) { 2509 static ClassElement getTypeReference(Expression expression) {
2510 if (expression is Identifier) { 2510 if (expression is Identifier) {
2511 Element staticElement = expression.staticElement; 2511 Element staticElement = expression.staticElement;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2645 2645
2646 @override 2646 @override
2647 Element get staticElement => null; 2647 Element get staticElement => null;
2648 2648
2649 @override 2649 @override
2650 dynamic/*=E*/ accept/*<E>*/(AstVisitor/*<E>*/ visitor) => null; 2650 dynamic/*=E*/ accept/*<E>*/(AstVisitor/*<E>*/ visitor) => null;
2651 2651
2652 @override 2652 @override
2653 void visitChildren(AstVisitor visitor) {} 2653 void visitChildren(AstVisitor visitor) {}
2654 } 2654 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/type.dart ('k') | pkg/analyzer/lib/src/generated/error_verifier.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698