public WrapMethodAction(BaseTypeGenerationContext context, Func<MethodInfo> methodInfo, List<IGeneratedParameter> parameters, int index) { var generatedMethod = context.AddMethod(method => { method.Named(() => methodInfo().Name + "_" + index); method.AddArguments(() => parameters); method.Returns(() => methodInfo().ReturnType); method.WithBody(body => { body.TargettingSelf(); if (method.ReturnType() != typeof(void)) { var variable = body.CreateVariable(method.ReturnType()); variable.AssignFrom(() => body.Call(methodInfo, () => parameters)); body.Return(variable); } else { body.Call(methodInfo, () => parameters); } }); }); GeneratedMethod = generatedMethod; }
public WrapMethodAction(BaseTypeGenerationContext context, Func <MethodInfo> methodInfo, List <IGeneratedParameter> parameters, int index) { var generatedMethod = context.AddMethod(method => { method.Named(() => methodInfo().Name + "_" + index); method.AddArguments(() => parameters); method.Returns(() => methodInfo().ReturnType); method.WithBody(body => { body.TargettingSelf(); if (method.ReturnType() != typeof(void)) { var variable = body.CreateVariable(method.ReturnType()); variable.AssignFrom(() => body.Call(methodInfo, () => parameters)); body.Return(variable); } else { body.Call(methodInfo, () => parameters); } }); }); GeneratedMethod = generatedMethod; }
public GeneratedParameter(Func<GeneratedField> field, int parameterIndex, BaseTypeGenerationContext context, Func<Func<ILGenerator>> builder) { this.field = field; this.context = context; this.builder = builder; this.LocalIndex = parameterIndex; }
public GeneratedParameter(Type type, int parameterIndex, BaseTypeGenerationContext context, Func<Func<ILGenerator>> builder) { this.context = context; this.builder = builder; this.type = type; this.LocalIndex = parameterIndex; }
public WrapMethodAction(BaseTypeGenerationContext context, Func <MethodBuilderBundle> methodBuilder, List <IGeneratedParameter> parameters, int index) { var generatedMethod = context.AddMethod(method => { method.Named(() => methodBuilder().MethodBuilder.Name + "_" + index); method.AddArguments(() => parameters); method.Returns(() => methodBuilder().MethodBuilder.ReturnType); method.WithBody(body => { body.TargettingSelf(); body.Return(body.Call(() => methodBuilder().MethodBuilder, () => parameters)); }); }); GeneratedMethod = generatedMethod; }
public WrapMethodAction(BaseTypeGenerationContext context, Func<MethodBuilderBundle> methodBuilder, List<IGeneratedParameter> parameters, int index) { var generatedMethod = context.AddMethod(method => { method.Named(() => methodBuilder().MethodBuilder.Name + "_" + index); method.AddArguments(() => parameters); method.Returns(() => methodBuilder().MethodBuilder.ReturnType); method.WithBody(body => { body.TargettingSelf(); body.Return(body.Call(() => methodBuilder().MethodBuilder, () => parameters)); }); }); GeneratedMethod = generatedMethod; }
private void ProxyMethods(BaseTypeGenerationContext type, Type typeToProxy, GeneratedField field) { var methods = typeToProxy.GetMethods(BindingFlags.Public | BindingFlags.Instance); for (int i = 0; i < methods.Length; i++) { var methodInfo = methods[i]; if (methodInfo.IsVirtual && methodInfo.GetBaseDefinition().DeclaringType != typeof(object)) { type.OverrideMethod(methodInfo, method => method.WithBody(body => { if (methodInfo.GetCustomAttributes(typeof(IAopAttribute), true).Length == 0) { body.CallBase(methodInfo); return; } GeneratedVariable locator = null; if (useServiceLocator) { locator = body.CreateVariable <Microsoft.Practices.ServiceLocation.IServiceLocator>(); locator.AssignFrom(field); } GeneratePreProcessors(body, methodInfo, locator); var returnValue = GenerateEncapsulatedCalls(methodInfo, body, locator, field); GeneratePostProcessors(body, methodInfo, locator); if (returnValue != null) { body.Return(returnValue); } })); } } }
public OverrideMethodContext(MethodInfo info, GeneratedMethod method, BaseTypeGenerationContext typeGenerationContext) : base(typeGenerationContext) { this.info = info; SetMethod(method); }
public ConstructorBodyContext(BaseTypeGenerationContext typeGenerationContext) : base(typeGenerationContext) { }
protected BaseMethodGenerationContext(BaseTypeGenerationContext typeGenerationContext) { this.typeGenerationContext = typeGenerationContext; }
public DelegateGenerator(BaseTypeGenerationContext context) { argumentTypes = new List<Type>(); this.context = context; }