@@ -643,7 +643,9 @@ class ElementResolver extends SimpleAstVisitor<Object> {
643
643
}
644
644
staticElement = _resolveElement (typeReference, methodName);
645
645
} else {
646
- DartType staticType = _getStaticType (target);
646
+ DartType staticType = _resolver.strongMode
647
+ ? _getStaticTypeOrFunctionType (target)
648
+ : _getStaticType (target);
647
649
DartType propagatedType = _getPropagatedType (target);
648
650
staticElement = _resolveInvokedElementWithTarget (
649
651
target, staticType, methodName, isConditional);
@@ -1544,10 +1546,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
1544
1546
* type analysis.
1545
1547
*/
1546
1548
DartType _getStaticType (Expression expression) {
1547
- if (expression is NullLiteral ) {
1548
- return _resolver.typeProvider.bottomType;
1549
- }
1550
- DartType staticType = _resolveTypeParameter (expression.staticType);
1549
+ DartType staticType = _getStaticTypeOrFunctionType (expression);
1551
1550
if (staticType is FunctionType ) {
1552
1551
//
1553
1552
// All function types are subtypes of 'Function', which is itself a
@@ -1558,6 +1557,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
1558
1557
return staticType;
1559
1558
}
1560
1559
1560
+ DartType _getStaticTypeOrFunctionType (Expression expression) {
1561
+ if (expression is NullLiteral ) {
1562
+ return _resolver.typeProvider.bottomType;
1563
+ }
1564
+ return _resolveTypeParameter (expression.staticType);
1565
+ }
1566
+
1561
1567
/**
1562
1568
* Check for a generic method & apply type arguments if any were passed.
1563
1569
*/
@@ -2224,6 +2230,10 @@ class ElementResolver extends SimpleAstVisitor<Object> {
2224
2230
return element;
2225
2231
} else if (target is SimpleIdentifier ) {
2226
2232
Element targetElement = target.staticElement;
2233
+ if (targetType is FunctionType &&
2234
+ methodName.name == FunctionElement .CALL_METHOD_NAME ) {
2235
+ return targetElement;
2236
+ }
2227
2237
if (targetElement is PrefixElement ) {
2228
2238
if (isConditional) {
2229
2239
_resolver.errorReporter.reportErrorForNode (
0 commit comments