Skip to content

Commit

Permalink
Merge pull request #681 from mono/develop
Browse files Browse the repository at this point in the history
add tag SetMethodName
  • Loading branch information
huangmin-ms authored Dec 20, 2023
2 parents 01efe58 + ecab727 commit f49680e
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 26 deletions.
2 changes: 1 addition & 1 deletion mdoc/Consts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ namespace Mono.Documentation
{
public static class Consts
{
public static string MonoVersion = "5.9.2.4";
public static string MonoVersion = "5.9.3";
public const string DocId = "DocId";
public const string CppCli = "C++ CLI";
public const string CppCx = "C++ CX";
Expand Down
77 changes: 55 additions & 22 deletions mdoc/Mono.Documentation/MDocUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2411,66 +2411,98 @@ internal static IEnumerable<T> Sort<T> (IEnumerable<T> list)
return l;
}

private void UpdateMember (DocsNodeInfo info, FrameworkTypeEntry typeEntry, Dictionary<string, List<MemberReference>> implementedMembers, IEnumerable<Eiimembers> eiiMenbers)
private void UpdateMember(DocsNodeInfo info, FrameworkTypeEntry typeEntry, Dictionary<string, List<MemberReference>> implementedMembers, IEnumerable<Eiimembers> eiiMenbers)
{
XmlElement me = (XmlElement)info.Node;
MemberReference mi = info.Member;
typeEntry.ProcessMember (mi);
typeEntry.ProcessMember(mi);


var memberName = GetMemberName (mi);
me.SetAttribute ("MemberName", memberName);
var memberName = GetMemberName(mi);
me.SetAttribute("MemberName", memberName);

WriteElementText (me, "MemberType", GetMemberType (mi));
WriteElementText(me, "MemberType", GetMemberType(mi));
MakeSetMethodName(typeEntry, me, mi);
AddImplementedMembers(typeEntry, mi, implementedMembers, me, eiiMenbers);

if (!no_assembly_versions)
{
if (!IsMultiAssembly)
UpdateAssemblyVersions (me, mi, true);
UpdateAssemblyVersions(me, mi, true);
else
{
var node = AddAssemblyNameToNode (me, mi.Module, mi.DeclaringType.Resolve());
var node = AddAssemblyNameToNode(me, mi.Module, mi.DeclaringType.Resolve());

if (typeEntry.IsMemberOnFirstFramework(mi))
{
node.SelectNodes("AssemblyVersion").Cast<XmlNode>().ToList().ForEach(e => e.ParentNode.RemoveChild(e));
}

UpdateAssemblyVersionForAssemblyInfo (node, me, new[] { GetAssemblyVersion (mi.Module.Assembly) }, add: true);
UpdateAssemblyVersionForAssemblyInfo(node, me, new[] { GetAssemblyVersion(mi.Module.Assembly) }, add: true);
}
}
else
{
ClearElement (me, "AssemblyInfo");
ClearElement(me, "AssemblyInfo");
}

MakeMemberAttributes (me, mi, typeEntry);
MakeMemberAttributes(me, mi, typeEntry);

MakeReturnValue (typeEntry, me, mi, MDocUpdater.HasDroppedNamespace (mi));
MakeReturnValue(typeEntry, me, mi, MDocUpdater.HasDroppedNamespace(mi));
if (mi is MethodReference)
{
MethodReference mb = (MethodReference)mi;
if (mb.IsGenericMethod ())
MakeTypeParameters (typeEntry, me, mb.GenericParameters, mi, MDocUpdater.HasDroppedNamespace (mi));
if (mb.IsGenericMethod())
MakeTypeParameters(typeEntry, me, mb.GenericParameters, mi, MDocUpdater.HasDroppedNamespace(mi));
}
bool fxAlternateTriggered = false;
MakeParameters (me, mi, typeEntry, ref fxAlternateTriggered, MDocUpdater.HasDroppedNamespace (mi));
MakeParameters(me, mi, typeEntry, ref fxAlternateTriggered, MDocUpdater.HasDroppedNamespace(mi));

string fieldValue;
if (mi is FieldDefinition && GetFieldConstValue ((FieldDefinition)mi, out fieldValue))
WriteElementText (me, "MemberValue", fieldValue);
if (mi is FieldDefinition && GetFieldConstValue((FieldDefinition)mi, out fieldValue))
WriteElementText(me, "MemberValue", fieldValue);

info.Node = WriteElement(me, "Docs");
MakeDocNode(info, typeEntry.Framework.Importers, typeEntry);

info.Node = WriteElement (me, "Docs");
MakeDocNode (info, typeEntry.Framework.Importers, typeEntry);

foreach (MemberFormatter f in FormatterManager.MemberFormatters)
{
UpdateSignature (f, mi, me, typeEntry, implementedMembers);
UpdateSignature(f, mi, me, typeEntry, implementedMembers);
}

OrderMemberNodes (me, me.ChildNodes);
UpdateExtensionMethods (me, info);
OrderMemberNodes(me, me.ChildNodes);
UpdateExtensionMethods(me, info);
}

public static void MakeSetMethodName(FrameworkTypeEntry typeEntry, XmlElement me, MemberReference mi)
{
if (mi is PropertyDefinition)
{
var setMethodName = ((PropertyDefinition)mi).SetMethod?.Name.Split('.').LastOrDefault();
if (setMethodName != null && !setMethodName.StartsWith("set"))
{
DocUtils.AddElementWithFx(
typeEntry,
parent: me,
isFirst: typeEntry.IsMemberOnFirstFramework(mi),
isLast: typeEntry.IsMemberOnLastFramework(mi),
allfxstring: new Lazy<string>(() => typeEntry.AllFrameworkStringForMember(mi)),
clear: parent =>
{
ClearElement(parent, "SetMethodName");
},
findExisting: parent =>
{
return parent.SelectSingleNode($"Member/SetMethodName") as XmlElement;
},
addItem: parent =>
{
var newNode = WriteElementText(parent, "SetMethodName", setMethodName, forceNewElement: false);

return newNode;
});
}
}
}

private static void UpdateSignature(MemberFormatter formatter, TypeDefinition type, XmlElement xmlElement, FrameworkTypeEntry typeEntry)
Expand Down Expand Up @@ -2913,6 +2945,7 @@ static void AddXmlNode (XmlElement[] relevant, Func<XmlElement, bool> valueMatch
"Metadata",
"MemberSignature",
"MemberType",
"SetMethodName",
"Implements",
"AssemblyInfo",
"Attributes",
Expand Down
11 changes: 11 additions & 0 deletions mdoc/Resources/monodoc-ecma.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,16 @@ add masterdoc support?
</xs:simpleContent>
</xs:complexType>
</xs:element>

<xs:element name="SetMethodName">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="FrameworkAlternate" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

<xs:element name="Meta">
<xs:complexType>
Expand Down Expand Up @@ -531,6 +541,7 @@ add masterdoc support?
<xs:element ref="Metadata" minOccurs="0" maxOccurs="1" />
<xs:element ref="MemberSignature" minOccurs="1" maxOccurs="unbounded" />
<xs:element ref="MemberType" maxOccurs="1" />
<xs:element ref="SetMethodName" minOccurs="0" maxOccurs="1" />
<xs:element ref="Implements" minOccurs="0" maxOccurs="1" />
<xs:element ref="AssemblyInfo" minOccurs="0" maxOccurs="1" />
<xs:element ref="Attributes" minOccurs="0" maxOccurs="1" />
Expand Down
26 changes: 26 additions & 0 deletions mdoc/mdoc.Test/MDocUpdaterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,32 @@ public void RemoveInvalidAssembliesInfo()
// delitem.ParentNode.RemoveChild(child);
}

[Test]
public void MakeSetMethodName_Test()
{
List<FrameworkEntry> entries = new List<FrameworkEntry>();
FrameworkEntry frameworkEntry = new FrameworkEntry(entries, entries);
frameworkEntry.Name = "winui-2.8";
FrameworkTypeEntry typeEntry = new FrameworkTypeEntry(frameworkEntry);

var doc = new XmlDocument();
doc.LoadXml(XmlConsts.SetMethodName);

var member = GetType(typeof(mdoc.Test2.EiiImplementClass)).Properties.FirstOrDefault(t => t.FullName == "System.String mdoc.Test2.EiiImplementClass::init()");
MDocUpdater.MakeSetMethodName(typeEntry, doc.DocumentElement, member);
var node = doc.SelectSingleNode($"Member/SetMethodName");
Assert.IsNull(node);

member = GetType(typeof(mdoc.Test2.EiiImplementClass)).Properties.FirstOrDefault(t => t.FullName == "System.String mdoc.Test2.EiiImplementClass::source()");
member.SetMethod.Name = "put_Source";
MDocUpdater.MakeSetMethodName(typeEntry, doc.DocumentElement, member);
node = doc.SelectSingleNode($"Member/SetMethodName");
Assert.IsNotNull(node);
Assert.AreEqual(node.InnerText, member.SetMethod.Name);
Assert.AreEqual(node.Attributes["FrameworkAlternate"].Value, frameworkEntry.Name);

}

[Test]
public void UpdateToRight_MethodInterface_Test()
{
Expand Down
6 changes: 5 additions & 1 deletion mdoc/mdoc.Test/SampleClasses/EiiImplementclass.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class EiiImplementClass : Interface_A,Interface_B

public int no { get; }
int Interface_B.no { get; }

public string GetNo() => "1";
string Interface_A.GetNo() => "7";

Expand All @@ -31,5 +31,9 @@ event EventHandler<EventArgs> Interface_B.ItemChanged
remove { }
}

public string source { get; set;}

public string init { get; init;}

}
}
11 changes: 11 additions & 0 deletions mdoc/mdoc.Test/XmlConsts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -706,5 +706,16 @@ class XmlConsts
</Type>
";
#endregion

#region
public const string SetMethodName = @"<Member MemberName=""Source"">
<MemberSignature Language=""C#"" Value=""public Windows.UI.Xaml.Media.ImageSource Source { get; set; }"" />
<MemberSignature Language=""ILAsm"" Value="".property instance class Windows.UI.Xaml.Media.ImageSource Source"" />
<MemberSignature Language=""DocId"" Value=""P:Microsoft.UI.Xaml.Controls.ImageIcon.Source"" />
<MemberSignature Language=""VB.NET"" Value=""Public Property Source As ImageSource"" />
<MemberSignature Language=""F#"" Value=""member this.Source : Windows.UI.Xaml.Media.ImageSource with get, set"" Usage=""Source"" />
<MemberType>Property</MemberType>
</Member>";
#endregion
}
}
2 changes: 1 addition & 1 deletion mdoc/mdoc.Test/mdoc.Test.FSharp/Collections.fs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ let f (x:Map<int, int>) = 0
let f2 (x:seq<int>) = 0

type MDocInterface<'key> = interface
end
end

type MDocTestMap<'Key, 'Value> = class
interface MDocInterface<KeyValuePair<'Key, 'Value>>
Expand Down
2 changes: 1 addition & 1 deletion mdoc/mdoc.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<package >
<metadata>
<id>mdoc</id>
<version>5.9.2.4</version>
<version>5.9.3</version>
<title>mdoc</title>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
Expand Down

0 comments on commit f49680e

Please sign in to comment.