in src/AutoRest.CSharp/Common/Generation/Writers/CodeWriterExtensions.cs [150:273]
private static IDisposable WriteMethodDeclarationNoScope(this CodeWriter writer, MethodSignatureBase methodBase, params string[] disabledWarnings)
{
if (methodBase.Attributes is { } attributes)
{
foreach (var attribute in attributes)
{
if (attribute.Arguments.Any())
{
writer.Append($"[{attribute.Type}(");
foreach (var argument in attribute.Arguments)
{
argument.Write(writer);
}
writer.RemoveTrailingComma();
writer.LineRaw(")]");
}
else
{
writer.Line($"[{attribute.Type}]");
}
}
}
foreach (var disabledWarning in disabledWarnings)
{
writer.Line($"#pragma warning disable {disabledWarning}");
}
writer
.AppendRawIf("public ", methodBase.Modifiers.HasFlag(Public))
.AppendRawIf("internal ", methodBase.Modifiers.HasFlag(Internal))
.AppendRawIf("protected ", methodBase.Modifiers.HasFlag(Protected))
.AppendRawIf("private ", methodBase.Modifiers.HasFlag(Private))
.AppendRawIf("static ", methodBase.Modifiers.HasFlag(Static));
if (methodBase is MethodSignature method)
{
writer
.AppendRawIf("virtual ", methodBase.Modifiers.HasFlag(Virtual))
.AppendRawIf("override ", methodBase.Modifiers.HasFlag(Override))
.AppendRawIf("new ", methodBase.Modifiers.HasFlag(New))
.AppendRawIf("async ", methodBase.Modifiers.HasFlag(Async));
if (method.ReturnType != null)
{
writer.Append($"{method.ReturnType} ");
}
else
{
writer.AppendRaw("void ");
}
if (method.ExplicitInterface is not null)
{
writer.Append($"{method.ExplicitInterface}.");
}
writer.Append($"{methodBase.Name}");
if (method?.GenericArguments != null)
{
writer.AppendRaw("<");
foreach (var argument in method.GenericArguments)
{
writer.Append($"{argument:D},");
}
writer.RemoveTrailingComma();
writer.AppendRaw(">");
}
}
else
{
writer.Append($"{methodBase.Name}");
}
writer
.AppendRaw("(")
.AppendRawIf("this ", methodBase.Modifiers.HasFlag(Extension));
var outerScope = writer.AmbientScope();
foreach (var parameter in methodBase.Parameters)
{
writer.WriteParameter(parameter);
}
writer.RemoveTrailingComma();
writer.Append($")");
if (methodBase is MethodSignature { GenericParameterConstraints: { } constraints })
{
writer.Line();
foreach (var constraint in constraints)
{
constraint.Write(writer);
writer.AppendRaw(" ");
}
}
if (methodBase is ConstructorSignature { Initializer: { } } constructor)
{
var (isBase, arguments) = constructor.Initializer;
if (!isBase || arguments.Any())
{
writer.AppendRaw(isBase ? ": base(" : ": this(");
foreach (var argument in arguments)
{
argument.Write(writer);
writer.AppendRaw(", ");
}
writer.RemoveTrailingComma();
writer.AppendRaw(")");
}
}
foreach (var disabledWarning in disabledWarnings)
{
writer.Line();
writer.Append($"#pragma warning restore {disabledWarning}");
}
return outerScope;
}