private static ValueGetter <TOwner, TValue> GetCachedGetter(MemberInfo member) { Delegate del; if (GetterSetterCaches <TOwner> .Getters.TryGetInnerValue(member, typeof(TValue), out del)) { return((ValueGetter <TOwner, TValue>)del); } else { ValueGetter <TOwner, TValue> result; var fieldInfo = member as FieldInfo; var propertyInfo = member as PropertyInfo; if (fieldInfo != null) { result = EmitUtilities.CreateInstanceFieldGetter <TOwner, TValue>(fieldInfo); } else if (propertyInfo != null) { result = EmitUtilities.CreateInstancePropertyGetter <TOwner, TValue>(propertyInfo); } else { throw new ArgumentException("Cannot create a GetterSetter for a member of type + " + member.GetType().Name + "!"); } GetterSetterCaches <TOwner> .Getters.AddInner(member, typeof(TValue), result); return(result); } }
static UnityExtensions() { var field = typeof(UnityEngine.Object).GetField("m_CachedPtr", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (field != null) { UnityObjectCachedPtrFieldGetter = EmitUtilities.CreateInstanceFieldGetter <UnityEngine.Object, IntPtr>(field); } }
static InspectorUtilities() { var mPropertyField = typeof(SerializedObject).GetField("m_Property", Flags.InstanceAnyVisibility); if (mPropertyField != null) { mPropertyFieldGetter = EmitUtilities.CreateInstanceFieldGetter <SerializedObject, IntPtr>(mPropertyField); } else { Debug.LogWarning("The internal Unity field SerializedObject.m_Property has been renamed in this version of Unity!"); } }
/// <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); }
static InspectorUtilities() { string nativeObjectPtrName = UnityVersion.IsVersionOrGreater(2018, 3) ? "m_NativeObjectPtr" : "m_Property"; var nativeObjectPtrField = typeof(SerializedObject).GetField(nativeObjectPtrName, Flags.InstanceAnyVisibility); if (nativeObjectPtrField != null) { SerializedObject_nativeObjectPtrGetter = EmitUtilities.CreateInstanceFieldGetter <SerializedObject, IntPtr>(nativeObjectPtrField); } else { Debug.LogWarning("The internal Unity field SerializedObject.m_Property (< 2018.3)/SerializedObject.m_NativeObjectPtr (>= 2018.3) has been renamed in this version of Unity!"); } }
public ValueMemberAccessor(FieldInfo fieldInfo) { this.memberInfo = fieldInfo; getter = EmitUtilities.CreateInstanceFieldGetter <K, T>(fieldInfo); setter = EmitUtilities.CreateInstanceFieldSetter <K, T>(fieldInfo); }