IKVM.Internal.DotNetTypeWrapper.DelegateInnerClassTypeWrapper.DelegateInnerClassTypeWrapper C# (CSharp) Method

DelegateInnerClassTypeWrapper() private method

private DelegateInnerClassTypeWrapper ( string name, Type delegateType, ClassLoaderWrapper classLoader ) : System.Reflection.Emit
name string
delegateType IKVM.Reflection.Type
classLoader ClassLoaderWrapper
return System.Reflection.Emit
            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);
            }
DotNetTypeWrapper.DelegateInnerClassTypeWrapper