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

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

Issue 2375373002: fix #27040, promote the upper bound of a type parameter (Closed)
Patch Set: Created 4 years, 2 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.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 7566 matching lines...) Expand 10 before | Expand all | Expand 10 after
7577 return; 7577 return;
7578 } 7578 }
7579 // prepare current variable type 7579 // prepare current variable type
7580 DartType type = _promoteManager.getType(element) ?? 7580 DartType type = _promoteManager.getType(element) ??
7581 expression.staticType ?? 7581 expression.staticType ??
7582 DynamicTypeImpl.instance; 7582 DynamicTypeImpl.instance;
7583 7583
7584 potentialType ??= DynamicTypeImpl.instance; 7584 potentialType ??= DynamicTypeImpl.instance;
7585 7585
7586 // Check if we can promote to potentialType from type. 7586 // Check if we can promote to potentialType from type.
7587 if (typeSystem.canPromoteToType(potentialType, type)) { 7587 DartType promoteType = typeSystem.tryPromoteToType(potentialType, type);
7588 if (promoteType != null) {
7588 // Do promote type of variable. 7589 // Do promote type of variable.
7589 _promoteManager.setType(element, potentialType); 7590 _promoteManager.setType(element, promoteType);
7590 } 7591 }
7591 } 7592 }
7592 } 7593 }
7593 7594
7594 /** 7595 /**
7595 * Promotes type information using given condition. 7596 * Promotes type information using given condition.
7596 */ 7597 */
7597 void _promoteTypes(Expression condition) { 7598 void _promoteTypes(Expression condition) {
7598 if (condition is BinaryExpression) { 7599 if (condition is BinaryExpression) {
7599 if (condition.operator.type == TokenType.AMPERSAND_AMPERSAND) { 7600 if (condition.operator.type == TokenType.AMPERSAND_AMPERSAND) {
(...skipping 3673 matching lines...) Expand 10 before | Expand all | Expand 10 after
11273 return null; 11274 return null;
11274 } 11275 }
11275 if (identical(node.staticElement, variable)) { 11276 if (identical(node.staticElement, variable)) {
11276 if (node.inSetterContext()) { 11277 if (node.inSetterContext()) {
11277 result = true; 11278 result = true;
11278 } 11279 }
11279 } 11280 }
11280 return null; 11281 return null;
11281 } 11282 }
11282 } 11283 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/type_system.dart » ('j') | pkg/analyzer/test/src/task/strong/checker_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698