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

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: rebase Created 3 years, 6 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 6783 matching lines...) Expand 10 before | Expand all | Expand 10 after
6794 } 6794 }
6795 FunctionType expectedClosureType = mayByFunctionType as FunctionType; 6795 FunctionType expectedClosureType = mayByFunctionType as FunctionType;
6796 // If the expectedClosureType is not more specific than the static type, 6796 // If the expectedClosureType is not more specific than the static type,
6797 // return. 6797 // return.
6798 DartType staticClosureType = 6798 DartType staticClosureType =
6799 resolutionMap.elementDeclaredByFunctionExpression(closure)?.type; 6799 resolutionMap.elementDeclaredByFunctionExpression(closure)?.type;
6800 if (staticClosureType != null && 6800 if (staticClosureType != null &&
6801 !FunctionTypeImpl.relate( 6801 !FunctionTypeImpl.relate(
6802 expectedClosureType, 6802 expectedClosureType,
6803 staticClosureType, 6803 staticClosureType,
6804 (DartType t, DartType s, _, __) => 6804 (s, t) => true,
6805 (t as TypeImpl).isMoreSpecificThan(s),
6806 new TypeSystemImpl(typeProvider).instantiateToBounds, 6805 new TypeSystemImpl(typeProvider).instantiateToBounds,
6807 returnRelation: (s, t) => true)) { 6806 parameterRelation: (t, s) =>
6807 (t.type as TypeImpl).isMoreSpecificThan(s.type))) {
6808 return; 6808 return;
6809 } 6809 }
6810 // set propagated type for the closure 6810 // set propagated type for the closure
6811 if (!strongMode) { 6811 if (!strongMode) {
6812 closure.propagatedType = expectedClosureType; 6812 closure.propagatedType = expectedClosureType;
6813 } 6813 }
6814 // set inferred types for parameters 6814 // set inferred types for parameters
6815 NodeList<FormalParameter> parameters = closure.parameters.parameters; 6815 NodeList<FormalParameter> parameters = closure.parameters.parameters;
6816 List<ParameterElement> expectedParameters = expectedClosureType.parameters; 6816 List<ParameterElement> expectedParameters = expectedClosureType.parameters;
6817 for (int i = 0; 6817 for (int i = 0;
(...skipping 4118 matching lines...) Expand 10 before | Expand all | Expand 10 after
10936 return null; 10936 return null;
10937 } 10937 }
10938 if (identical(node.staticElement, variable)) { 10938 if (identical(node.staticElement, variable)) {
10939 if (node.inSetterContext()) { 10939 if (node.inSetterContext()) {
10940 result = true; 10940 result = true;
10941 } 10941 }
10942 } 10942 }
10943 return null; 10943 return null;
10944 } 10944 }
10945 } 10945 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698