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); } }
/// <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); }
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); } }
public ValueMemberAccessor(FieldInfo fieldInfo) { this.memberInfo = fieldInfo; getter = EmitUtilities.CreateInstanceFieldGetter <K, T>(fieldInfo); setter = EmitUtilities.CreateInstanceFieldSetter <K, T>(fieldInfo); }