Fix XML generator partial method issues (#1059)

This commit is contained in:
Jon Galloway 2025-12-03 19:45:13 -08:00 • committed by GitHub
commit ce5bb3cf7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -321,10 +321,13 @@ public sealed class XmlToDescriptionGenerator : IIncrementalGenerator
writer.WriteLine($"[return: Description(\"{EscapeString(xmlDocs.Returns)}\")]");
}
// Copy modifiers from original method syntax.
// Copy modifiers from original method syntax, excluding 'async' which is invalid on partial declarations (CS1994).
// Add return type (without nullable annotations).
// Add method name.
writer.Write(string.Join(" ", methodDeclaration.Modifiers.Select(m => m.Text)));
var modifiers = methodDeclaration.Modifiers
.Where(m => !m.IsKind(SyntaxKind.AsyncKeyword))
.Select(m => m.Text);
writer.Write(string.Join(" ", modifiers));
writer.Write(' ');
writer.Write(methodSymbol.ReturnType.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat));
writer.Write(' ');
@ -332,9 +335,11 @@ public sealed class XmlToDescriptionGenerator : IIncrementalGenerator
// Add parameters with their Description attributes.
writer.Write("(");
var parameterSyntaxList = methodDeclaration.ParameterList.Parameters;
for (int i = 0; i < methodSymbol.Parameters.Length; i++)
{
IParameterSymbol param = methodSymbol.Parameters[i];
ParameterSyntax? paramSyntax = i < parameterSyntaxList.Count ? parameterSyntaxList[i] : null;
if (i > 0)
{
@ -352,6 +357,13 @@ public sealed class XmlToDescriptionGenerator : IIncrementalGenerator
writer.Write(param.Type.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat));
writer.Write(' ');
writer.Write(param.Name);
// Preserve default parameter values from the original syntax.
if (paramSyntax?.Default is { } defaultValue)
{
writer.Write(' ');
writer.Write(defaultValue.ToFullString().Trim());
}
}
writer.WriteLine(");");
}