static MethodBuilder CreateNewInstanceGetter(TypeBuilder typeBuilder, PropertyBuilder property,
                                                     ConstructorInfo constructor, MethodAttributes accessRights)
        {
            var getterMethod = CodeGenerationUtils.GetterMethodFor(typeBuilder, property, accessRights);

            CodeGenerationUtils.ReturnNewInstanceILInstructions(constructor, getterMethod);
            return(getterMethod);
        }
Example #2
0
        private static void AddLabelProperty(TypeBuilder typeBuilder, string propertyName,
                                             string valueToReturn)
        {
            var property      = CodeGenerationUtils.DefineProperty(typeBuilder, propertyName, typeof(string));
            var methodBuilder = CodeGenerationUtils.GetterMethodFor(typeBuilder, property, CodeGenerationUtils.PublicGetter());

            var ilCode = methodBuilder.GetILGenerator();

            ilCode.Emit(OpCodes.Ldstr, valueToReturn);
            ilCode.Emit(OpCodes.Ret);
        }
 private void CreateEntries(ByNameGrouping type)
 {
     foreach (var typeToBuildFor in type.Members)
     {
         var definePropertyOn = FindLocationForProperty(type, typeToBuildFor.Key);
         var querableType     = propertyTypeBuilder(typeToBuildFor.Value, typeToBuildFor.Key);
         var nameOfProperty   = NameOfProperty(typeToBuildFor.Key);
         var property         = CodeGenerationUtils.DefineProperty(definePropertyOn, nameOfProperty, querableType);
         var getterMethod     = CodeGenerationUtils.GetterMethodFor(definePropertyOn, property, QueryPropertyAccessRights(definePropertyOn));
         buildPropertyOnType(getterMethod, typeToBuildFor.Value,
                             typeToBuildFor.Key);
     }
 }
Example #4
0
        private void CreateMetaDataStructure(IEnumerable <ByNameGrouping> typesGroupesByName)
        {
            var metaInfoType = CreateMetaInfoProperty(typesGroupesByName);
            var constructorOfMetaInfoType = metaInfoType.GetConstructors().Single();

            var property = CodeGenerationUtils.DefineProperty(rootType, MetaDataProperty, metaInfoType);

            var getterMethod = CodeGenerationUtils.GetterMethodFor(rootType, property, CodeGenerationUtils.StaticPublicGetter());
            var lambda       = Expression.Lambda(typeof(Func <>).MakeGenericType(metaInfoType),
                                                 Expression.New(constructorOfMetaInfoType), new ParameterExpression[0]);

            lambda.CompileToMethod(getterMethod);
        }