if (node.inSetterContext()) {
ExecutableElement staticMethodElement = node.getStaticElement();
Type staticType = computeArgumentType(staticMethodElement);
recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.getPropagatedElement();
if (propagatedMethodElement != staticMethodElement) {
Type propagatedType = computeArgumentType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
recordPropagatedType(node, propagatedType);
}
}
} else {
ExecutableElement staticMethodElement = node.getStaticElement();
Type staticType = computeStaticReturnType(staticMethodElement);
recordStaticType(node, staticType);
MethodElement propagatedMethodElement = node.getPropagatedElement();
if (propagatedMethodElement != staticMethodElement) {
Type propagatedType = computeStaticReturnType(propagatedMethodElement);
if (propagatedType != null && propagatedType.isMoreSpecificThan(staticType)) {
recordPropagatedType(node, propagatedType);
}