static UnityPropertyDrawer()
 {
     if (InternalFieldInfoFieldInfo == null)
     {
         Debug.LogError("Could not find the internal Unity field 'PropertyDrawer.m_FieldInfo'; UnityPropertyDrawer alias '" + typeof(UnityPropertyDrawer <TDrawer, TDrawnType>).GetNiceName() + "' has been disabled.");
     }
     else
     {
         SetFieldInfo = EmitUtilities.CreateInstanceFieldSetter <TDrawer, FieldInfo>(InternalFieldInfoFieldInfo);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Initializes the <see cref="UnityDecoratorAttributeDrawer{TDrawer, TAttribute}"/> class.
 /// </summary>
 static UnityDecoratorAttributeDrawer()
 {
     if (InternalAttributeFieldInfo == null)
     {
         Debug.LogError("Could not find the internal Unity field 'DecoratorDrawer.m_Attribute'; UnityDecoratorDrawer alias '" + typeof(UnityDecoratorAttributeDrawer <TDrawer, TAttribute, TAttributeConstraint>).GetNiceName() + "' has been disabled.");
     }
     else
     {
         SetAttribute = EmitUtilities.CreateInstanceFieldSetter <TDrawer, Attribute>(InternalAttributeFieldInfo);
     }
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="InspectorValuePropertyInfo{TOwner, TValue}"/> class.
        /// </summary>
        /// <param name="fieldInfo">The field to represent.</param>
        /// <param name="serializationBackend">The serialization backend.</param>
        /// <param name="allowEditable">Whether the property can be editable.</param>
        public InspectorValuePropertyInfo(FieldInfo fieldInfo, SerializationBackend serializationBackend, bool allowEditable)
            : base(fieldInfo, fieldInfo.FieldType.IsValueType ? PropertyType.ValueType : PropertyType.ReferenceType, serializationBackend, allowEditable)
        {
            MemberAliasFieldInfo aliasFieldInfo = fieldInfo as MemberAliasFieldInfo;

            if (aliasFieldInfo != null)
            {
                fieldInfo = aliasFieldInfo.AliasedField;
            }

            this.getter = EmitUtilities.CreateInstanceFieldGetter <TOwner, TValue>(fieldInfo);
            this.setter = EmitUtilities.CreateInstanceFieldSetter <TOwner, TValue>(fieldInfo);
        }
Beispiel #4
0
        private static ValueSetter <TOwner, TValue> GetCachedSetter(MemberInfo member)
        {
            Delegate del;

            if (GetterSetterCaches <TOwner> .Setters.TryGetInnerValue(member, typeof(TValue), out del))
            {
                return((ValueSetter <TOwner, TValue>)del);
            }
            else
            {
                ValueSetter <TOwner, TValue> result = null;

                var fieldInfo    = member as FieldInfo;
                var propertyInfo = member as PropertyInfo;

                if (fieldInfo != null)
                {
                    if (!fieldInfo.IsLiteral)
                    {
                        result = EmitUtilities.CreateInstanceFieldSetter <TOwner, TValue>(fieldInfo);
                    }
                }
                else if (propertyInfo != null)
                {
                    if (propertyInfo.CanWrite)
                    {
                        result = EmitUtilities.CreateInstancePropertySetter <TOwner, TValue>(propertyInfo);
                    }
                }
                else
                {
                    throw new ArgumentException("Cannot create a GetterSetter for a member of type + " + member.GetType().Name + "!");
                }

                GetterSetterCaches <TOwner> .Setters.AddInner(member, typeof(TValue), result);

                return(result);
            }
        }
Beispiel #5
0
 public ValueMemberAccessor(FieldInfo fieldInfo)
 {
     this.memberInfo = fieldInfo;
     getter          = EmitUtilities.CreateInstanceFieldGetter <K, T>(fieldInfo);
     setter          = EmitUtilities.CreateInstanceFieldSetter <K, T>(fieldInfo);
 }