public static Action <ITextControl> Execute([CanBeNull] IPropertyDeclaration propertyDeclaration, ISolution solution, CSharpElementFactory elementFactory)
        {
            if (propertyDeclaration == null)
            {
                return(null);
            }

            var fieldDeclaration = AutomaticToBackingFieldAction.Execute(propertyDeclaration);

            AttributeUtil.AddAttributeToSingleDeclaration(fieldDeclaration, KnownTypes.SerializeField, propertyDeclaration.GetPsiModule(), elementFactory);
            return(AutomaticToBackingFieldAction.PostExecute(propertyDeclaration, fieldDeclaration, solution));
        }
        public static bool IsAvailable([CanBeNull] IPropertyDeclaration propertyDeclaration)
        {
            if (propertyDeclaration == null)
            {
                return(false);
            }

            if (!propertyDeclaration.IsFromUnityProject())
            {
                return(false);
            }

            if (AutomaticToBackingFieldAction.IsAvailable(propertyDeclaration))
            {
                var unityApi       = propertyDeclaration.GetSolution().GetComponent <UnityApi>();
                var containingType = propertyDeclaration.DeclaredElement?.GetContainingType();
                return(containingType != null && unityApi.IsUnityType(containingType));
            }

            return(false);
        }