public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
        {
            float height = base.GetPropertyHeight(property, label);

            try
            {
                var sdpTokenAttr = attribute as SdpTokenAttribute;
                SdpTokenAttribute.Validate(property.stringValue, sdpTokenAttr.AllowEmpty);
            }
            catch (ArgumentException)
            {
                // Add extra space for the error message
                height += c_errorMessageHeight;
            }
            return(height);
        }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            try
            {
                var sdpTokenAttr = attribute as SdpTokenAttribute;
                SdpTokenAttribute.Validate(property.stringValue, sdpTokenAttr.AllowEmpty);
            }
            catch (ArgumentException)
            {
                // Display error message below the property
                var totalHeight = position.height;
                position.yMin = position.yMax - c_errorMessageHeight;
                EditorGUI.HelpBox(position, "Invalid characters in property. SDP tokens cannot contain some characters like space or quote. See SdpTokenAttribute.Validate() for details.", MessageType.Error);

                // Adjust rect for the property itself
                position.yMin  = position.yMax - totalHeight;
                position.yMax -= c_errorMessageHeight;
            }

            EditorGUI.PropertyField(position, property, label);
        }