Ejemplo n.º 1
0
        public override SyntaxNode VisitFieldDefinition([NotNull] GrammarParser.FieldDefinitionContext context)
        {
            var typeDec = VisitTypeDeclaration(context.typeDeclaration()) as TypeSyntax;

            if (string.Equals("optional", context.fieldOption().GetText()) &&
                typeDec.Kind() == SyntaxKind.PredefinedType &&
                !string.Equals("string", typeDec.GetFirstToken().Text))
            {
                typeDec = SyntaxFactory.NullableType(typeDec);
            }

            var propertyDec = SyntaxFactory.PropertyDeclaration(typeDec, context.name().GetText())
                              .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
                              .AddAttributeLists(SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(
                                                                                 SyntaxFactory.Attribute(SyntaxFactory.IdentifierName("TarsStructProperty"), SyntaxFactory.AttributeArgumentList(SyntaxFactory.SingletonSeparatedList(
                                                                                                                                                                                                     SyntaxFactory.AttributeArgument(SyntaxFactory.ParseExpression(context.fieldOrder().GetText()))
                                                                                                                                                                                                     ))))))
                              .AddAccessorListAccessors(
                SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
                SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
            var value = context.fieldValue();

            if (value != null)
            {
                propertyDec = propertyDec.WithInitializer(SyntaxFactory.EqualsValueClause(SyntaxFactory.ParseExpression(value.GetText())))
                              .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken));
            }
            return(propertyDec);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="GrammarParser.fieldDefinition"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitFieldDefinition([NotNull] GrammarParser.FieldDefinitionContext context)
 {
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="GrammarParser.fieldDefinition"/>.
 /// <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 VisitFieldDefinition([NotNull] GrammarParser.FieldDefinitionContext context)
 {
     return(VisitChildren(context));
 }