protected override void Invoke(object parameter)
 {
     if (SetterElement != null)
     {
         SetterElement.SetValue(Property, Value);
     }
     else
     {
         AssociatedObject.SetValue(Property, Value);
     }
 }
        /// <summary>Apply settings to a linked Grammar.</summary>
        /// <returns></returns>
        private static bool ApplySettingsFromGrammar(Parser parser, CodeDocument doc, ParserStatus status)
        {
            bool ok = true;

            foreach (CodeElement SetterElement in doc.Codes(MetaParser.Setter_____))
            {
                CodeElement elementId = SetterElement.Codes().First();

                Rule rule = parser.Rules.FirstOrDefault(r => r.Name == elementId.Value);
                if (rule == null)
                {
                    status.AddBuildError(() => MessageRes.itc26, elementId, elementId.Value);
                    ok = false;
                    continue;
                }

                foreach (CodeElement assignElement in SetterElement.Codes(MetaParser.Assignment_))
                {
                    List <CodeElement> assignNodes = assignElement.Codes().ToList();
                    CodeElement        propName    = assignNodes[0];
                    string             propValue   = assignNodes.Count > 1 ? assignNodes[1].Value : string.Empty;
                    switch (propName.Value)
                    {
                    case MetaParser.Trust______:
                        rule.Trust = propValue != "false";
                        break;

                    case MetaParser.Collapse___:
                        rule.Collapse = propValue != "false";
                        break;

                    case MetaParser.Comment____:
                        rule.Comment = propValue != "false";
                        break;

                    default:
                        // set the property on rule or sub elements.
                        ok = rule.SetProperty(propName, propValue, status);

                        if (!ok)
                        {
                            status.AddBuildError(() => MessageRes.itc27, propName, elementId.Value, propName.Value);
                        }
                        break;
                    }
                }
            }
            return(ok);
        }