예제 #1
0
        private static StatementSyntax CreateStaticDefinitionId(DatasetDefinition datasetDefinition)
        {
            SyntaxToken token = SyntaxFactory.Literal(datasetDefinition.Id);
            VariableDeclaratorSyntax variable = SyntaxFactory.VariableDeclarator(
                SyntaxFactory.SingletonSeparatedList(SyntaxFactory.ModifiedIdentifier("DatasetDefinitionId")));

            variable = variable.WithAsClause(
                SyntaxFactory.SimpleAsClause(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.StringKeyword))));

            variable = variable.WithInitializer(
                SyntaxFactory.EqualsValue(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression,
                                                                          token)));

            return(SyntaxFactory.FieldDeclaration(
                       SyntaxFactory.List <AttributeListSyntax>(),
                       SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword),
                                               SyntaxFactory.Token(SyntaxKind.SharedKeyword)),
                       SyntaxFactory.SingletonSeparatedList(variable)));
        }
        /// <summary>
        /// Generates .NET code a constant field decl.
        /// </summary>
        /// <param name="context">Const decl AST.</param>
        /// <returns></returns>
        public override CodeGeneratorBase VisitConstStmt(VisualBasic6Parser.ConstStmtContext context)
        {
            List <SyntaxToken> modifiers = new List <SyntaxToken>();

            VisualBasic6Parser.PublicPrivateGlobalVisibilityContext vis = context.publicPrivateGlobalVisibility();

            if (vis != null)
            {
                if (vis.PUBLIC() != null || vis.GLOBAL() != null)
                {
                    modifiers.Add(SyntaxFactory.Token(SyntaxKind.PublicKeyword));
                }
                else if (vis.PRIVATE() != null)
                {
                    modifiers.Add(SyntaxFactory.Token(SyntaxKind.PrivateKeyword));
                }
            }

            modifiers.Add(SyntaxFactory.Token(SyntaxKind.ConstKeyword));

            foreach (VisualBasic6Parser.ConstSubStmtContext subStmt in context.constSubStmt())
            {
                SimpleAsClauseSyntax asClause = null;

                if (subStmt.asTypeClause() != null)
                {
                    asClause = SyntaxFactory.SimpleAsClause(SyntaxFactory.ParseTypeName(subStmt.asTypeClause().type().GetText()));
                }

                ModifiedIdentifierSyntax identifier  = SyntaxFactory.ModifiedIdentifier(subStmt.ambiguousIdentifier().GetText());
                ExpressionSyntax         initialiser = null;

                string initialiserExpr = subStmt.valueStmt().GetText();

                //ParseExpression can't handle date/time literals - Roslyn bug? - //so handle them manually here
                if (initialiserExpr.StartsWith("#"))
                {
                    string   trimmedInitialiser = initialiserExpr.Trim(new char[] { '#' });
                    DateTime parsedVal          = new DateTime();

                    if (trimmedInitialiser.Contains("AM") || trimmedInitialiser.Contains("PM"))
                    {
                        parsedVal = DateTime.ParseExact(trimmedInitialiser, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        parsedVal = DateTime.ParseExact(trimmedInitialiser, "M/d/yyyy", CultureInfo.InvariantCulture);
                    }

                    initialiser = SyntaxFactory.DateLiteralExpression(SyntaxFactory.DateLiteralToken(initialiserExpr, parsedVal));
                }
                else
                {
                    initialiser = SyntaxFactory.ParseExpression(initialiserExpr);
                }

                VariableDeclaratorSyntax varDecl = SyntaxFactory.VariableDeclarator(identifier).WithInitializer(SyntaxFactory.EqualsValue(initialiser));

                if (asClause != null)
                {
                    varDecl = varDecl.WithAsClause(asClause);
                }

                mMainDeclMembers.Add(SyntaxFactory.FieldDeclaration(varDecl).WithModifiers(SyntaxFactory.TokenList(modifiers)));
            }

            return(base.VisitConstStmt(context));
        }