private void ProcessMethodInvocationExpression(MethodInvocationExpression node, IEntity targetEntity)
{
if (ResolvedAsExtension(node) || IsExtensionMethod(targetEntity))
{
PreNormalizeExtensionInvocation(node, targetEntity as IEntityWithParameters);
}
targetEntity = ResolveAmbiguousMethodInvocation(node, targetEntity);
if (targetEntity == null)
return;
switch (targetEntity.EntityType)
{
case EntityType.BuiltinFunction:
{
ProcessBuiltinInvocation(node, (BuiltinFunction)targetEntity);
break;
}
case EntityType.Event:
{
ProcessEventInvocation(node, (IEvent)targetEntity);
break;
}
case EntityType.Method:
{
ProcessMethodInvocation(node, (IMethod) targetEntity);
break;
}
case EntityType.Constructor:
{
ProcessConstructorInvocation(node, targetEntity);
break;
}
case EntityType.Type:
{
ProcessTypeInvocation(node);
break;
}
case EntityType.Error:
{
Error(node);
break;
}
default:
{
ProcessGenericMethodInvocation(node);
break;
}
}
}