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 analyzer.src.generated.resolver; | 5 library analyzer.src.generated.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/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
(...skipping 6869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6880 return; | 6880 return; |
6881 } | 6881 } |
6882 // prepare current variable type | 6882 // prepare current variable type |
6883 DartType type = _promoteManager.getType(element) ?? | 6883 DartType type = _promoteManager.getType(element) ?? |
6884 expression.staticType ?? | 6884 expression.staticType ?? |
6885 DynamicTypeImpl.instance; | 6885 DynamicTypeImpl.instance; |
6886 | 6886 |
6887 potentialType ??= DynamicTypeImpl.instance; | 6887 potentialType ??= DynamicTypeImpl.instance; |
6888 | 6888 |
6889 // Check if we can promote to potentialType from type. | 6889 // Check if we can promote to potentialType from type. |
6890 if (typeSystem.canPromoteToType(potentialType, type)) { | 6890 DartType promoteType = typeSystem.tryPromoteToType(potentialType, type); |
| 6891 if (promoteType != null) { |
6891 // Do promote type of variable. | 6892 // Do promote type of variable. |
6892 _promoteManager.setType(element, potentialType); | 6893 _promoteManager.setType(element, promoteType); |
6893 } | 6894 } |
6894 } | 6895 } |
6895 } | 6896 } |
6896 | 6897 |
6897 /** | 6898 /** |
6898 * Promotes type information using given condition. | 6899 * Promotes type information using given condition. |
6899 */ | 6900 */ |
6900 void _promoteTypes(Expression condition) { | 6901 void _promoteTypes(Expression condition) { |
6901 if (condition is BinaryExpression) { | 6902 if (condition is BinaryExpression) { |
6902 if (condition.operator.type == TokenType.AMPERSAND_AMPERSAND) { | 6903 if (condition.operator.type == TokenType.AMPERSAND_AMPERSAND) { |
(...skipping 3817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10720 return null; | 10721 return null; |
10721 } | 10722 } |
10722 if (identical(node.staticElement, variable)) { | 10723 if (identical(node.staticElement, variable)) { |
10723 if (node.inSetterContext()) { | 10724 if (node.inSetterContext()) { |
10724 result = true; | 10725 result = true; |
10725 } | 10726 } |
10726 } | 10727 } |
10727 return null; | 10728 return null; |
10728 } | 10729 } |
10729 } | 10730 } |
OLD | NEW |