public ArgumentsInfo(IEmitter emitter, InvocationExpression invocationExpression, IMethod method = null) { Emitter = emitter; Expression = invocationExpression; var arguments = invocationExpression.Arguments.ToList(); var rr = emitter.Resolver.ResolveNode(invocationExpression); ResolveResult = rr as InvocationResolveResult; if (ResolveResult == null && rr is DynamicInvocationResolveResult drr) { BuildDynamicArgumentsList(drr, arguments); } else { BuildArgumentsList(arguments); } if (ResolveResult != null) { HasTypeArguments = ((IMethod)ResolveResult.Member).TypeArguments.Count > 0; BuildTypedArguments(invocationExpression.Target); } if (method != null && method.Parameters.Count > 0) { ThisArgument = invocationExpression; var name = method.Parameters[0].Name; if (!ArgumentsNames.Contains(name)) { var list = ArgumentsNames.ToList(); list.Add(name); ArgumentsNames = list.ToArray(); var expr = ArgumentsExpressions.ToList(); expr.Insert(0, invocationExpression); ArgumentsExpressions = expr.ToArray(); var namedExpr = NamedExpressions.ToList(); namedExpr.Insert(0, new NamedParamExpression(name, invocationExpression)); NamedExpressions = namedExpr.ToArray(); } } }
public ArgumentsInfo(IEmitter emitter, ObjectCreateExpression objectCreateExpression, IMethod method = null) { Emitter = emitter; Expression = objectCreateExpression; var arguments = objectCreateExpression.Arguments.ToList(); var rr = emitter.Resolver.ResolveNode(objectCreateExpression); if (rr is DynamicInvocationResolveResult drr) { if (drr.Target is MethodGroupResolveResult group && group.Methods.Count() > 1) { throw new EmitterException(objectCreateExpression, Constants.Messages.Exceptions.DYNAMIC_INVOCATION_TOO_MANY_OVERLOADS); } } ResolveResult = rr as InvocationResolveResult; BuildArgumentsList(arguments); BuildTypedArguments(objectCreateExpression.Type); if (method != null && method.Parameters.Count > 0) { ThisArgument = objectCreateExpression; var name = method.Parameters[0].Name; if (!ArgumentsNames.Contains(name)) { var list = ArgumentsNames.ToList(); list.Add(name); ArgumentsNames = list.ToArray(); var expr = ArgumentsExpressions.ToList(); expr.Add(objectCreateExpression); ArgumentsExpressions = expr.ToArray(); var namedExpr = NamedExpressions.ToList(); namedExpr.Add(new NamedParamExpression(name, objectCreateExpression)); NamedExpressions = namedExpr.ToArray(); } } }