public override CSharpSyntaxNode VisitDictionary([NotNull] DonatelloParser.DictionaryContext context) { var children = context.form(); var keyValueList = new List <ExpressionSyntax>(); for (int i = 0; i < children.Length; i += 2) //select every two key/value pair { keyValueList.Add( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, IdentifierName(nameof(Constructors)), IdentifierName(nameof(Constructors.CreateKeyValuePair)))) .WithArgumentList( ArgumentList( SeparatedList(new[] { Argument(this.Visit(children[i]) as ExpressionSyntax), //key Argument(this.Visit(children[i + 1]) as ExpressionSyntax) })))); //value } return (InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, IdentifierName(nameof(ImmutableDictionary)), IdentifierName(nameof(ImmutableDictionary.CreateRange)))) .WithArgumentList( ArgumentList( SingletonSeparatedList( Argument( ImplicitArrayCreationExpression( InitializerExpression( SyntaxKind.ArrayInitializerExpression, SeparatedList(keyValueList)))))))); }
/// <summary> /// Enter a parse tree produced by <see cref="DonatelloParser.dictionary"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void EnterDictionary([NotNull] DonatelloParser.DictionaryContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="DonatelloParser.dictionary"/>. /// <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 VisitDictionary([NotNull] DonatelloParser.DictionaryContext context) { return(VisitChildren(context)); }