public override AstNode?VisitMessageDefinition(MessageDefinitionContext context) { var message = new MessageDefinition { IsCustom = context.customModifier != null }; ProcessMessage(message, context); return(message); }
private void ProcessMessage(MessageDefinition message, MessageDefinitionContext context) { try { _hasDefinitions = true; _currentMessage = message; _currentMessage.ParseContext = context; _currentMessage.Options = _currentMemberOptions; var nameContext = context.GetRuleContext <MessageNameContext>(0); message.Name = GetId(nameContext.name); ProcessTypeModifiers(message, context.typeModifier().Select(i => i.type)); foreach (var typeParamToken in nameContext._typeParams) { var paramId = GetId(typeParamToken); if (message.GenericParameters.Contains(paramId)) { _contracts.AddError(typeParamToken, "Duplicate generic parameter: '{0}'", paramId); } message.GenericParameters.Add(paramId); } ProcessAttributes(message.Attributes, context.GetRuleContext <AttributesContext>(0)); Visit(context.GetRuleContext <ParameterListContext>(0)); Visit(context.GetRuleContext <BaseTypeListContext>(0)); Visit(context.GetRuleContext <TypeParamConstraintListContext>(0)); _contracts.Messages.Add(_currentMessage); } finally { _currentMessage = null; } }