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