예제 #1
0
        private SyntaxList <MemberDeclarationSyntax> CreateCreateFunctions()
        {
            var returnType = SU.ClassNameWithGenerics(m_class);

            var retType = SF.IdentifierName(returnType);

            var withFn = SF.MethodDeclaration(retType, "create")
                         .WithModifiers(SyntaxTokenList.Create(SF.Token(SyntaxKind.PublicKeyword)).Add(SF.Token(SyntaxKind.StaticKeyword)));


            var paramList = CreateAssignCheckBlock();


            withFn = withFn.WithParameterList(SF.ParameterList(paramList));

            var block = SF.Block();

            block = block.WithStatements(CreateAssignments("def.", "0"));

            withFn = withFn.WithBody(block);

            var list = new SyntaxList <MemberDeclarationSyntax>();

            list = list.Add(withFn);

            return(list);
        }
예제 #2
0
        private SyntaxList <MemberDeclarationSyntax> CreateDefault()
        {
            var list = new SyntaxList <MemberDeclarationSyntax>();

            //var st = SF.ParseStatement( $"static public readonly {m_class.Identifier} def = new {m_class.Identifier};" );
            var newClass = SF.ParseExpression($"new {SU.ClassNameWithGenerics(m_class)}()");

            var declarator = SF.VariableDeclarator("def")
                             .WithInitializer(SF.EqualsValueClause(newClass));

            var decl = SF.VariableDeclaration(SF.IdentifierName(SU.ClassNameWithGenerics(m_class)), SF.SingletonSeparatedList(declarator));

            var keywords = SyntaxTokenList.Create(SF.Token(SyntaxKind.PublicKeyword))
                           .Add(SF.Token(SyntaxKind.StaticKeyword))
                           .Add(SF.Token(SyntaxKind.ReadOnlyKeyword));

            var field = SF.FieldDeclaration(decl)
                        .WithModifiers(keywords);

            list = list.Add(field);

            return(list);
        }
예제 #3
0
        SyntaxList <StatementSyntax> CreateAssignments(string varPrefix, string version)
        {
            var assignments = new SyntaxList <StatementSyntax>();

            var constructorParams = $"{version}";

            //var first = true;
            foreach (var f in m_fields)
            {
                //if( !first )
                {
                    constructorParams += ", ";
                }

                /*
                 * else
                 * {
                 *      first = false;
                 * }
                 */

                var statement = SF.ParseStatement($"var {f.Key.Identifier}New = {f.Key.Identifier}Opt.ValueOr({varPrefix}{f.Key.Identifier});");

                assignments = assignments.Add(statement);

                constructorParams += ModifyToken("{0}New", f.Key.Identifier);
            }

            var retExp = SF.ParseExpression($"new {SU.ClassNameWithGenerics(m_class)}( {constructorParams} )");

            var ret = SF.ReturnStatement(retExp);

            assignments = assignments.Add(ret);

            return(assignments);
        }