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); }
/// <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) { }
/// <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)); }