| Index: pkg/analyzer/lib/src/generated/resolver.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
|
| index 84d7058766fd008301a11254fd1ebf14e5e6fdc2..f2e17eb26d74961ff3df12cf477ef59b6f6a6c2e 100644
|
| --- a/pkg/analyzer/lib/src/generated/resolver.dart
|
| +++ b/pkg/analyzer/lib/src/generated/resolver.dart
|
| @@ -8161,7 +8161,7 @@ class ResolverVisitor extends ScopedVisitor {
|
| safelyVisit(node.function);
|
| node.accept(elementResolver);
|
| _inferFunctionExpressionsParametersTypes(node.argumentList);
|
| - InferenceContext.setType(node.argumentList, node.function.staticType);
|
| + _inferArgumentTypesFromContext(node);
|
| safelyVisit(node.argumentList);
|
| node.accept(typeAnalyzer);
|
| return null;
|
| @@ -8380,13 +8380,30 @@ class ResolverVisitor extends ScopedVisitor {
|
| safelyVisit(node.typeArguments);
|
| node.accept(elementResolver);
|
| _inferFunctionExpressionsParametersTypes(node.argumentList);
|
| + _inferArgumentTypesFromContext(node);
|
| + safelyVisit(node.argumentList);
|
| + node.accept(typeAnalyzer);
|
| + return null;
|
| + }
|
| +
|
| + void _inferArgumentTypesFromContext(InvocationExpression node) {
|
| DartType contextType = node.staticInvokeType;
|
| if (contextType is FunctionType) {
|
| + DartType originalType = node.invocationTarget.staticType;
|
| + DartType returnContextType = InferenceContext.getType(node);
|
| + TypeSystem ts = typeSystem;
|
| + if (returnContextType != null &&
|
| + node.typeArguments == null &&
|
| + originalType is FunctionType &&
|
| + originalType.typeFormals.isNotEmpty &&
|
| + ts is StrongTypeSystemImpl) {
|
| +
|
| + contextType = ts.inferGenericFunctionCall(typeProvider, originalType,
|
| + DartType.EMPTY_LIST, DartType.EMPTY_LIST, returnContextType);
|
| + }
|
| +
|
| InferenceContext.setType(node.argumentList, contextType);
|
| }
|
| - safelyVisit(node.argumentList);
|
| - node.accept(typeAnalyzer);
|
| - return null;
|
| }
|
|
|
| @override
|
|
|