Index: pkg/analyzer/lib/src/generated/element_resolver.dart |
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart |
index 029b5c6759abc85ffcba5d66c3c6141a90e70b38..b3dbb0b9eae1e21ccadb020983c69545e9600407 100644 |
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart |
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart |
@@ -643,7 +643,9 @@ class ElementResolver extends SimpleAstVisitor<Object> { |
} |
staticElement = _resolveElement(typeReference, methodName); |
} else { |
- DartType staticType = _getStaticType(target); |
+ DartType staticType = _resolver.strongMode |
+ ? _getStaticTypeOrFunctionType(target) |
+ : _getStaticType(target); |
DartType propagatedType = _getPropagatedType(target); |
staticElement = _resolveInvokedElementWithTarget( |
target, staticType, methodName, isConditional); |
@@ -817,6 +819,7 @@ class ElementResolver extends SimpleAstVisitor<Object> { |
} |
return type; |
} |
+ |
DartType targetType = getSuperType(_getStaticType(target)); |
String targetTypeName = targetType?.name; |
_resolver.errorReporter.reportErrorForNode( |
@@ -1516,10 +1519,7 @@ class ElementResolver extends SimpleAstVisitor<Object> { |
* type analysis. |
*/ |
DartType _getStaticType(Expression expression) { |
- if (expression is NullLiteral) { |
- return _resolver.typeProvider.bottomType; |
- } |
- DartType staticType = _resolveTypeParameter(expression.staticType); |
+ DartType staticType = _getStaticTypeOrFunctionType(expression); |
if (staticType is FunctionType) { |
// |
// All function types are subtypes of 'Function', which is itself a |
@@ -1530,6 +1530,13 @@ class ElementResolver extends SimpleAstVisitor<Object> { |
return staticType; |
} |
+ DartType _getStaticTypeOrFunctionType(Expression expression) { |
+ if (expression is NullLiteral) { |
+ return _resolver.typeProvider.bottomType; |
+ } |
+ return _resolveTypeParameter(expression.staticType); |
+ } |
+ |
/** |
* Check for a generic method & apply type arguments if any were passed. |
*/ |
@@ -2196,6 +2203,10 @@ class ElementResolver extends SimpleAstVisitor<Object> { |
return element; |
} else if (target is SimpleIdentifier) { |
Element targetElement = target.staticElement; |
+ if (targetType is FunctionType && |
+ methodName.name == FunctionElement.CALL_METHOD_NAME) { |
+ return targetElement; |
+ } |
if (targetElement is PrefixElement) { |
if (isConditional) { |
_resolver.errorReporter.reportErrorForNode( |