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