Skip to content
This repository was archived by the owner on Jul 26, 2023. It is now read-only.

Commit ae86fd0

Browse files
authored
Merge pull request #516 from dotnet/CodeGen-inheritDoc
Friendly overloads now use inheritdoc
2 parents b48b2cb + c962bc7 commit ae86fd0

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

src/CodeGeneration/OfferFriendlyOverloadsGenerator.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace PInvoke
1414
using Microsoft.CodeAnalysis;
1515
using Microsoft.CodeAnalysis.CSharp;
1616
using Microsoft.CodeAnalysis.CSharp.Syntax;
17+
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
1718

1819
/// <summary>
1920
/// Generates <see cref="IntPtr"/> and/or <c>byte[]</c> overloads
@@ -103,12 +104,18 @@ from parameter in nativePointerParameters
103104
}
104105
}
105106

107+
var leadingTrivia = Trivia(
108+
DocumentationCommentTrivia(SyntaxKind.SingleLineDocumentationCommentTrivia).AddContent(
109+
XmlText("/// "),
110+
XmlEmptyElement("inheritdoc").AddAttributes(XmlCrefAttribute(NameMemberCref(IdentifierName(method.Identifier), ToCref(method.ParameterList)))),
111+
XmlText().AddTextTokens(XmlTextNewLine(TriviaList(), "\r\n", "\r\n", TriviaList()))));
112+
106113
var transformedMethodBase = method
107114
.WithReturnType(TransformReturnType(method.ReturnType))
108115
.WithIdentifier(TransformMethodName(method))
109116
.WithModifiers(RemoveModifier(method.Modifiers, SyntaxKind.ExternKeyword))
110117
.WithAttributeLists(FilterAttributes(method.AttributeLists))
111-
.WithLeadingTrivia(method.GetLeadingTrivia().Reverse().TakeWhile(t => !t.IsDirective).Reverse())
118+
.WithLeadingTrivia(leadingTrivia)
112119
.WithTrailingTrivia(method.GetTrailingTrivia().TakeWhile(t => !t.IsDirective))
113120
.WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.None))
114121
.WithExpressionBody(null);
@@ -143,6 +150,15 @@ from parameter in nativePointerParameters
143150
return Task.FromResult(SyntaxFactory.SingletonList<MemberDeclarationSyntax>(generatedType));
144151
}
145152

153+
private static CrefParameterListSyntax ToCref(ParameterListSyntax parameterList) => CrefParameterList().AddParameters(parameterList.Parameters.Select(ToCref).ToArray());
154+
155+
private static CrefParameterSyntax ToCref(ParameterSyntax parameter)
156+
=> CrefParameter(
157+
parameter.Modifiers.Any(SyntaxKind.RefKeyword) ? Token(SyntaxKind.RefKeyword) :
158+
parameter.Modifiers.Any(SyntaxKind.OutKeyword) ? Token(SyntaxKind.OutKeyword) :
159+
default,
160+
parameter.Type);
161+
146162
private static SyntaxList<AttributeListSyntax> FilterAttributes(SyntaxList<AttributeListSyntax> attributeLists)
147163
{
148164
var result = SyntaxFactory.List<AttributeListSyntax>();

0 commit comments

Comments
 (0)