private string GenerateUrlParameterOptionFactoryMethod()

in src/JetBrains.Space.Generator/CodeGeneration/CSharp/Generators/CSharpApiModelUrlParameterGenerator.cs [56:112]


    private string GenerateUrlParameterOptionFactoryMethod(
        ApiUrlParameter apiUrlParameter,
        ApiUrlParameterOption apiUrlParameterOption,
        string typeNameForUrlParameter)
    {
        var indent = new Indent();
        var builder = new CSharpBuilder();

        var typeNameForUrlParameterOption = apiUrlParameterOption.ToCSharpClassName();
        var factoryMethodNameForUrlParameterOption = apiUrlParameterOption.ToCSharpFactoryMethodName(typeNameForUrlParameterOption, apiUrlParameter);
        
        // Option method documentation
        ApiDocumentationUtilities.RenderCSharpDocumentation(apiUrlParameterOption.Description, apiUrlParameterOption.Experimental, output =>
        {
            builder.Append(indent.Wrap(output));
        });
        
        // Option method deprecation
        if (apiUrlParameterOption.Deprecation != null)
        {
            builder.AppendLine($"{indent}{apiUrlParameterOption.Deprecation.ToCSharpDeprecation()}");
        }
        else if (apiUrlParameterOption.FeatureFlag != null && _codeGenerationContext.TryGetFeatureFlag(apiUrlParameterOption.FeatureFlag, out var featureFlag))
        {
            builder.AppendLine($"{indent}{featureFlag.ToCSharpFeatureFlag()}");
        }
        else if (apiUrlParameterOption.Experimental != null && FeatureFlags.GenerateExperimentalAnnotations)
        {
            builder.AppendLine($"{indent}{apiUrlParameterOption.Experimental.ToCSharpExperimental()}");
        }
            
        // Option method
        switch (apiUrlParameterOption)
        {
            case ApiUrlParameterOption.Const:
                builder.AppendLine($"{indent}public static {typeNameForUrlParameter} {factoryMethodNameForUrlParameterOption}");
                indent.Increment();
                builder.AppendLine($"{indent}=> new {typeNameForUrlParameterOption}();");
                indent.Decrement();
                break;
                
            case ApiUrlParameterOption.Var varParameter:
                var methodParametersBuilder = new MethodParametersBuilder(_codeGenerationContext)
                    .WithParametersForApiFields(varParameter.Parameters);
                    
                builder.AppendLine($"{indent}public static {typeNameForUrlParameter} {factoryMethodNameForUrlParameterOption}({methodParametersBuilder.BuildMethodParametersList()})");
                indent.Increment();
                builder.AppendLine($"{indent}=> new {typeNameForUrlParameterOption}({methodParametersBuilder.BuildMethodCallParameters(includePrefix: false)});");
                indent.Decrement();
                break;
            default:
                throw new ArgumentOutOfRangeException(nameof(apiUrlParameterOption));
        }
        builder.AppendLine($"{indent}");
            
        return builder.ToString();
    }