public void GetPropertyData(bool isSubGraph,
                             ChangeExposedFieldCallback exposedFieldCallback,
                             ChangeReferenceNameCallback referenceNameCallback,
                             Action precisionChangedCallback,
                             Action keywordChangedCallback,
                             ChangeValueCallback changeValueCallback,
                             PreChangeValueCallback preChangeValueCallback,
                             PostChangeValueCallback postChangeValueCallback)
 {
     this.isSubGraph = isSubGraph;
     this._exposedFieldChangedCallback  = exposedFieldCallback;
     this._referenceNameChangedCallback = referenceNameCallback;
     this._precisionChangedCallback     = precisionChangedCallback;
     this._changeValueCallback          = changeValueCallback;
     this._keywordChangedCallback       = keywordChangedCallback;
     this._preChangeValueCallback       = preChangeValueCallback;
     this._postChangeValueCallback      = postChangeValueCallback;
 }
        void BuildReferenceNameField(PropertySheet propertySheet)
        {
            if (!isSubGraph || shaderInput is ShaderKeyword)
            {
                var textPropertyDrawer = new TextPropertyDrawer();
                propertySheet.Add(textPropertyDrawer.CreateGUI(
                                      null,
                                      (string)shaderInput.referenceName,
                                      "Reference",
                                      out var propertyVisualElement));

                m_ReferenceNameField = (TextField)propertyVisualElement;
                m_ReferenceNameField.RegisterValueChangedCallback(
                    evt =>
                {
                    this._preChangeValueCallback("Change Reference Name");
                    this._referenceNameChangedCallback(evt.newValue);

                    if (string.IsNullOrEmpty(shaderInput.overrideReferenceName))
                    {
                        m_ReferenceNameField.RemoveFromClassList("modified");
                    }
                    else
                    {
                        m_ReferenceNameField.AddToClassList("modified");
                    }

                    this._postChangeValueCallback(true, ModificationScope.Graph);
                });

                _resetReferenceNameCallback = newValue =>
                {
                    m_ReferenceNameField.value = newValue;
                    m_ReferenceNameField.RemoveFromClassList("modified");
                };

                if (!string.IsNullOrEmpty(shaderInput.overrideReferenceName))
                {
                    propertyVisualElement.AddToClassList("modified");
                }
                propertyVisualElement.SetEnabled(shaderInput.isRenamable);
                propertyVisualElement.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyNameReferenceField"));
            }
        }