private Tuple <string, string, bool> ReadProperty(GrammarParser.ArgumentContext argument) { var type = VisitTerminal(argument.type().ID()); var typeArguments = argument.type().typeArguments(); if (typeArguments != null) { type += typeArguments.GetText(); } string name; var modifier = argument.type().typeModifier(); var isOptional = modifier?.OPTIONAL() != null; if (argument.name() == null) { name = VisitTerminal(argument.type().ID()); var definition = File.FindPropertyDefinition(name); if (string.IsNullOrEmpty(definition?.Item1)) { throw new Exception($"Tried to use an undefined property '{name}'"); } type = definition.Item2; name = definition.Item1; isOptional = definition.Item3 || isOptional; } else { name = VisitTerminal(argument.name().ID()); } return(Tuple.Create(name, type, isOptional)); }
/// <summary> /// Exit a parse tree produced by <see cref="GrammarParser.argument"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitArgument([NotNull] GrammarParser.ArgumentContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="GrammarParser.argument"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitArgument([NotNull] GrammarParser.ArgumentContext context) { return(VisitChildren(context)); }