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

Unified Diff: pkg/analyzer/lib/src/generated/type_system.dart

Issue 1720433002: fixes #25477, downward inference of generic methods (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix breakage caused by refactoring Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/generated/type_system.dart
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index 42ca0282b6d6391a474f9d4c2680f02be457a228..ee4d0a12af6347031c6096fe95ea0641daa2950a 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -68,11 +68,12 @@ class StrongTypeSystemImpl implements TypeSystem {
/// As a simplification, we do not actually store all constraints on each type
/// parameter Tj. Instead we track Uj and Lj where U is the upper bound and
/// L is the lower bound of that type parameter.
- FunctionType inferCallFromArguments(
+ FunctionType inferGenericFunctionCall(
TypeProvider typeProvider,
FunctionType fnType,
List<DartType> correspondingParameterTypes,
- List<DartType> argumentTypes) {
+ List<DartType> argumentTypes,
+ DartType returnContextType) {
if (fnType.typeFormals.isEmpty) {
return fnType;
}
@@ -84,6 +85,10 @@ class StrongTypeSystemImpl implements TypeSystem {
var inferringTypeSystem =
new _StrongInferenceTypeSystem(typeProvider, fnType.typeFormals);
+ if (returnContextType != null) {
+ inferringTypeSystem.isSubtypeOf(fnType.returnType, returnContextType);
+ }
+
for (int i = 0; i < argumentTypes.length; i++) {
// Try to pass each argument to each parameter, recording any type
// parameter bounds that were implied by this assignment.
@@ -105,7 +110,7 @@ class StrongTypeSystemImpl implements TypeSystem {
* Given a generic function type `F<T0, T1, ... Tn>` and a context type C,
* infer an instantiation of F, such that `F<S0, S1, ..., Sn>` <: C.
*
- * This is similar to [inferCallFromArguments], but the return type is also
+ * This is similar to [inferGenericFunctionCall], but the return type is also
* considered as part of the solution.
*
* If this function is called with a [contextType] that is also

Powered by Google App Engine
This is Rietveld 408576698