internal static PropertyHandler GetHandler(SerializedProperty property) { if (property == null || property.serializedObject.inspectorMode != InspectorMode.Normal) { return(ScriptAttributeUtility.s_SharedNullHandler); } PropertyHandler handler1 = ScriptAttributeUtility.propertyHandlerCache.GetHandler(property); if (handler1 != null) { return(handler1); } System.Type type = (System.Type)null; List <PropertyAttribute> propertyAttributeList = (List <PropertyAttribute>)null; System.Reflection.FieldInfo field = (System.Reflection.FieldInfo)null; UnityEngine.Object targetObject = property.serializedObject.targetObject; if (targetObject is MonoBehaviour || targetObject is ScriptableObject) { field = ScriptAttributeUtility.GetFieldInfoFromProperty(property, out type); propertyAttributeList = ScriptAttributeUtility.GetFieldAttributes(field); } else { if (ScriptAttributeUtility.s_BuiltinAttributes == null) { ScriptAttributeUtility.PopulateBuiltinAttributes(); } if (propertyAttributeList == null) { propertyAttributeList = ScriptAttributeUtility.GetBuiltinAttributes(property); } } PropertyHandler handler2 = ScriptAttributeUtility.s_NextHandler; if (propertyAttributeList != null) { for (int index = propertyAttributeList.Count - 1; index >= 0; --index) { handler2.HandleAttribute(propertyAttributeList[index], field, type); } } if (!handler2.hasPropertyDrawer && type != null) { handler2.HandleDrawnType(type, type, field, (PropertyAttribute)null); } if (handler2.empty) { ScriptAttributeUtility.propertyHandlerCache.SetHandler(property, ScriptAttributeUtility.s_SharedNullHandler); handler2 = ScriptAttributeUtility.s_SharedNullHandler; } else { ScriptAttributeUtility.propertyHandlerCache.SetHandler(property, handler2); ScriptAttributeUtility.s_NextHandler = new PropertyHandler(); } return(handler2); }
internal static PropertyHandler GetHandler(SerializedProperty property) { if (property == null) { return(s_SharedNullHandler); } // Don't use custom drawers in debug mode if (property.serializedObject.inspectorMode != InspectorMode.Normal) { return(s_SharedNullHandler); } // If the drawer is cached, use the cached drawer PropertyHandler handler = propertyHandlerCache.GetHandler(property); if (handler != null) { return(handler); } Type propertyType = null; List <PropertyAttribute> attributes = null; FieldInfo field = null; // Determine if SerializedObject target is a script or a builtin type UnityEngine.Object target = property.serializedObject.targetObject; if (NativeClassExtensionUtilities.ExtendsANativeType(target)) { // For scripts, use reflection to get FieldInfo for the member the property represents field = GetFieldInfoFromProperty(property, out propertyType); // Use reflection to see if this member has an attribute attributes = GetFieldAttributes(field); } else { // For builtin types, look if we hardcoded an attribute for this property // First initialize the hardcoded properties if not already done if (s_BuiltinAttributes == null) { PopulateBuiltinAttributes(); } if (attributes == null) { attributes = GetBuiltinAttributes(property); } } handler = s_NextHandler; if (attributes != null) { for (int i = attributes.Count - 1; i >= 0; i--) { handler.HandleAttribute(attributes[i], field, propertyType); } } // Field has no CustomPropertyDrawer attribute with matching drawer so look for default drawer for field type if (!handler.hasPropertyDrawer && propertyType != null) { handler.HandleDrawnType(propertyType, propertyType, field, null); } if (handler.empty) { propertyHandlerCache.SetHandler(property, s_SharedNullHandler); handler = s_SharedNullHandler; } else { propertyHandlerCache.SetHandler(property, handler); s_NextHandler = new PropertyHandler(); } return(handler); }
internal static PropertyHandler GetHandler(SerializedProperty property) { PropertyHandler result; if (property == null) { result = ScriptAttributeUtility.s_SharedNullHandler; } else if (property.serializedObject.inspectorMode != InspectorMode.Normal) { result = ScriptAttributeUtility.s_SharedNullHandler; } else { PropertyHandler handler = ScriptAttributeUtility.propertyHandlerCache.GetHandler(property); if (handler != null) { result = handler; } else { Type type = null; List <PropertyAttribute> list = null; FieldInfo field = null; UnityEngine.Object targetObject = property.serializedObject.targetObject; if (targetObject is MonoBehaviour || targetObject is ScriptableObject) { field = ScriptAttributeUtility.GetFieldInfoFromProperty(property, out type); list = ScriptAttributeUtility.GetFieldAttributes(field); } else { if (ScriptAttributeUtility.s_BuiltinAttributes == null) { ScriptAttributeUtility.PopulateBuiltinAttributes(); } if (list == null) { list = ScriptAttributeUtility.GetBuiltinAttributes(property); } } handler = ScriptAttributeUtility.s_NextHandler; if (list != null) { for (int i = list.Count - 1; i >= 0; i--) { handler.HandleAttribute(list[i], field, type); } } if (!handler.hasPropertyDrawer && type != null) { handler.HandleDrawnType(type, type, field, null); } if (handler.empty) { ScriptAttributeUtility.propertyHandlerCache.SetHandler(property, ScriptAttributeUtility.s_SharedNullHandler); handler = ScriptAttributeUtility.s_SharedNullHandler; } else { ScriptAttributeUtility.propertyHandlerCache.SetHandler(property, handler); ScriptAttributeUtility.s_NextHandler = new PropertyHandler(); } result = handler; } } return(result); }