internal DelegateInnerClassTypeWrapper(string name, Type delegateType, ClassLoaderWrapper classLoader)
: base(Modifiers.Public | Modifiers.Interface | Modifiers.Abstract, name, null)
{
#if STATIC_COMPILER || STUB_GENERATOR
this.fakeType = FakeTypes.GetDelegateType(delegateType);
#elif !FIRST_PASS
this.fakeType = typeof([email protected]<>).MakeGenericType(delegateType);
#endif
MethodInfo invoke = delegateType.GetMethod("Invoke");
ParameterInfo[] parameters = invoke.GetParameters();
TypeWrapper[] argTypeWrappers = new TypeWrapper[parameters.Length];
System.Text.StringBuilder sb = new System.Text.StringBuilder("(");
MemberFlags flags = MemberFlags.None;
for (int i = 0; i < parameters.Length; i++)
{
Type parameterType = parameters[i].ParameterType;
if (parameterType.IsByRef)
{
flags |= MemberFlags.DelegateInvokeWithByRefParameter;
parameterType = ArrayTypeWrapper.MakeArrayType(parameterType.GetElementType(), 1);
}
argTypeWrappers[i] = ClassLoaderWrapper.GetWrapperFromType(parameterType);
sb.Append(argTypeWrappers[i].SigName);
}
TypeWrapper returnType = ClassLoaderWrapper.GetWrapperFromType(invoke.ReturnType);
sb.Append(")").Append(returnType.SigName);
MethodWrapper invokeMethod = new DynamicOnlyMethodWrapper(this, "Invoke", sb.ToString(), returnType, argTypeWrappers, flags);
SetMethods(new MethodWrapper[] { invokeMethod });
SetFields(FieldWrapper.EmptyArray);
}