Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 public GeneratedParameter(Type type, int parameterIndex, BaseTypeGenerationContext context, Func<Func<ILGenerator>> builder)
 {
     this.context = context;
     this.builder = builder;
     this.type = type;
     this.LocalIndex = parameterIndex;
 }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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);
                        }
                    }));
                }
            }
        }
Exemplo n.º 8
0
 public OverrideMethodContext(MethodInfo info, GeneratedMethod method, BaseTypeGenerationContext typeGenerationContext)
     : base(typeGenerationContext)
 {
     this.info = info;
     SetMethod(method);
 }
Exemplo n.º 9
0
 public ConstructorBodyContext(BaseTypeGenerationContext typeGenerationContext)
     : base(typeGenerationContext)
 {
 }
Exemplo n.º 10
0
 public ConstructorBodyContext(BaseTypeGenerationContext typeGenerationContext) : base(typeGenerationContext)
 {
 }
Exemplo n.º 11
0
 protected BaseMethodGenerationContext(BaseTypeGenerationContext typeGenerationContext)
 {
     this.typeGenerationContext = typeGenerationContext;
 }
Exemplo n.º 12
0
 public DelegateGenerator(BaseTypeGenerationContext context)
 {
     argumentTypes = new List<Type>();
     this.context = context;
 }