internal void Update(RoslynExpressionEditor etb)
        {
            this.EditingContext = etb.OwnerActivity.GetEditingContext();

            //setup ParserContext
            this.ParserContext = new ParserContext(etb.OwnerActivity)
            {
                //callee is a ExpressionTextBox
                Instance = etb,
                //pass property descriptor belonging to epression's model property (if one exists)
                //TODO: etb should have expressionModelProperty and the propertyDescriptor should be used here instead of passing null
                PropertyDescriptor = null,
            };

            if (etb.ExpressionType != null)
            {
                this.ExpressionType = etb.ExpressionType;
            }

            this.ValidatedExpressionText = this.ExpressionText;
            if (etb.ExpressionEditorInstance != null)
            {
                this.ExpressionText = etb.ExpressionEditorInstance.Text;
            }
            else if (etb.EditingTextBox != null)
            {
                this.ExpressionText = etb.EditingTextBox.Text;
            }
            else
            {
                this.ExpressionText = etb.Text;
            }
            this.UseLocationExpression = etb.UseLocationExpression;
        }
        static void ValidateExpression(RoslynExpressionEditor etb)
        {
            string errorMessage;

            if (etb.DoValidation(new ExpressionValidationContext(etb), out errorMessage))
            {
                etb.UpdateValidationError(errorMessage);
            }
        }
 public ExpressionValidationContext(RoslynExpressionEditor etb)
 {
     this.etb = etb;
 }