public static EditorMember WrapGetSet(Func <object> get, Action <object> set, object rawTarget, UnityObject unityTarget, Type dataType, string name, int id, Attribute[] attributes) { var result = new EditorMember(null, dataType, name, rawTarget, unityTarget, id, attributes); result.InitGetSet(get, set); return(result); }
public static EditorMember WrapIListElement(string elementName, Type elementType, int elementId, Attribute[] attributes) { var result = new EditorMember(null, elementType, elementName, null, null, elementId, attributes); result.InitGetSet(result.GetListElement, result.SetListElement); return(result); }
public static EditorMember WrapMember(MemberInfo memberInfo, object rawTarget, UnityObject unityTarget, int id) { var field = memberInfo as FieldInfo; if (field != null) { if (field.IsLiteral) { throw new InvalidOperationException("Field is const, this is not supported: " + field); } var result = new EditorMember(field, field.FieldType, field.Name, rawTarget, unityTarget, id, field.GetAttributes()); result.InitGetSet(result.GetWrappedMemberValue, result.SetWrappedMemberValue); result._memberGetter = field.DelegateForGet(); result._memberSetter = field.DelegateForSet(); return(result); } else { var property = memberInfo as PropertyInfo; if (property == null) { throw new InvalidOperationException("Member " + memberInfo + " is not a field nor property."); } if (!property.CanRead) { throw new InvalidOperationException("Property doesn't have a getter method: " + property); } if (property.IsIndexer()) { throw new InvalidOperationException("Property is an indexer, this is not supported: " + property); } var result = new EditorMember(property, property.PropertyType, property.Name, rawTarget, unityTarget, id, property.GetAttributes()); result.InitGetSet(result.GetWrappedMemberValue, result.SetWrappedMemberValue); result._memberGetter = property.DelegateForGet(); if (property.CanWrite) { result._memberSetter = property.DelegateForSet(); } else { result._memberSetter = delegate(ref object obj, object value) { } }; return(result); } }
public static bool IsNull(this EditorMember member) { object value; return((member == null || member.Equals(null)) || ((value = member.Value) == null || value.Equals(null))); }