Inheritance: IEasyMember
        public EasyProperty CreateProperty(string name, Type returnType)
        {
            EasyProperty property = new EasyProperty(this, name, returnType);

            this._properties.Add(property);
            return(property);
        }
Ejemplo n.º 2
0
        public EasyProperty CreateProperty(String name, Type returnType)
        {
            EasyProperty prop = new EasyProperty(this, name, returnType);

            _properties.Add(prop);
            return(prop);
        }
Ejemplo n.º 3
0
        private void GenerateTargetProperty()
        {
            EasyProperty property  = CreateProperty("Target", typeof(object));
            EasyMethod   getMethod = property.CreateGetMethod();

            MethodInfo baseMethod = typeof(MulticastDelegate).GetMethod("get_Target");

            getMethod.CodeBuilder.AddStatement(
                new ReturnStatement(new MethodInvocationExpression(baseMethod)));

//			PropertyAttributes patts = PropertyAttributes.None;
//			PropertyBuilder pbuilder = _delegateBuilder.DefineProperty("Target", patts, typeof(Object), null);
//
//			MethodAttributes atts = MethodAttributes.Public|MethodAttributes.Virtual|MethodAttributes.SpecialName;
//			MethodBuilder methodBuilder = _delegateBuilder.DefineMethod("get_Target",
//				atts, CallingConventions.Standard, typeof(object), new Type[0]);
//
//			ILGenerator gen = methodBuilder.GetILGenerator();
//
//			gen.DeclareLocal( typeof(object) );
//			gen.Emit(OpCodes.Ldarg_0);
//			gen.Emit(OpCodes.Call, typeof(MulticastDelegate).GetMethod("get_Target"));
//			gen.Emit(OpCodes.Stloc_0);
//			gen.Emit(OpCodes.Ldloc_0);
//			gen.Emit(OpCodes.Ret);
//
//			pbuilder.SetGetMethod(methodBuilder);
        }
        public EasyProperty CreateProperty(PropertyInfo property)
        {
            EasyProperty property2 = new EasyProperty(this, property.Name, property.PropertyType);

            property2.IndexParameters = property.GetIndexParameters();
            this._properties.Add(property2);
            return(property2);
        }
Ejemplo n.º 5
0
		public void Add(EasyProperty property)
		{
			InnerList.Add(property);
		}
Ejemplo n.º 6
0
		public EasyProperty CreateProperty( PropertyInfo property )
		{
			EasyProperty prop = new EasyProperty( this, property.Name, property.PropertyType );
			prop.IndexParameters = property.GetIndexParameters();
			_properties.Add(prop);
			return prop;
		}
Ejemplo n.º 7
0
		public EasyProperty CreateProperty( String name, Type returnType )
		{
			EasyProperty prop = new EasyProperty( this, name, returnType );
			_properties.Add(prop);
			return prop;
		}
Ejemplo n.º 8
0
        protected virtual EasyProperty[] GenerateProperties(Type inter)
        {
            PropertyInfo[] properties = inter.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            EasyProperty[] propertiesBuilder = new EasyProperty[properties.Length];

            for(int i = 0; i < properties.Length; i++)
            {
                propertiesBuilder[i] = CreateProperty(properties[i]);
            }

            return propertiesBuilder;
        }
Ejemplo n.º 9
0
        protected virtual void GenerateMethods(Type inter, EasyProperty[] properties)
        {
            MethodInfo[] methods = inter.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            foreach(MethodInfo method in methods)
            {
                if (method.IsFinal)
                {
                    Context.AddMethodToGenerateNewSlot(method);
                }
                if (method.IsPrivate || !method.IsVirtual || method.IsFinal)
                {
                    continue;
                }
            #if DOTNET2
                if (method.IsAssembly && !IsInternalToDynamicProxy(method.Module.Assembly))
            #else
                if (method.IsAssembly && !IsInternalToDynamicProxy(inter.Assembly))
            #endif
                {
                    continue;
                }
                if (method.DeclaringType.Equals(typeof(Object)) && !method.IsVirtual)
                {
                    continue;
                }
                if (method.DeclaringType.Equals(typeof(Object)) && "Finalize".Equals(method.Name))
                {
                    continue;
                }

                GenerateMethodImplementation(method, properties);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Generates implementation for each method.
        /// </summary>
        /// <param name="method"></param>
        /// <param name="properties"></param>
        protected void GenerateMethodImplementation(MethodInfo method, EasyProperty[] properties)
        {
            if (Context.ShouldSkip(method)) return;

            ParameterInfo[] parametersInfo = method.GetParameters();

            Type[] parameters = new Type[parametersInfo.Length];

            for(int i = 0; i < parametersInfo.Length; i++)
            {
                parameters[i] = parametersInfo[i].ParameterType;
            }

            MethodAttributes atts = ObtainMethodAttributes(method);

            PreProcessMethod(method);

            EasyMethod easyMethod = null;

            bool isSetMethod = method.IsSpecialName && method.Name.StartsWith("set_");
            bool isGetMethod = method.IsSpecialName && method.Name.StartsWith("get_");

            if (!isSetMethod && !isGetMethod)
            {
                easyMethod = _typeBuilder.CreateMethod(method.Name,
                                                       atts, new ReturnReferenceExpression(method.ReturnType), parameters);
            }
            else
            {
                if (isSetMethod || isGetMethod)
                {
                    foreach(EasyProperty property in properties)
                    {
                        if (property == null)
                        {
                            break;
                        }

                        if (!property.Name.Equals(method.Name.Substring(4)))
                        {
                            continue;
                        }

                        if (property.IndexParameters != null)
                        {
                            bool signatureMatches = true;
                            int numOfIndexes = parametersInfo.Length;
                            //A set method already has a value parameter, and everything after
                            //that is an indexer.
                            if (isSetMethod)
                                numOfIndexes--;
                            if (numOfIndexes != property.IndexParameters.Length)
                                continue;
                            for(int i = 0; i < property.IndexParameters.Length; i++)
                            {
                                if (property.IndexParameters[i].ParameterType != parametersInfo[i].ParameterType)
                                {
                                    signatureMatches = false;
                                    break;
                                }
                            }

                            if (!signatureMatches) continue;
                        }

                        if (isSetMethod)
                        {
                            easyMethod = property.CreateSetMethod(atts, parameters);
                            break;
                        }
                        else
                        {
                            easyMethod = property.CreateGetMethod(atts, parameters);
                            break;
                        }
                    }
                }
            }

            easyMethod.DefineParameters(parametersInfo);

            WriteInterceptorInvocationMethod(method, easyMethod);

            PostProcessMethod(method);
        }
Ejemplo n.º 11
0
 public void Add(EasyProperty property)
 {
     base.InnerList.Add(property);
 }