public static MethodBuilder ImplementEmptyStubMethod( TypeBuilder tB, MethodInfo method, bool isVirtual = false )
{
if( tB == null ) throw new ArgumentNullException( "tB" );
if( method == null ) throw new ArgumentNullException( "method" );
ParameterInfo[] parameters = method.GetParameters();
Type[] parametersTypes = ReflectionHelper.CreateParametersType( parameters );
Type returnType = method.ReturnType;
MethodAttributes mA = method.Attributes & ~(MethodAttributes.Abstract | MethodAttributes.VtableLayoutMask);
if( isVirtual ) mA |= MethodAttributes.Virtual;
MethodBuilder mB = tB.DefineMethod( method.Name, mA );
if( method.ContainsGenericParameters )
{
int i = 0;
Type[] genericArguments = method.GetGenericArguments();
string[] names = genericArguments.Select( t => String.Format( "T{0}", i++ ) ).ToArray();
var genericParameters = mB.DefineGenericParameters( names );
for( i = 0; i < names.Length; ++i )
{
var genericTypeArgument = genericArguments[i].GetTypeInfo();
GenericTypeParameterBuilder genericTypeBuilder = genericParameters[i];
genericTypeBuilder.SetGenericParameterAttributes( genericTypeArgument.GenericParameterAttributes );
genericTypeBuilder.SetInterfaceConstraints( genericTypeArgument.GetGenericParameterConstraints() );
}
}
mB.SetReturnType( method.ReturnType );
mB.SetParameters( ReflectionHelper.CreateParametersType( parameters ) );
EmitEmptyImplementation( mB, returnType, parameters );
return mB;
}