Fix XML generator partial method issues (#1059)
This commit is contained in:
parent
db0f4d13b4
commit
ce5bb3cf7f
1 changed files with 268 additions and 2 deletions
|
|
@ -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(");");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue