示例#1
0
        /// <summary>
        /// Tries to construct a new plan that sets a field for a
        /// receiver of the type given. May fail if there are no
        /// applicable receivers.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="plan"></param>
        /// <returns></returns>
        private void NewFieldSettingPlan(FieldInfo field, PlanManager planManager, bool forbidNull)
        {
            this.stats.Selected(FieldSettingTransformer.Get(field).ToString());

            Type[] parameterTypes = new Type[2];
            parameterTypes[0] = field.DeclaringType;
            parameterTypes[1] = field.FieldType;

            RandomPlansResult r;

            if (!RandomPlans(out r, parameterTypes,
                             delegate(Plan p, int i)
            {
                if (i == 0 && p.transformer is PrimitiveValueTransformer)
                {
                    return(false);
                }
                return(true);
            }, planManager.builderPlans, forbidNull, null))
            {
                stats.CreatedNew(CreationResult.NoInputs);
                return;
            }

            Plan plan = new Plan(FieldSettingTransformer.Get(field),
                                 r.fplans, r.fparameterChoosers);

            planManager.AddMaybeExecutingIfNeeded(plan, this.stats);
        }
 public static FieldSettingTransformer Get(FieldInfo field)
 {
     FieldSettingTransformer t;
     cachedTransformers.TryGetValue(field, out t);
     if (t == null)
         cachedTransformers[field] = t = new FieldSettingTransformer(field);
     return t;
 }
示例#3
0
        public override bool Equals(object obj)
        {
            FieldSettingTransformer f = obj as FieldSettingTransformer;

            if (f == null)
            {
                return(false);
            }
            return(this.ffield.Equals(f.ffield));
        }
示例#4
0
        public static FieldSettingTransformer Get(FieldInfo field)
        {
            FieldSettingTransformer t;

            cachedTransformers.TryGetValue(field, out t);
            if (t == null)
            {
                cachedTransformers[field] = t = new FieldSettingTransformer(field);
            }
            return(t);
        }