Tuple <string, string> GenerateCreateMethodsAndConstructors()
        {
            var paramsAndArgs = type.Constructors()
                                .Select(method => {
                var parameters = method.IsImplicitlyDeclared
                        ? SyntaxFactory.ParameterList().Parameters
                        : ((ConstructorDeclarationSyntax)method.Node()).ParameterList.Parameters;
                var arguments = parameters.Select(x => x.Identifier.ToString()).ConcatStrings(", ");
                return(new { parameters, arguments });
            })
                                .ToImmutableArray();
            var createMethods = paramsAndArgs
                                .Select(info => {
                return
                ($@"public static {type.Name} Create({info.parameters}) {{
    return new {type.Name}Implementation({info.arguments});
}}");
            })
                                .ConcatStringsWithNewLines();
            var constructors = paramsAndArgs
                               .Select(info => {
                return
                ($@"public {type.Name}Implementation({info.parameters}) 
    :base({info.arguments}) {{ }}");
            })
                               .ConcatStringsWithNewLines();

            return(Tuple.Create(createMethods, constructors));
        }