示例#1
0
    private void EmitDefaultValue(ILProcessor il)
    {
        if (!HasInitializer)
        {
            DefaultValueGenerator.EmitDefaultValue(il, PropertyType);
            return;
        }

        //Emit field initializer from constructor
        var initializer  = Initializers.First();
        var instructions = initializer.Instructions.Skip(1).Copy();

        if (initializer.HasVariables)
        {
            il.Body.InitLocals = true;
            foreach (var variable in instructions.CopyVariables())
            {
                il.Body.Variables.Add(variable);
            }
        }

        foreach (var instruction in instructions)
        {
            il.Append(instruction);
        }

        //Replace stfld with a nop (redirect all potential jumps aswell)
        il.ReplaceAndUpdateJumps(instructions.Last(), Instruction.Create(OpCodes.Nop));

        if (PropertyType.IsValueType)
        {
            il.Emit(OpCodes.Box, PropertyType);
        }
    }
示例#2
0
        private static object CreateModel(DataConversionParameters parameters)
        {
            var defaultValueGenerator = new DefaultValueGenerator(parameters.Resolver);

            return(new
            {
                Variable = parameters.Variable,
                Value = parameters.Value,

                HasDefaultValue = defaultValueGenerator.GetDefaultValue(parameters.Schema, parameters.TypeNameHint) != null,
                DefaultValue = defaultValueGenerator.GetDefaultValue(parameters.Schema, parameters.TypeNameHint),

                Type = parameters.Resolver.Resolve(parameters.Schema, parameters.IsPropertyNullable, parameters.TypeNameHint),

                IsNewableObject = IsNewableObject(parameters.Schema),
                IsDate = parameters.Settings.DateTimeType != TypeScriptDateTimeType.String &&
                         parameters.Schema.Format == JsonFormatStrings.DateTime,

                IsDictionary = parameters.Schema.IsDictionary,
                DictionaryValueType = parameters.Resolver.TryResolve(parameters.Schema.AdditionalPropertiesSchema, parameters.TypeNameHint) ?? "any",
                IsDictionaryValueNewableObject = parameters.Schema.AdditionalPropertiesSchema != null && IsNewableObject(parameters.Schema.AdditionalPropertiesSchema),
                IsDictionaryValueDate = parameters.Settings.DateTimeType != TypeScriptDateTimeType.String &&
                                        parameters.Schema.AdditionalPropertiesSchema?.Format == JsonFormatStrings.DateTime,

                IsArray = parameters.Schema.Type.HasFlag(JsonObjectType.Array),
                ArrayItemType = parameters.Resolver.TryResolve(parameters.Schema.Item, parameters.TypeNameHint) ?? "any",
                IsArrayItemNewableObject = parameters.Schema.Item != null && IsNewableObject(parameters.Schema.Item),
                IsArrayItemDate = parameters.Settings.DateTimeType != TypeScriptDateTimeType.String &&
                                  parameters.Schema.Item?.Format == JsonFormatStrings.DateTime,

                StringToDateCode = parameters.Settings.DateTimeType == TypeScriptDateTimeType.Date ? "new Date" : "moment",
                DateToStringCode = "toISOString()"
            });
        }
示例#3
0
        public void Next()
        {
            var TestObject = new DefaultValueGenerator();
            var Result     = TestObject.Next(typeof(TestClass).GetMethod("TestMethod").GetParameters()[0]);

            Result.Should().BeNull();
        }
示例#4
0
 public static IServiceCollection RegisterDefaultValueGenerator <TEntity>(this IServiceCollection services, Action <IDefaultValueGenerator <TEntity> > action)
 {
     return(services.AddSingleton((serviceProvider) => {
         var defaultValueGenerator = DefaultValueGenerator <TEntity>
                                     .Create(serviceProvider);
         action(defaultValueGenerator);
         return defaultValueGenerator;
     }));
 }
示例#5
0
        /// <summary>Initializes a new instance of the <see cref="PropertyModelBase"/> class.</summary>
        /// <param name="classTemplateModel">The class template model.</param>
        /// <param name="property">The property.</param>
        /// <param name="defaultValueGenerator">The default value generator.</param>
        /// <param name="settings">The settings.</param>
        protected PropertyModelBase(ClassTemplateModelBase classTemplateModel, JsonProperty property, DefaultValueGenerator defaultValueGenerator, CodeGeneratorSettingsBase settings)
        {
            _classTemplateModel    = classTemplateModel;
            _property              = property;
            _defaultValueGenerator = defaultValueGenerator;
            _settings              = settings;

            PropertyName = _settings.PropertyNameGenerator.Generate(_property);
        }
示例#6
0
 public PropertyModelBase(JsonProperty property, DefaultValueGenerator defaultValueGenerator, CodeGeneratorSettingsBase settings)
 {
     _property = property;
     _defaultValueGenerator = defaultValueGenerator;
     _settings = settings;
 }
示例#7
0
 internal EntityFacet(string facetName, TData defaultValue, DefaultValueGenerator defaultValueGenerator)
     : base(facetName, defaultValue)
 {
     _defaultValueGenerator = defaultValueGenerator;
 }
示例#8
0
 public PropertyFacet(string facetName, TData defaultValue, DefaultValueGenerator defaultValueGenrator)
     : base(facetName, defaultValue)
 {
     _defaultValueGenerator = defaultValueGenrator;
 }
示例#9
0
        public void Creation()
        {
            var TestObject = new DefaultValueGenerator();

            TestObject.Should().NotBeNull();
        }
示例#10
0
        public void CanGenerate()
        {
            var TestObject = new DefaultValueGenerator();

            TestObject.CanGenerate(typeof(TestClass).GetMethod("TestMethod").GetParameters()[0]).Should().BeTrue();
        }