Skip to content

[bgen] Add default xml docs for properties that represents fields. #22651

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
May 1, 2025
Merged
6 changes: 4 additions & 2 deletions src/bgen/DocumentationManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,17 @@ public DocumentationManager (string assembly)
}
}

public void WriteDocumentation (StreamWriter sw, int indent, MemberInfo member, Func<XmlNode, XmlNode>? transformNode = null)
public bool WriteDocumentation (StreamWriter sw, int indent, MemberInfo member, Func<XmlNode, XmlNode>? transformNode = null)
{
if (!TryGetDocumentation (member, out var docs, transformNode))
return;
return false;

foreach (var line in docs) {
sw.Write ('\t', indent);
sw.WriteLine (line);
}

return true;
}

public bool TryGetDocumentation (MemberInfo member, [NotNullWhen (true)] out string []? documentation, Func<XmlNode, XmlNode>? transformNode = null)
Expand Down
8 changes: 5 additions & 3 deletions src/bgen/Generator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5465,9 +5465,9 @@ public void PrintExperimentalAttribute (ICustomAttributeProvider mi)
print ($"[Experimental (\"{e.DiagnosticId}\")]");
}

void WriteDocumentation (MemberInfo info, Func<XmlNode, XmlNode>? transformNode = null)
bool WriteDocumentation (MemberInfo info, Func<XmlNode, XmlNode>? transformNode = null)
{
DocumentationManager.WriteDocumentation (sw, indent, info, transformNode);
return DocumentationManager.WriteDocumentation (sw, indent, info, transformNode);
}

public bool TryComputeLibraryName (string attributeLibraryName, Type type, out string library_name, out string library_path)
Expand Down Expand Up @@ -6185,7 +6185,9 @@ public void Generate (Type type)
print ("static {0}? _{1};", fieldTypeName, field_pi.Name);
}

WriteDocumentation (field_pi);
if (!WriteDocumentation (field_pi) && BindingTouch.SupportsXmlDocumentation) {
print ($"/// <summary>Represents the value associated with the constant '{fieldAttr.SymbolName}'.</summary>");
}
PrintAttributes (field_pi, preserve: true, advice: true);
PrintObsoleteAttributes (field_pi);
print ("[Field (\"{0}\", \"{1}\")]", fieldAttr.SymbolName, library_path ?? library_name);
Expand Down
2,001 changes: 0 additions & 2,001 deletions tests/cecil-tests/Documentation.KnownFailures.txt

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions tests/generator/ExpectedXmlDocs.MacCatalyst.xml
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,12 @@
Summary for TG1.TGProperty
</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField">
<summary>TOuter.TInner.Field</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField2">
<summary>Represents the value associated with the constant 'TOuterInnerField2'.</summary>
</member>
<member name="T:XmlDocumentation.OptionsA">
<summary>Summary for OptionsA.</summary>
</member>
Expand Down
6 changes: 6 additions & 0 deletions tests/generator/ExpectedXmlDocs.iOS.xml
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,12 @@
Summary for TG1.TGProperty
</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField">
<summary>TOuter.TInner.Field</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField2">
<summary>Represents the value associated with the constant 'TOuterInnerField2'.</summary>
</member>
<member name="T:XmlDocumentation.TypeWithApparance">
<summary>
Summary for TypeWithApparance
Expand Down
6 changes: 6 additions & 0 deletions tests/generator/ExpectedXmlDocs.macOS.xml
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,12 @@
Summary for TG1.TGProperty
</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField">
<summary>TOuter.TInner.Field</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField2">
<summary>Represents the value associated with the constant 'TOuterInnerField2'.</summary>
</member>
<member name="T:XmlDocumentation.OptionsA">
<summary>Summary for OptionsA.</summary>
</member>
Expand Down
6 changes: 6 additions & 0 deletions tests/generator/ExpectedXmlDocs.tvOS.xml
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,12 @@
Summary for TG1.TGProperty
</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField">
<summary>TOuter.TInner.Field</summary>
</member>
<member name="P:XmlDocumentation.TOuter.TInner.TOuterInnerField2">
<summary>Represents the value associated with the constant 'TOuterInnerField2'.</summary>
</member>
<member name="T:XmlDocumentation.OptionsA">
<summary>Summary for OptionsA.</summary>
</member>
Expand Down
12 changes: 12 additions & 0 deletions tests/generator/tests/xmldocs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -280,4 +280,16 @@ interface TClassDelegate {
}

interface ITClassDelegate { }

class TOuter {
[Static]
interface TInner {
/// <summary>TOuter.TInner.Field</summary>
[Field ("TOuterInnerField", "__Internal")]
NSString TOuterInnerField { get; }
// no xml comment, should get a default value
[Field ("TOuterInnerField2", "__Internal")]
NSString TOuterInnerField2 { get; }
}
}
}