IKVM.Internal.MethodWrapper.Create C# (CSharp) Method

Create() static private method

static private Create ( TypeWrapper declaringType, string name, string sig, MethodBase method, TypeWrapper returnType, TypeWrapper parameterTypes, Modifiers modifiers, MemberFlags flags ) : MethodWrapper
declaringType TypeWrapper
name string
sig string
method MethodBase
returnType TypeWrapper
parameterTypes TypeWrapper
modifiers Modifiers
flags MemberFlags
return MethodWrapper
        internal static MethodWrapper Create(TypeWrapper declaringType, string name, string sig, MethodBase method, TypeWrapper returnType, TypeWrapper[] parameterTypes, Modifiers modifiers, MemberFlags flags)
        {
            Debug.Assert(declaringType != null && name!= null && sig != null && method != null);

            if(declaringType.IsGhost)
            {
                // HACK since our caller isn't aware of the ghost issues, we'll handle the method swapping
                if(method.DeclaringType.IsValueType)
                {
                    Type[] types = new Type[parameterTypes.Length];
                    for(int i = 0; i < types.Length; i++)
                    {
                        types[i] = parameterTypes[i].TypeAsSignatureType;
                    }
                    method = declaringType.TypeAsBaseType.GetMethod(method.Name, types);
                }
            #if !NOEMIT
                return new GhostMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
            #else
                Console.WriteLine("TODO: wire up slow reflected ghost methods");
                return new GhostMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
            #endif
            }
            else if(method is ConstructorInfo)
            {
            #if !NOEMIT
                return new SmartConstructorMethodWrapper(declaringType, name, sig, (ConstructorInfo)method, parameterTypes, modifiers, flags);
            #else
                return new SlowConstructorMethodWrapper(declaringType, name, sig, (ConstructorInfo)method, PrimitiveTypeWrapper.VOID, parameterTypes, modifiers, flags);
            #endif
            }
            else
            {
            #if !NOEMIT
                return new SmartCallMethodWrapper(declaringType, name, sig, (MethodInfo)method, returnType, parameterTypes, modifiers, flags, SimpleOpCode.Call, method.IsStatic ? SimpleOpCode.Call : SimpleOpCode.Callvirt);
            #else
                return new SlowMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
            #endif
            }
        }