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

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

Issue 2954523002: fix #27259, implement covariance checking for strong mode and DDC (Closed)
Patch Set: merged and fix an analysis error Created 3 years, 5 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/standard_resolution_map.dart'; 10 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
(...skipping 6497 matching lines...) Expand 10 before | Expand all | Expand 10 after
6508 } 6508 }
6509 FunctionType expectedClosureType = mayByFunctionType as FunctionType; 6509 FunctionType expectedClosureType = mayByFunctionType as FunctionType;
6510 // If the expectedClosureType is not more specific than the static type, 6510 // If the expectedClosureType is not more specific than the static type,
6511 // return. 6511 // return.
6512 DartType staticClosureType = 6512 DartType staticClosureType =
6513 resolutionMap.elementDeclaredByFunctionExpression(closure)?.type; 6513 resolutionMap.elementDeclaredByFunctionExpression(closure)?.type;
6514 if (staticClosureType != null && 6514 if (staticClosureType != null &&
6515 !FunctionTypeImpl.relate( 6515 !FunctionTypeImpl.relate(
6516 expectedClosureType, 6516 expectedClosureType,
6517 staticClosureType, 6517 staticClosureType,
6518 (DartType t, DartType s, _, __) => 6518 (s, t) => true,
6519 (t as TypeImpl).isMoreSpecificThan(s),
6520 new TypeSystemImpl(typeProvider).instantiateToBounds, 6519 new TypeSystemImpl(typeProvider).instantiateToBounds,
6521 returnRelation: (s, t) => true)) { 6520 parameterRelation: (t, s) =>
6521 (t.type as TypeImpl).isMoreSpecificThan(s.type))) {
6522 return; 6522 return;
6523 } 6523 }
6524 // set propagated type for the closure 6524 // set propagated type for the closure
6525 if (!strongMode) { 6525 if (!strongMode) {
6526 closure.propagatedType = expectedClosureType; 6526 closure.propagatedType = expectedClosureType;
6527 } 6527 }
6528 // set inferred types for parameters 6528 // set inferred types for parameters
6529 NodeList<FormalParameter> parameters = closure.parameters.parameters; 6529 NodeList<FormalParameter> parameters = closure.parameters.parameters;
6530 List<ParameterElement> expectedParameters = expectedClosureType.parameters; 6530 List<ParameterElement> expectedParameters = expectedClosureType.parameters;
6531 for (int i = 0; 6531 for (int i = 0;
(...skipping 4126 matching lines...) Expand 10 before | Expand all | Expand 10 after
10658 return null; 10658 return null;
10659 } 10659 }
10660 if (identical(node.staticElement, variable)) { 10660 if (identical(node.staticElement, variable)) {
10661 if (node.inSetterContext()) { 10661 if (node.inSetterContext()) {
10662 result = true; 10662 result = true;
10663 } 10663 }
10664 } 10664 }
10665 return null; 10665 return null;
10666 } 10666 }
10667 } 10667 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/type.dart ('k') | pkg/analyzer/lib/src/generated/type_system.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698