* If <i>F</i> is not a function type, the static type of <i>i</i> is dynamic. Otherwise the
* static type of <i>i</i> is the declared return type of <i>F</i>.</blockquote>
*/
@Override
public Void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
ExecutableElement staticMethodElement = node.getStaticElement();
// Record static return type of the static element.
Type staticStaticType = computeStaticReturnType(staticMethodElement);
recordStaticType(node, staticStaticType);
// Record propagated return type of the static element.
Type staticPropagatedType = computePropagatedReturnType(staticMethodElement);
if (staticPropagatedType != null
&& (staticStaticType == null || staticPropagatedType.isMoreSpecificThan(staticStaticType))) {
recordPropagatedType(node, staticPropagatedType);
}
ExecutableElement propagatedMethodElement = node.getPropagatedElement();
if (propagatedMethodElement != staticMethodElement) {
// Record static return type of the propagated element.
Type propagatedStaticType = computeStaticReturnType(propagatedMethodElement);
if (propagatedStaticType != null
&& (staticStaticType == null || propagatedStaticType.isMoreSpecificThan(staticStaticType))